信号上机实验三.docx
《信号上机实验三.docx》由会员分享,可在线阅读,更多相关《信号上机实验三.docx(33页珍藏版)》请在冰豆网上搜索。
![信号上机实验三.docx](https://file1.bdocx.com/fileroot1/2022-12/15/9fb5fb01-c9b6-4524-8bf8-6716aca845f6/9fb5fb01-c9b6-4524-8bf8-6716aca845f61.gif)
信号上机实验三
信号上机实验三
一、实验目的
1、掌握信号时域运算的MATLAB实现方法。
2、掌握信号时域变换的MATLAB实现方法
二、实验原理
信号的时域运算包括信号的相加、相乘,信号的时域变换包括信号的平移、反折、倒相及信号的尺度变换
三、实验内容
1、将实验原理中提到的例子在计算机上全部练习一遍;
解:
例3-2.求下列两序列的和序列:
f1(k)={-2,-1,0,1,2},f2(k)={1,1,1,}
其MATLAB命令为
function[f,k]=isxj(f1,f2,k1,k2)
k=min(min(k1),min(k2)):
max(max(k1),max(k2));
s1=zeros(1,length(k));s2=s1;
s1(find((k>=min(k1))&(k<=max(k1))==1))=f1;
s2(find((k>=min(k2))&(k<=max(k2))==1))=f2;
f=s1+s2;
stem(k,f,'filled')
axis([(min(min(k1),min(k2))-1),(max(max(k1),max(k2))+1),(min(f)-0.5),(max(f)+0.5)])
例3-3:
己知f(k)=2k-3≤k≤3,画出f(-k)波形。
function[f,k]=isfz(f1,k1)
f=fliplr(f1);k=-fliplr(k1);
stem(k,f,'filled')
axis([min(k)-1,max(k)+1,min(f)-0.5,max(f)+0.5])
例3-4.己知f(k)=k2-4≤k≤4,画出f(k-2)波形。
function[f,k]=isyw(ff,kk,k0)
k=kk+k0;f=ff;
stem(k,f,'filled')
axis([min(k)-1,max(k)+1,min(f)-0.5,max(f)+0.5])
2、已知信号
,画出
的波形;
解;
3、已知两个连续信号
,用MATLAB绘出下列信号的波形:
1)
2)
3)
4)
解;
4、离散序列
,用MATLAB绘出下列序列的波形。
1)
2)
3)
4)
解:
(1)
(2)
(3)
(4)
四、实验思考题
在对信号进行平移、反折和尺度变换时,运算顺序对结果是否有影响?
在运算中应该注意什么?
解:
运算顺序对结果没影响。
为了画f(-t-t0)或f(-k-k0),最好是先平移,将f(t)平移为f(t-t0)或f(k)平移为f(k-k0),然后再反转,将变量t和k相应地换为-t或-k。
如果反转后再进行平移,由于这时自变量变为-t或-k,故平移方向与前述相反。
信号上机实验五
一、实验目的
1.用MATLAB实现周期信号傅里叶级数分解与综合。
2.利用MATLAB对周期信号进行频谱分析
二、实验原理
任何满足狄里赫里条件的周期信号,都可以表示成三角形式或指数形式的傅里叶级数展开式。
(5.1)
(5.2)
一般来说,傅里叶级数有无限个非零值,即任何具有有限个间断点的周期信号都一定有一个无限非零系数的傅里叶级数表示。
但对数值计算来说,这是无法实现的。
在实际应用中,我们可以用有限项的傅里叶级数求和来逼近。
即对有限项和:
(5.3)
当N值取得较大时,上式就是原周期信号
的一个很好的近似。
上式常称作截断傅里叶级数表示。
三、实验内容
1.将例5-1在计算机上练习一遍,观察运行结果是否正确;
解;
function[A_sym,B_sym]=CTFShchsym
symstnkx
T=5;tao=0.2*T;a=0.5;
ifnargin<4;Nf=6;end
ifnargin<5;Nn=32;end
x=time_fun_x(t);
A0=2*int(x,t,-a,T-a)/T;
As=int(2*x*cos(2*pi*n*t/T)/T,t,-a,T-a);
Bs=int(2*x*sin(2*pi*n*t/T)/T,t,-a,T-a);
A_sym
(1)=double(vpa(A0,Nn));
fork=1:
Nf
A_sym(k+1)=double(vpa(subs(As,n,k),Nn));
B_sym(k+1)=double(vpa(subs(Bs,n,k),Nn));end
ifnargout==0
c=A_sym;disp(c)
d=B_sym;disp(d)
t=-8*a:
0.01:
T-a;
f1=0.4/2+0.3742.*cos(2*pi*1*t/5)+0.*sin(2*pi*1*t/5);
f2=0.3027.*cos(2*pi*2*t/5)+0.*sin(2*pi*2*t/5);
f3=0.2018.*cos(2*pi*3*t/5)+0.*sin(2*pi*3*t/5);
f4=0.0935.*cos(2*pi*4*t/5)+0.*sin(2*pi*4*t/5);
f5=-0.0624.*cos(2*pi*6*t/5)+0.*sin(2*pi*6*t/5);
f6=f1+f2;
f7=f6+f3;
f8=f7+f4+f5;
subplot(2,2,1)
plot(t,f1),holdon
y=time_fun_e(t)
plot(t,y,'r:
')
title('周期矩形波的形成—基波')
axis([-4,4.5,-0.5,1.3])
subplot(2,2,2)
plot(t,f6),holdon
y=time_fun_e(t)
plot(t,y,'r:
')
title('周期矩形波的形成—基波+2次谐波')
axis([-4,4.5,-0.5,1.3])
subplot(2,2,3)
plot(t,f7),holdon
y=time_fun_e(t)
plot(t,y,'r:
')
title('基波+2次谐波+3次谐波')
axis([-4,4.5,-0.5,1.3])
subplot(2,2,4)
plot(t,f8),holdon
y=time_fun_e(t)
plot(t,y,'r:
')
title('基波+2次谐波+3次谐波+4次谐波+6次谐波')
axis([-4,4.5,-0.5,1.3])
end
functionx=time_fun_x(t)
h=1;
x1=sym('Heaviside(t+0.5)')*h;
x=x1-sym('Heaviside(t-0.5)')*h;
functiony=time_fun_e(t)
a=0.5;T=5;h=1;tao=0.2*T;t=-8*a:
0.01:
T-a;
e1=1/2+1/2.*sign(t+tao/2);
e2=1/2+1/2.*sign(t-tao/2);
y=h.*(e1-e2);
2.修改例5-1,将周期信号分解为前10次谐波的叠加,观察运行结果,能得出什么结论?
解:
function[A_sym,B_sym]=CTFShchsym1
symstnkx
T=5;tao=0.2*T;a=0.5;
ifnargin<4;Nf=9;end
ifnargin<5;Nn=32;end
x=time_fun_x(t);
A0=2*int(x,t,-a,T-a)/T;
As=int(2*x*cos(2*pi*n*t/T)/T,t,-a,T-a);
Bs=int(2*x*sin(2*pi*n*t/T)/T,t,-a,T-a);
A_sym
(1)=double(vpa(A0,Nn));
fork=1:
Nf
A_sym(k+1)=double(vpa(subs(As,n,k),Nn));
B_sym(k+1)=double(vpa(subs(Bs,n,k),Nn));end
ifnargout==0
c=A_sym;disp(c)
d=B_sym;disp(d)
t=-8*a:
0.01:
T-a;
f1=0.4/2+0.3742.*cos(2*pi*1*t/5)+0.*sin(2*pi*1*t/5);
f2=0.3027.*cos(2*pi*2*t/5)+0.*sin(2*pi*2*t/5);
f3=0.2018.*cos(2*pi*3*t/5)+0.*sin(2*pi*3*t/5);
f4=0.0935.*cos(2*pi*4*t/5)+0.*sin(2*pi*4*t/5);
f5=-0.0624.*cos(2*pi*6*t/5)+0.*sin(2*pi*6*t/5);
f6=-0.0865.*cos(2*pi*7*t/5)+0.*sin(2*pi*7*t/5);
f7=-0.0757.*cos(2*pi*8*t/5)+0.*sin(2*pi*8*t/5);
f8=-0.0416*cos(2*pi*9*t/5)+0.*sin(2*pi*9*t/5);
f9=f1+f2;
f10=f9+f3;
f11=f10+f4+f5;
f12=f11+f6;
f13=f12+f7+f8;
subplot(2,3,1)
plot(t,f1),holdon
y=time_fun_e(t)
plot(t,y,'r:
')
title('周期矩形波的形成—基波')
axis([-4,4.5,-0.5,1.3])
subplot(2,3,2)
plot(t,f9),holdon
y=time_fun_e(t)
plot(t,y,'r:
')
title('周期矩形波的形成—基波+2次谐波')
axis([-4,4.5,-0.5,1.3])
subplot(2,3,3)
plot(t,f10),holdon
y=time_fun_e(t)
plot(t,y,'r:
')
title('基波+2次谐波+3次谐波')
axis([-4,4.5,-0.5,1.3])
subplot(2,3,4)
plot(t,f11),holdon
y=time_fun_e(t)
plot(t,y,'r:
')
title('基波+2次谐波+3次谐波+4次谐波+6次谐波')
axis([-4,4.5,-0.5,1.3])
subplot(2,3,5)
plot(t,f12),holdon
y=time_fun_e(t)
plot(t,y,'r:
')
title('基波+2次谐波+3次谐波+4次谐波+6次谐波+7次谐波')
axis([-4,4.5,-0.5,1.3])
subplot(2,3,6)
plot(t,f13),holdon
y=time_fun_e(t)
plot(t,y,'r:
')
title('基波+2次谐波+3次谐波+4次谐波+6次谐波+7次谐波+8次谐波+9次谐波')
axis([-4,4.5,-0.5,1.3])
end
functionx=time_fun_x(t)
h=1;
x1=sym('Heaviside(t+0.5)')*h;
x=x1-sym('Heaviside(t-0.5)')*h;
functiony=time_fun_e(t)
a=0.5;T=5;h=1;tao=0.2*T;t=-8*a:
0.01:
T-a;
e1=1/2+1/2.*sign(t+tao/2);
e2=1/2+1/2.*sign(t-tao/2);
y=h.*(e1-e2);
3、观察例5-1运行结果中脉冲宽度与频谱的关系
解:
由图可见,由于周期相同,因而相邻谱线的间隔相同,脉冲跨度越窄,其频谱包络线第一个零点的频率越高,即信号带宽越宽,频带内所含的分量越多。
信号的频带宽度与脉冲宽度成反比。
4、观察例5-1运行结果中周期与频谱的关系
解:
频谱包络线的零点所在位置不变,而当周期增长时,相邻谱线的间隔减小,频谱变密。
如果周期无线增长,相邻谱线的间隔将趋于零,周期信号的离散频谱就过渡为非周期信号的连续频谱。
信号上机实验六
一、实验目的
1、利用MATLAB实现连续信号的傅里叶变换。
2、验证傅氏变换性质——时移性质
二、实验原理
一.傅里叶变换
信号
的傅里叶变换的定义为:
值得注意的是,信号
的傅里叶变换存在的充分条件是:
在无限区间内绝对可积,引入广义函数的概念后,一些不满足绝对可积的信号也能进行傅里叶变换。
其逆变换定义是:
MATLAB的SymbolicMathtoolbox提供了能直接求解傅里叶变换及逆变换的函数fourier()及ifourier()。
两者的调用格式如下。
1、Fourier变换
(1)F=fourier(f)是符号函数f的Fourier变换,默认返回是关于ω的函数。
(2)F=fourier(f,v)返回函数F是关于符号对象v的函数,而不是默认的ω。
(3)F=fourier(f,u,v)对关于u的函数f进行变换,返回函数F是关于v的函数。
即:
2、Fourier逆变换
(1)f=ifourier(F)
(2)f=ifourier(F,u)
(3)f=ifourier(F,u,v)
在调用函数fourier()及ifourier()之前,要用syms命令对所用到的变量(如t、u、v、w)等进行说明,即要将这些变量说明成符号变量。
对fourier()中的函数f及ifourier()的函数F,也要用符号定义符sym将f或F说明为符号表达式;若f或F是MATLAB中的通用函数表达式,则不必用sym加以说明。
★注意:
(1)调用Heaviside()时,最好检查一下你的工作目录下有无Heaviside.m文件,内容为:
functionf=Heaviside(t)
f=(t>0);
(2)要利用sym来创建符号表达式
。
采用fourier()及ifourier()得到的返回函数,仍然是符号表达式。
若需对返回函数作图,则应用ezplot()绘图命令而不能用polt()命令。
如果返回函数中含有诸如狄拉克函数等的项,则用ezplot()也无法作图。
此外,用fourier()对某些信号求变换时,其返回函数可能会包含一些不能直接表达的式子,甚至可能会出现一些屏幕提示为:
“未被定义的函数或变量”的项,此时更不用说对此返回函数作图了。
这是fourier()的一个局限。
另一局限是在很多应用场合,原信号尽管是连续的,但却不能表示成符号表达式,而更多的实际测量现场获得的信号是多给离散的数值量,此时也不能应用fourier()对离散信号进行处理,而只能采用数值计算的方法求得(参阅参考文献[2])。
二.傅里叶变换性质——时移性质
若
,则傅里叶变换的时移特性为:
(
三、实验内容
1、将实验原理中的例子在计算机上全部练习一遍;
例6-1.求
的傅里叶变换。
解:
例6-2.求
的傅里叶逆变换
。
例6-3.设
,试画出其幅度频谱。
解:
例4:
已知信号
,试用MATLAB画出该信号及其频谱(幅度谱及相位谱)
解:
clear
>>r=0.02;
t=-5:
r:
5;
N=200;
W=2*pi*1;
k=-N:
N;
w=k*W/N;
f1=1/2*exp(-2*t).*Heaviside(t);
F=r*f1*exp(-j*t'*w);
F1=abs(F);
PI=angle(F);
subplot(3,1,1);
plot(t,f1);
grid;
xlabel('t');
ylabel('f(t)');
title('f(t)');
subplot(3,1,2);
plot(w,F1);
xlabel('w');
grid;
ylabel('F(jw)');
subplot(3,1,3);
plot(w,PI*180/pi);
grid;
xlabel('w');
ylabel('P(度)');
2、已知信号f(t)=e-2(t+0.3)ε(t+0.3),试画出该信号波形及其频谱;
解:
r=0.02;
t=-5:
r:
5;
N=200;
W=2*pi*1;
k=-N:
N;
w=k*W/N;
f1=1/2*exp(-2*(t+0.3)).*Heaviside(t+0.3);
F=r*f1*exp(-j*t'*w);
F1=abs(F);
PI=angle(F);
subplot(3,1,1);
plot(t,f1);
grid;
xlabel('t');
ylabel('f(t)');
title('f(t)');
subplot(3,1,2);
plot(w,F1);
xlabel('w');
grid;
ylabel('F(jw)');
subplot(3,1,3);
plot(w,PI*180/pi);
grid;
xlabel('w');
ylabel('P(度)');
3、已知信号f(t)=e-2(t-0.3)ε(t-0.3),试画出该信号波形及其频谱。
解:
r=0.02;
t=-5:
r:
5;
N=200;
W=2*pi*1;
k=-N:
N;
w=k*W/N;
f1=1/2*exp(-2*(t-0.3)).*Heaviside(t-0.3);
F=r*f1*exp(-j*t'*w);
F1=abs(F);
PI=angle(F);
subplot(3,1,1);
plot(t,f1);
grid;
xlabel('t');
ylabel('f(t)');
title('f(t)');
subplot(3,1,2);
plot(w,F1);
xlabel('w');
grid;
ylabel('F(jw)');
subplot(3,1,3);
plot(w,PI*180/pi);
grid;
xlabel('w');
ylabel('P(度)');
四、实验思考题
观察练习2、3的结果与例4的结果做比较,可得出什么结论?
解:
时幅度谱保持不变,相位谱随f(t)的变化而变化。
信号上机实验七
一、实验目的
1.了解信号幅度调制的原理;
2.能够用MATLAB实现信号的幅度调制。
二、实验原理
设信号
的频谱为
,现将
乘以载波信号
,得到高频的已调信号
,即
成为调制信号。
实现信号调制的原理图如图7.1所示。
图7.1幅度调制原理图
从频域上看,已调信号
的频谱为原调制信号
的频谱搬移到
处,幅度降为原
的1/2,即:
★注意:
这里采用的调制方法为抑制载波方式,即
的频谱中不含有
的频率分量。
MATLAB提供了专门的函数modulate()用于是吸纳信号的调制。
调用格式为:
y=modulate(x,Fc,Fs,’method’)
[y,t]=modulate(x,Fc,Fs)
其中,x为被调信号,Fc为载波频率,Fs为信号x的采样频率,method为所采用的调制方式,若采用幅度调制、双边带调制、抑制载波调制,则’method’为’am’或’amdsd-sc’。
其执行算法为:
y=x*cos(2*pi*Fc*t)
其中y为已调制信号,t为函数计算时间间隔向量
三、实验内容
1、将实验原理中的例子在计算机上练习一遍
例7-1:
设信号
,载波为频率为400Hz的余弦信号。
试用MATLAB实现调幅制信号
,并观察
的频谱和
的频谱,以及两者在频域上的关系。
解:
Fs=1000;
Fc=400;
N=1000;
n=0:
N-2;
t=n/Fs;
x=sin(2*pi*50*t);
subplot(221)
plot(t,x);
xlabel('t(s)');
ylabel('x');
title('被调信号');
axis([00.1-11])
Nfft=1024;
window=hamming(512);
noverlap=256;
dflag='none';
[Pxx,f]=psd(x,Nfft,Fs,window,noverlap,dflag);
subplot(222)
plot(f,Pxx)
xlabel('频率(Hz)');
ylabel('功率谱(X)');
title('被调信号的功率谱')
grid
y=modulate(x,Fc,Fs,'am');
subplot(223)
plot(t,y)
xlabel('t(s)');
ylabel('y');
axis([00.1-11])
title('已调信号')
[Pxx,f]=psd(y,1024,Fs,window,noverlap,dflag);
subplot(224)
plot(f,Pxx)
xlabel('频率(Hz)');
ylabel('功率谱(Y)');
title('已调信号的功率谱');
grid
例7-2:
设
,试用MATLAB画出
、
的时域波形及其频谱,并观察傅立叶变换的频移特性。
解:
R=0.005;t=-1.2:
R:
1.2;
f=Heaviside(t+1)-Heaviside(t-1);
f1=f.*cos(10*pi*t);
subplot(221)
plot(t,f)
xlabel('t');
ylabel('f(t)');
subplot(222);
plot(t,f1);
xlabel('t');
ylabel('f1(t)=f(t)*cos(10*pi*t)');
W1=40;
N=1000;
k=-N:
N;
W=k*W1/N;
F=f*exp(-j*t'*W)*R;
F=real(F);
F1=f1*exp(-j*t'*W)*R;
F1=real(F1);
subplot(223);
plot(W,F);
xlabel('w');
ylabel('F(jw)');
subplot(224);
plot(W,F1);
xlabel('w');
ylabel('F1(jw)');
2.已知信号
载波为频率为400Hz的余弦信号。
试用MATLAB实现调幅制信号
,并观察
的频谱和
的频谱,以及两者在频域上的关系。
解:
Fs=1000;
Fc=400;
N=1000;
n=0:
N-2;
t=n/Fs;
x=sin(2*pi*t)/(2*pi*t);
subplot(2,2,1)
plot(t,x);
xlabel('t(s)');
ylabel('x');
title('被调信号');
axis([00.1-11])
Nfft=1024;
window=hamming(512);
noverlap=256;
dflag='none';
[Pxx,f]=psd(x,Nfft,Fs,window,noverlap,dflag);
subplot(222)
plot(f,Pxx)