mid=max;
max=c;
else
mid=c;
end
fprintf('a=%d,b=%d,c=%d从小到大依次为:
%d,%d,%d\n',a,b,c,min,mid,max);
运行结果:
4.计算多项式y=x5-3x4-8x3+7x2+3x-5在[-4,5]区间的微分,并作图.
程序:
x=[-4:
0.5:
5];
dy=(5*x.^4-12*x.^3-24*x.^2+14*x+3)*0.01;
plot(x,dy);
运行结果:
5.已知y=1-1/2+1/3-1/4+……-1/100,求y的值。
程序:
y=0;
forx=1:
1:
100
y=y+(-1)^(x+1)*(1/x);
end
y
运行结果:
二.例题
例2-13建立一个字符串向量,然后对该向量做如下处理:
(1)取第1~5个字符组成的子字符串。
(2)将字符串倒过来重新排列。
(3)将字符串中的小写字母变成相应的大写字母,其余字符不变。
(4)统计字符串中小写字母的个数。
程序:
str='ABc123d4e56Fg9'
A=str(1:
5)
B=length(str)
C=str(B:
-1:
1)
E=0;
fori=1:
B
ifstr(i)>=97&&str(i)<=122
E=E+1;
str(i)=str(i)-32;
end
end
D=str
E
运行结果:
例5-1在0≤x≤2区间内,绘制曲线
y=2e-0.5xcos(4πx)
程序:
x=0:
pi/100:
2*pi;
y=2*exp(-0.5*x).*cos(4*pi*x);
plot(x,y)
运行结果:
例5-5采用图形保持,在同一坐标内绘制曲线y1=0.2e-0.5xcos(4πx)和y2=2e-0.5xcos(πx)。
程序:
x=0:
pi/100:
2*pi;
y1=0.2*exp(-0.5*x).*cos(4*pi*x);
plot(x,y1)
holdon
y2=2*exp(-0.5*x).*cos(pi*x);
plot(x,y2);
holdoff
运行结果:
例5-6在同一坐标内,分别用不同线型和颜色绘制曲线y1=0.2e-0.5xcos(4πx)和y2=2e-0.5xcos(πx),标记两曲线交叉点。
程序:
x=linspace(0,2*pi,1000);%建立矩阵
y1=0.2*exp(-0.5*x).*cos(4*pi*x);
y2=2*exp(-0.5*x).*cos(pi*x);
k=find(abs(y1-y2)<1e-2);%查找相等点
x1=x(k);
y3=0.2*exp(-0.5*x1).*cos(4*pi*x1);
plot(x,y1,x,y2,'k:
',x1,y3,'bp');
运行结果:
例5-13分别以条形图、阶梯图、杆图和填充图形式绘制曲线y=2sin(x)。
程序:
x=0:
pi/10:
2*pi;
y=2*sin(x);
subplot(2,2,1);bar(x,y,'g');%条形
title('bar(x,y,"g")');
subplot(2,2,2);stairs(x,y,'b');%阶梯
title('stairs(x,y,"b")');
subplot(2,2,3);stem(x,y,'k');%杆图
title('stem(x,y,"k")');
subplot(2,2,4);fill(x,y,'r');%填充图
title('fill(x,y,"r")');
运行结果:
三、课后习题
2.2设一个线性时不变系统的系统传递函数为
,通过Matlab画出如下输入信号经过该系统时的输出信号波形及频谱。
(1)
(2)
(3)
程序:
clear;clc;
T=1;
N_sample=100;%采样点
dt=T/N_sample;
t=0:
dt:
10*T-dt;
f=5;
y1=10*sin(2*pi*f*t);
y2=10*(sin(2*pi*f*t)+sin(20*pi*f*t)+sin(40*pi*f*t));
y3=[ones(1,N_sample),zeros(1,9*N_sample)];
[f1,sf1]=T2F(t,y1);%傅里叶变换
[f2,sf2]=T2F(t,y2);
[f3,sf3]=T2F(t,y3);
H1=1j*2*pi*f1./(1+1j*2*pi*f1);
H2=1j*2*pi*f2./(1+1j*2*pi*f2);
H3=1j*2*pi*f3./(1+1j*2*pi*f3);
sf1=sf1.*H1;
sf2=sf2.*H2;
sf3=sf3.*H3;
[t1,y10]=F2T(f1,sf1);%反傅里叶变换
[t2,y20]=F2T(f2,sf2);
[t3,y30]=F2T(f3,sf3);
figure
(1)
subplot(311)
plot(t,y1);
title('原始波形');
subplot(312)
plot(f1,sf1);
title('频谱图');
subplot(313)
plot(t1,y10);
title('输出波形');
figure
(2)
subplot(311)
plot(t,y2);
title('原始波形');
subplot(312)
plot(f2,sf2);
title('频谱图');
subplot(313)
plot(t2,y20);
title('输出波形');
figure(3)
subplot(311)
plot(t,y3);
title('原始波形');
subplot(312)
plot(f3,sf3);
title('频谱图');
subplot(313)
plot(t3,y30);
title('输出波形');
函数定义:
function[f,sf]=T2F(t,st)
dt=t
(2)-t
(1);
T=t(end);
df=1/T;
N=length(st);
f=-N/2*df:
df:
N/2*df-df;
sf=fft(st);
sf=T/N*fftshift(sf);
function[t,st]=F2T(f,sf)
df=f
(2)-f
(1);
Fmx=(f(end)-f
(1)+df);
dt=1/Fmx;
N=length(sf);
T=dt*N;
t=0:
dt:
T-dt;
sff=fftshift(sf);
st=Fmx*ifft(sff);
运行结果:
2.3设输入信号为
,其中
,带通系统响应幅度谱
,其相位为线性相位
,即
通过Matlab画出信号波形。
(1)用等效基带方式。
(2)用直接卷积方式。
(3)用频域相乘方式,再取傅立叶反变换方式。
(4)画出输出信号的幅度谱。
(5)求输出信号的功率(理论值与Matlab计算对比)。
(6)改变带通系统的宽带,观察输出信号波形的变化。
程序:
clearall;
clc;
dt=0.01;
t=0:
dt:
5-dt;
gt=[ones(1,1/dt),zeros(1,4/dt)];
s1=gt.*cos(20*pi*t);
[f1s1f]=T2F(t,s1);
s1_lowpass=hilbert(s1).*exp(-j*2*pi*10*t);
[f2s2f]=T2F(t,s1_lowpass);
h2f=zeros(1,length(s2f));
[ab]=find(abs(s1f)==max(abs(s1f)));%找到带通信号的中心频率
h2f(201-15:
201+15)=1;
h2f(301-15:
301+15)=1;
h2f=h2f.*exp(-1j*4*pi*f2);%加入线性相位,
[t1h1]=F2T(f2,h2f);%带通系统的冲激响应
h1_lowpass=hilbert(h1).*exp(-j*2*pi*10*t);%等效基带系统的冲激响应
figure
(1)
subplot(321);
plot(t,s1);
xlabel('t');ylabel('s1(t)');
title('带通信号');
subplot(323);
plot(f1,abs(s1f));
xlabel('f');ylabel('|S1(f)|');
title('带通信号幅度谱');
subplot(322)
plot(t,real(s1_lowpass));
xlabel('t');ylabel('Re[s_l(t)]');
title('等效基带信号的实部');
subplot(324)
plot(f2,abs(s2f));
xlabel('f');ylabel('|S_l(f)|');
title('等效基带信号的幅度谱');%画带通系统及其等效基带的图
subplot(325)
plot(f2,abs(h2f));
xlabel('f');ylabel('|H(f)|');
title('带通系统的传输响应幅度谱');
figure
(2)
subplot(322)
plot(t1,h1);
xlabel('t');ylabel('h(t)');
title('带通系统的冲激响应');
subplot(323)
[f3hlf]=T2F(t1,h1_lowpass);
plot(f3,abs(hlf));
xlabel('f');ylabel('|H_l(f)|');
title('带通系统的等效基带幅度谱');
subplot(324)
plot(t1,h1_lowpass);
xlabel('t');ylabel('h_l(t)');
title('带通系统的等效基带冲激响应');%画出带通信号经过带通系统的响应及等效基带信号经过等效基带系统的响应
tt=0:
dt:
t1(end)+t(end)+dt;
yt=conv(s1,h1);
subplot(325)
plot(tt,yt);
xlabel('t');ylabel('y(t)');
title('带通信号与带通系统响应的卷积')
ytl=conv(s1_lowpass,h1_lowpass).*exp(j*2*pi*10*tt);
subplot(3,2,6)
plot(tt,real(yt));
xlabel('t');ylabel('y_l(t)cos(20*pi*t');
title('等效基带与等效基带系统响应的卷积×中心频率载波')
subplot(3,2,1)
sff=s1f.*h2f;
[t,st]=F2T(f1,sff);
plot(t,st);
title('取傅立叶反变换方式')
df=f1
(2)-f1
(1);
E=sum(abs(sff).^2)*df
运行结果:
2.4信号x(t)定义为
通过Matlab画出该信号的幅度和相位谱。
程序:
clearall;
clc;
T=1;
N_sample=100;
dt=T/N_sample;
t=-2:
dt:
5;
x=[ones(1,N_sample),abs(t(N_sample:
3*N_sample)),ones(1,N_sample),zeros(1,3*N_sample)];
[f,sf]=T2F(t,x);
subplot(311)
plot(t,x);
title('原始波形');
subplot(312)
plot(f,angle(sf));
title('相位谱');
subplot(313)
plot(f,abs(sf));
title('幅度谱');
运行结果:
通信系统仿真实验第二次上机
实验内容:
用matlab产生一个频率为10Hz、功率为2w的余弦信源
m(t),设载波频率为1KHz,试画出:
(1)AM信号(直流0.5V),DSB-SC,SSB,VSB调制信号;
(2)该调制信号的功率谱密度;
(3)相干解调后的信号波形。
程序:
closeall;
clearall;
dt=0.001;%时间采样间隔
fm=10;%信源最高频率
fc=1000;%载波中心频率
T=0.5;%信号时长
t1=0:
dt:
T-dt;
mt=sqrt(4)*cos(2*pi*fm*t1);%信源
%N0=0.01;%白噪单边功率谱密度
A=0.5;
s_am=(A+mt).*cos(2*pi*fc*t1);
B=2*fm;%带通滤波器带宽窄带高斯噪声产生
figure
(1)
subplot(311)
plot(t1,s_am);
holdon;
plot(t1,A+mt,'r--');%标示AM的包络
title('AM调制信号及其包络');
xlabel('t');
figure
(1)
rt1=s_am.*cos(2*pi*fc*t1);%相干解调
rt1=rt1-mean(rt1);
[f1,rf1]=T2F(t1,rt1);
[t1,rt1]=lpf(f1,rf1,2*fm);%低通滤波
subplot(312)
plot(t1,rt1);
holdon;
plot(t1,mt/2,'r--');
title('相干解调后的信号波形与输入信号的比较');
xlabel('t')
subplot(313)
[f1,sf]=T2F(t1,s_am);
psf=(abs(sf).^2)/T;
plot(f1,psf);
axis([-2*fc2*fc0max(psf)]);
title('AM信号功率谱');
xlabel('f');
%%DSB
figure
(2)
s_dsb=mt.*cos(2*pi*fc*t1);
subplot(311)
plot(t1,s_dsb);
holdon;
plot(t1,mt,'r--');%标示AM的包络
title('DSB调制信号及其包络');
xlabel('t');
rt2=s_dsb.*cos(2*pi*fc*t1);
rt2=rt2-mean(rt2);
[f2,rf2]=T2F(t1,rt2);
[t2,rt2]=lpf(f2,rf2,2*fm);
subplot(312)
plot(t2,rt2);
holdon;
plot(t2,mt/2,'r--');
title('相干解调后的信号波形与输入信号的比较');
xlabel('t')
subplot(313)
[f2,sf]=T2F(t2,s_dsb);
psf=(abs(sf).^2)/T;
plot(f2,psf);
axis([-2*fc2*fc0max(psf)]);
title('DSB信号功率谱');
xlabel('f');
figure(3)
s_ssb=real(hilbert(mt).*exp(j*2*pi*fc*t1));
B=fm;
subplot(311)
plot(t1,s_ssb);
holdon;%画出SSB信号波形
plot(t1,mt,'r--');%标示mt的波形
title('SSB调制信号');
xlabel('t');
rt=s_ssb.*cos(2*pi*fc*t1);
rt=rt-mean(rt);
[f,rf]=T2F(t1,rt);
[t,rt]=lpf(f,rf,2*fm);
subplot(312)
plot(t,rt);
holdon;
plot(t,mt/2,'r--');
title('相干解调后的信号波形与输入信号的比较');
xlabel('t')
subplot(313)
[f,sf]=T2F(t,s_ssb);
psf=(abs(sf).^2)/T;
plot(f,psf);
axis([-2*fc2*fc0max(psf)]);
title('SSB信号功率谱');
xlabel('f');
s_vsb=mt.*cos(2*pi*fc*t1);
B=1.2*fm;
[f,sf]=T2F(t1,s_vsb);
[t,s_vsb]=vsbpf(f,sf,0.2*fm,1.2*fm,fc);%VSB信号
figure(4)
subplot(311)
plot(t,s_vsb);
holdon;%画出VSB信号波形
plot(t,mt/4,'r--');%标示mt的波形
title('VSB调制信号');
xlabel('t');
rt=s_vsb.*cos(2*pi*fc*t1);
[f,rf]=T2F(t1,rt);
[t,rt]=lpf(f,rf,2*fm);
subplot(312)
plot(t,rt);
holdon;
plot(t,mt/8,'r--');
title('相干解调后的信号波形与输入信号的比较');
xlabel('t')
subplot(313)
[f,sf]=T2F(t,s_vsb);
psf=(abs(sf).^2)/T;
plot(f,psf);
axis([-2*fc2*fc0max(psf)]);
title('VSB信号功率谱');
xlabel('f');
函数定义:
function[tst]=lpf(f,sf,B)
df=f
(2)-f
(1);
T=1/df;
hf=zeros(1,length(f));
bf=[-floor(B/df):
floor(B/df)]+floor(length(f)/2);
hf(bf)=1;
yf=hf.*sf;
[t,st]=F2T(f,yf);
st=real(st);
function[t,st]=vsbpf(f,sf,B1,B2,fc)
df=f
(2)-f
(1);
T=1/df;
hf=zeros(1,length(f));
bf1=[floor((fc-B1)/df):
floor((fc+B1)/df)];
bf2=[floor((fc+B1)/df)+1:
floor((fc+B2)/df)];
f1=bf1+floor(length(f)/2);
f2=bf2+floor(length(f)/2);
stepf=1/length(f1);
hf(f1)=0:
stepf:
1-stepf;
hf(f2)=1;
f3=-bf1+floor(length(f)/2);
f4=-bf2+floor(length(f)/2);
hf(f3)=0:
stepf:
1-stepf;
hf(f4)=1;
yf=hf.*st;
[t,st]=F2T(f,yf);
st=real(st);
运行结果:
通信系统仿真实验第三次上机
6-1
程序:
clc
clearall;
closeall;
M=4;Ts=2;fc=20;N_sample=16;N_num=50;
dt=1/fc/N_sample;%波形采样间隔
t=0:
dt:
N_num*Ts-dt;
d1=sign(randn(1,N_num*2));
d2=sign(randn(1,N_num*2));
gt=ones(1,fc*N_sample);%NRZ波形
%QPSK调制
s1=sigexpand(d1,fc*N_sample);
s2=sigexpand(d2,fc*N_sample);
b1=conv(s1,gt);
b2=conv(s2,gt);
s1=b1(1:
length(s1));
s2=b2(1:
length(s2));
st_qpsk=s1.*cos(2*pi*fc*t)-s2.*sin(2*pi*fc*t);
[fy1f]=T2F(t,st_qpsk);
[ty1]=bpf(f,y1f,fc-1/Ts,fc+1/Ts);%4HZ代通
y=hilbert(y1);am=abs(y);
subplot(211);plot(t,st_qpsk);xlabel('t');
axis([515-1.61.6]);title('QPSK波形');
subplot(212);plot(t,y1,t,am);xlabel('t');
axis([515-1.61.6]);title('经过带宽为4HZ的带通系统后的包络波形');
函数定义:
function[out]=sigexpand(d,M)
%将输入的序列扩展成间隔为N-1个0的序列?
N=length(d);
out=zeros(M,N);
out(1,:
)=d;
out=reshape(out,1,M*N);
function[t,st]=bpf(f,sf,B1,B2)
df=f
(2)-f
(1);
T=1/df;
hf=zeros(1,length(f));
bf=[floor(B1/df):
floor(B2/df)]
bf1=floor(length(f)/2)+bf;
bf2=floor(length(f)/2)-bf;
hf(bf1)=1/sqrt(2*(B2-B1));
hf(bf2)=1/sqrt(2*(B2-B1));
yf=hf.*sf.*exp(-j*2*pi*f*0.1*T);
[t,st]=F2T(f,yf);
运行结果: