中南大学信号与系统matlab实验报告
中南大学信号与系统
m a t l a b实验报告
Pleasure Group Office【T985AB-B866SYT-B182C-BS682T-STT18】
实验一 基本信号的生成
1.实验目的
● 学会使用MATLAB 产生各种常见的连续时间信号与离散时间信号;
● 通过MATLAB 中的绘图工具对产生的信号进行观察,加深对常用信号的
理解;
● 熟悉MATLAB 的基本操作,以及一些基本函数的使用,为以后的实验奠
定基础。
2.实验内容
⑴ 运行以上九个例子程序,掌握一些常用基本信号的特点及其MATLAB 实现方法;改变有关参数,进一步观察信号波形的变化。
⑵ 在 k [10:10]=- 范围内产生并画出以下信号:
a) 1f [k][k]δ=;
b) 2f [k][k+2]δ=;
c) 3f [k][k-4]δ=;
d) 4f [k]2[k+2][k-4]δδ=-。
源程序:
k=-10:10;
f1k=[zeros(1,10),1,zeros(1,10)];
subplot(2,2,1)
stem(k,f1k)
title('f1[k]')
f2k=[zeros(1,8),1,zeros(1,12)];
subplot(2,2,2)
stem(k,f2k)
title('f2[k]')
f3k=[zeros(1,14),1,zeros(1,6)];
subplot(2,2,3)
stem(k,f3k)
title('f3[k]')
f4k=2*f2k-f3k;
subplot(2,2,4)
stem(k,f4k)
title('f4[k]')
⑶ 在 k [0:31]=范围内产生并画出以下信号:
a) ()()k k 144f [k]sin cos π
π=;
b) ()2k 24f [k]cos π
=;
c) ()()k k 348f [k]sin cos π
π=。
请问这三个信号的基波周期分别是多少
源程序:
k=0:31;
f1k=sin(pi/4*k).*cos(pi/4*k);
subplot(3,1,1)
stem(k,f1k)
title('f1[k]')
f2k=(cos(pi/4*k)).^2;
subplot(3,1,2)
stem(k,f2k)
title('f2[k]')
f3k=sin(pi/4*k).*cos(pi/8*k);
subplot(3,1,3)
stem(k,f3k)
title('f3[k]')
其中f1[k]的基波周期是4, f2[k]的基波周期是4, f3[k]的基波周期是16。
实验二 信号的基本运算
1.实验目的
● 学会使用MATLAB 完成信号的一些基本运算;
● 了解复杂信号由基本信号通过尺度变换、翻转、平移、相加、相乘、
差分、求和、微分及积分等运算来表达的方法;
进一步熟悉MATLAB的基本操作与编程,掌握其在信号分析中的运用特点与使用方式。
2.实验内容
⑴运行以上三个例题程序,掌握信号基本运算的MATLAB实现方法;改变有关参数,考察相应信号运算结果的变化特点与规律。
⑵已知信号()
f t如下图所示:
a)用MATLAB编程复现上图;
%作业题2 a:
t=-6::6;
ft1=tripuls(t,6,;
subplot(2,1,1)
plot(t,ft1)
title('f(t)')
b)画出(22)
的波形;
f t
%b
t=-6::6;
ft1=tripuls(2*(1-t),6,;
%subplot(1,1,1)
plot(t,ft1)
title('f(2*(1-t)')
c)画出df(t)
的波形;
dt
%c
h=;t=-6:h:6;
yt=tripuls(t,6,;
y1=diff(yt)*1/h;
plot(t(1:length(t)-1),y1)
title('df(t)/dt')
d) 画出t
f ()d ττ-∞?的波形。 %d
t=-6::6;
for x=1:length(t)
y2(x)=quad('tripuls(t,6,',-3,t(x));
end
plot(t,y2)
title('integral of f(t)')
实验三 系统的时域分析
1.实验目的
● 学习并掌握连续时间系统的零状态响应、冲激响应和阶跃响应的
MATLAB 求解方法;
● 学习并掌握离散时间系统的零状态响应、冲激响应和阶跃响应的
MATLAB 求解方法;
● 进一步深刻理解连续时间系统和离散时间系统的系统函数零极点对系
统特性的影响;
学习并掌握卷积的MATLAB 计算方法。
2.实验内容
⑴ 运行以上五个例题程序,掌握求解系统响应的MATLAB 分析方法;改变模型参数,考察系统响应的变化特点与规律。
⑵ 设离散系统可由下列差分方程表示:
计算[20:100]k =-时的系统冲激响应。
源程序:
k=-20:100;
a=[1 -1 ];
b=[1];
h=impz(b,a,k);
stem(k,h);
xlabel('Time(sec)')
ylabel('y(t)')
⑶ 设[](0.9)()k h k u k =,输入[][][10]f k u k u k =--,求系统输出
[][][]y k f k h k =*。
(取[10:50]k =-)
源程序:
k=-10:50;
uk=[zeros(1,10),ones(1,51)];
u1k=[zeros(1,20),ones(1,41)];
hk=.^k.*uk;
fk=uk-u1k;
yk=conv(hk,fk);
stem(0:length(yk)-1,yk);
⑷ 已知滤波器的传递函数:
输入信号为()2sin(0.05)(),()f t t t t πωω=+为随机信号。试绘出滤波器的输出信号波形。(取[0:100]t =)
源程序:
R=101;
d=rand(1,R);
t=0:100;
s=2*sin*pi*t);
f=s+d;
subplot(2,1,1);
plot(t,d,'g-.',t,s,'b--',t,f,'r-');
xlabel('Time index t');
legend('d[t]','s[t]','f[t]');
title('处理前的波形')
b=[ 0];a=[1 ];
y=filter(b,a,f);
subplot(2,1,2);
plot(t,s,'b--',t,y,'r-');
xlabel('Time index t');
legend('s[t]','y[t]');
title('滤波器输出波形')
实验四 周期信号的频域分析
1.实验目的
● 掌握周期信号傅立叶级数分解与合成的计算公式
● 掌握利用MATLAB 实现周期信号傅立叶级数分解与综合方法
● 理解并掌握周期信号频谱特点
2.实验内容
1、仿照例程,实现下述周期信号的傅立叶级数分解与合成:
(a ((a )设周期信号)(t f 的周期为1T ,角频率1
112T f πω=
=,且满足狄里赫利条件,则该周期信号可以展开成傅立叶级数。
(1)三角形式傅立叶级数
(2)指数形式傅立叶级数 (b )求解0a ,n a ,n b 及合成信号波形所用程序:
function [A_sym,B_sym]=CTFShchsym
% 采用符号计算求一个周期内连续时间函数f 的三角级数展开系数,再用这些 % 展开系数合成连续时间函数f.傅立叶级数
% 函数的输入输出都是数值量
% Nf=6 谐波的阶数
% Nn 输出数据的准确位数
% A_sym 第1元素是直流项,其后元素依次是1,2,3...次谐波cos项展开系数
% B_sym 第2,3,4,...元素依次是1,2,3...次谐波sin项展开系数
% tao=1 tao/T=
syms t n k x
T=4;
tao=T/4;
a=;
if nargin<4
Nf=10;
end
if nargin<5
Nn=32;
end
x=time_fun_x(t);
A0=int(x,t,a,T+a)/T; %求出三角函数展开系数A0
As=2/T*int(x*cos(2*pi*n*t/T),t,a,T+a); %求出三角函数展开系数As
Bs=2/T*int(x*sin(2*pi*n*t/T),t,a,T+a); %求出三角函数展开系数Bs
A_sym(1)=double(vpa(A0,Nn)); %获取串数组A0所对应的ASC2码数值数组
for k=1:Nf
A_sym(k+1)=double(vpa(subs(As,n,k),Nn)); %获取串数组A所对应的ASC2码数值数组 B_sym(k+1)=double(vpa(subs(Bs,n,k),Nn)); %获取串数组B所对应的ASC2码数值数组
end ;
if nargout==0
c=A_sym;
disp(c); %输出c为三角级数展开系数:第1元素是直流项,其后元素依次是1,2,3...次谐波cos项展开系数
d=B_sym;
disp(d); %输出d为三角级数展开系数: 第2,3,4,...元素依次是1,2,3...次谐波sin 项展开系数
t=-3*T::3*T;
f0=c(1); %直流
f1=c(2).*cos(2*pi*1*t/T)+d(2).*sin(2*pi*1*t/T); % 基波
f2=c(3).*cos(2*pi*2*t/T)+d(3).*sin(2*pi*2*t/T); % 2次谐波
f3=c(4).*cos(2*pi*3*t/T)+d(4).*sin(2*pi*3*t/T); % 3次谐波
f4=c(5).*cos(2*pi*4*t/T)+d(5).*sin(2*pi*4*t/T); % 4次谐波
f5=c(6).*cos(2*pi*5*t/T)+d(6).*sin(2*pi*5*t/T); % 5次谐波
f6=c(7).*cos(2*pi*6*t/T)+d(7).*sin(2*pi*6*t/T); % 6次谐波
f7=c(8).*cos(2*pi*7*t/T)+d(8).*sin(2*pi*7*t/T); % 7次谐波
f8=c(9).*cos(2*pi*8*t/T)+d(9).*sin(2*pi*8*t/T); % 8次谐波
f9=c(10).*cos(2*pi*9*t/T)+d(10).*sin(2*pi*9*t/T); % 9次谐波
f10=c(11).*cos(2*pi*10*t/T)+d(11).*sin(2*pi*10*t/T); % 10次谐波
f11=f0+f1+f2; % 直流+基波+2次谐波
f12=f11+f3; % 直流+基波+2次谐波+3次谐波
f13=f12+f4+f5+f6; % 直流+基波+2次谐波+3次谐波+4次谐波+5次谐波+6次谐波
f14=f13+f7+f8+f9+f10; %0~10次
subplot(2,2,1)
plot(t,f0+f1),hold on
y=time_fun_e(t); %调用连续时间函数-周期矩形脉冲 plot(t,y,'r:')
title('直流+基波')
axis([-8,8,,])
subplot(2,2,2)
plot(t,f12),hold on
y=time_fun_e(t);
plot(t,y,'r:')
title('1-3次谐波+直流')
axis([-8,8,,])
subplot(2,2,3)
plot(t,f13),hold on
y=time_fun_e(t);
plot(t,y,'r:')
title('1-6次谐波+直流')
axis([-8,8,,])
subplot(2,2,4)
plot(t,f14),hold on
y=time_fun_e(t);
plot(t,y,'r:')
title('1-10次谐波+直流')
axis([-8,8,,])
hold off
end
function y=time_fun_e(t)
% 该函数是的子函它由符号函数和表达式写成
a=;
T=4;
h=1;
tao=T/4;
t=-3*T::3*T;
e1=1/2+1/2.*sign+tao/2);
e2=1/2+1/2.*sign2);
y=h.*(e1-e2); %连续时间函数-周期矩形脉冲
function x=time_fun_x(t)
% 该函数是的子函数。它由符号变量和表达式写成。
h=1;
x1=sym('Heaviside(t)')*h;
x=x1-sym('Heaviside(t-1)')*h;
源程序修改:
function [A_sym,B_sym]=CTFShchsym
% 采用符号计算求一个周期内连续时间函数f的三角级数展开系数,再用这些
% 展开系数合成连续时间函数f.傅立叶级数
% 函数的输入输出都是数值量
% Nf=6 谐波的阶数
% Nn 输出数据的准确位数
% A_sym 第1元素是直流项,其后元素依次是1,2,3...次谐波cos项展开系数
% B_sym 第2,3,4,...元素依次是1,2,3...次谐波sin项展开系数
% tao=1 tao/T=
syms t n k x
T=5;
tao=*T;
a=;
if nargin<4
Nf=6;
end
if nargin<5
Nn=32;
end
x=time_fun_x(t);
A0=int(x,t,-a,T-a)/T; %求出三角函数展开系数A0
As=2/T*int(x*cos(2*pi*n*t/T),t,-a,T-a); %求出三角函数展开系数As
Bs=2/T*int(x*sin(2*pi*n*t/T),t,-a,T-a); %求出三角函数展开系数Bs
A_sym(1)=double(vpa(A0,Nn)); %获取串数组A0所对应的ASC2码数值数组
for k=1:Nf
A_sym(k+1)=double(vpa(subs(As,n,k),Nn)); %获取串数组A所对应的ASC2码数值数组
B_sym(k+1)=double(vpa(subs(Bs,n,k),Nn)); %获取串数组B所对应的ASC2码数值数组
end
if nargout==0
c=A_sym;
disp(c) %输出c为三角级数展开系数:第1元素是直流项,其后元素依次是1,2,3...次谐波cos项展开系数
d=B_sym;
disp(d) %输出d为三角级数展开系数: 第2,3,4,...元素依次是1,2,3...次谐波sin 项展开系数
t=-8*a::T-a;
f0=c(1); %直流
f1=c(2).*cos(2*pi*1*t/5)+d(2).*sin(2*pi*1*t/5); % 基波
f2=c(3).*cos(2*pi*2*t/5)+d(3).*sin(2*pi*2*t/5); % 2次谐波
f3=c(4).*cos(2*pi*3*t/5)+d(4).*sin(2*pi*3*t/5); % 3次谐波
f4=c(5).*cos(2*pi*4*t/5)+d(5).*sin(2*pi*4*t/5); % 4次谐波
f5=c(6).*cos(2*pi*5*t/5)+d(6).*sin(2*pi*5*t/5); % 5次谐波
f6=c(7).*cos(2*pi*6*t/5)+d(7).*sin(2*pi*6*t/5); % 6次谐波
f7=f0+f1+f2; % 直流+基波+2次谐波
f8=f7+f3; % 直流+基波+2次谐波+3次谐波
f9=f8+f4+f6; % 直流+基波+2次谐波+3次谐波+4次谐波+6次谐波
subplot(2,2,1)
plot(t,f0+f1),hold on
y=time_fun_e(t); %调用连续时间函数-周期矩形脉冲 plot(t,y,'r:')
title('周期矩形波的形成—直流+基波')
axis([-4,,,])
subplot(2,2,2)
plot(t,f7),hold on
y=time_fun_e(t);
plot(t,y,'r:')
title('周期矩形波的形成—直流+基波+2次谐波')
axis([-4,,,])
subplot(2,2,3)
plot(t,f8),hold on
y=time_fun_e(t);
plot(t,y,'r:')
title('直流+基波+2次谐波+3次谐波')
axis([-4,,,])
subplot(2,2,4)
plot(t,f9),hold on
y=time_fun_e(t);
plot(t,y,'r:')
title('基波+2次谐波+3次谐波+4次谐波+6次谐波')
axis([-4,,,])
end
function y=time_fun_e(t)
% 该函数是的子函它由符号函数和表达式写成
a=;
T=5;
h=1;
tao=*T;
t=-8*a::T-a;
e1=1/2+1/2.*sign(t+tao/2);
e2=1/2+1/2.*sign(t-tao/2);
y=h.*(e1-e2); %连续时间函数-周期矩形脉冲
function x=time_fun_x(t)
% 该函数是的子函数。它由符号变量和表达式写成。
h=1;
x1=sym('Heaviside(t+')*h;
x=x1-sym('Heaviside')*h;
2、已知周期为T=4的三角波,在第一周期(-2 function [A_sym,B_sym]=CTFSshbpsym(T,Nf) % 采用符号计算求[0,T]内时间函数的三角级数展开系数。 % 函数的输入输出都是数值量 % Nn 输出数据的准确位数 % A_sym 第1元素是直流项,其后元素依次是1,2,3...次谐波cos 项展开系数 % B_sym 第2,3,4,...元素依次是1,2,3...次谐波sin 项展开系数 % T T=m*tao , 信号周期 % N f 谐波的阶数 % m (m=T/tao)周期与脉冲宽度之比,如m=4,8,16,100等 % tao 脉宽:tao=T/m syms t n y if nargin<3 Nf=input('please Input 所需展开的最高谐波次数:Nf='); end T=input('please Input 信号的周期T='); if nargin<5 Nn=32; end y=time_fun_s(t); A0=2/T*int(y,t,0,T/2); As=2/T*int(y*cos(2*pi*n*t/T),t,0,T/2); Bs=2/T*int(y*sin(2*pi*n*t/T),t,0,T/2); A_sym(1)=double(vpa(A0,Nn)); for k=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 if nargout==0 An=fliplr(A_sym); %对A_sym 阵左右对称交换 An(1,k+1)=A_sym(1); %A_sym 的1*k 阵扩展为1*(k+1)阵 An=fliplr(An); %对扩展后的S1阵左右对称交换回原位置 Bn=fliplr(B_sym); %对B_sym 阵左右对称交换 Bn(1,k+1)=0; %B_sym 的1*k 阵扩展为1*(k+1)阵 Bn=fliplr(Bn); %对扩展后的S3阵左右对称交换回原位置 FnR=An/2-i*Bn/2; % 用三角函数展开系数A 、B 值合成付里叶指数系数 FnL=fliplr(FnR); N=Nf*2*pi/T; k2=-N:2*pi/T:N; Fn=[FnL,FnR(2:end)]; %subplot(3,3,3) %x=time_fun_e(t); % 调用连续时间函数-周期矩形脉冲 subplot(2,1,1) stem(k2,abs(Fn)); %画出周期矩形脉冲的频谱(T=M*tao) title('连续时间函数周期三角波脉冲的双边幅度谱') axis([-80,80,0,]) line([-80,80],[0,0],'color','r') line([0,0],[0,],'color','r') end function x=time_fun_e(t) % 该函数是的子函数。它由符号变量和表达式写成。 % t 是时间数组 % T 是周期 duty=tao/T= T=5; t=-2*T::2*T; tao=T/5; x=rectpuls(t,tao); %产生一个宽度tao=1的矩形脉冲 subplot(2,2,2) plot(t,x) hold on x=rectpuls(t-5,tao); %产生一个宽度tao=1的矩形脉,中心位置在t=5处 plot(t,x) hold on x=rectpuls(t+5,tao); %产生一个宽度tao=1的矩形脉,中心位置在t=-5处 plot(t,x) title('周期为T=5,脉宽tao=1的矩形脉冲') axis([-10,10,0,]) function y=time_fun_s(t) syms t y=1-abs(t); x1=sym('Heaviside(t+2)'); x=x1-sym('Heaviside(t-2)'); y=y*x; ezplot(t,y,[-10,10]) grid 源程序修改: function [A_sym,B_sym]=CTFSshbpsym(T,Nf) % 采用符号计算求[0,T]内时间函数的三角级数展开系数。 % 函数的输入输出都是数值量 % Nn 输出数据的准确位数 % A_sym 第1元素是直流项,其后元素依次是1,2,3...次谐波cos项展开系数 % B_sym 第2,3,4,...元素依次是1,2,3...次谐波sin项展开系数 % T T=m*tao,信号周期 % Nf 谐波的阶数 % m (m=T/tao)周期与脉冲宽度之比,如m=4,8,16,100等 % tao 脉宽:tao=T/m syms t n y if nargin<3 Nf=input('please Input 所需展开的最高谐波次数:Nf='); end T=input('please Input 信号的周期T='); if nargin<5 Nn=32; end y=time_fun_s(t); A0=2/T*int(y,t,0,T); As=2/T*int(y*cos(2*pi*n*t/T),t,0,T); Bs=2/T*int(y*sin(2*pi*n*t/T),t,0,T); A_sym(1)=double(vpa(A0,Nn)); for k=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 if nargout==0 An=fliplr(A_sym); %对A_sym阵左右对称交换 An(1,k+1)=A_sym(1); %A_sym的1*k阵扩展为1*(k+1)阵 An=fliplr(An); %对扩展后的S1阵左右对称交换回原位置 Bn=fliplr(B_sym); %对B_sym阵左右对称交换 Bn(1,k+1)=0; %B_sym的1*k阵扩展为1*(k+1)阵 Bn=fliplr(Bn); %对扩展后的S3阵左右对称交换回原位置 FnR=An/2-i*Bn/2; % 用三角函数展开系数A、B值合成付里叶指数系数 FnL=fliplr(FnR); N=Nf*2*pi/T; k2=-N:2*pi/T:N; Fn=[FnL,FnR(2:end)]; subplot(3,3,3) x=time_fun_e(t); % 调用连续时间函数-周期矩形脉冲 subplot(2,1,1) stem(k2,abs(Fn)); %画出周期矩形脉冲的频谱(T=M*tao) title('连续时间函数周期矩形脉冲的双边幅度谱') axis([-80,80,0,]) line([-80,80],[0,0]) line([0,0],[0,]) end function x=time_fun_e(t) % 该函数是的子函数。它由符号变量和表达式写成。 % t 是时间数组 % T 是周期 duty=tao/T= T=5; t=-2*T::2*T; tao=T/5; x=rectpuls(t,tao); %产生一个宽度tao=1的矩形脉冲 subplot(2,2,2) plot(t,x) hold on x=rectpuls(t-5,tao); %产生一个宽度tao=1的矩形脉,中心位置在t=5处 plot(t,x) hold on x=rectpuls(t+5,tao); %产生一个宽度tao=1的矩形脉,中心位置在t=-5处 plot(t,x) title('周期为T=5,脉宽tao=1的矩形脉冲') axis([-10,10,0,]) function y=time_fun_s(t) % 该函数是的子函数。它由符号变量和表达式写成。 syms a a1 T=input('please Input 信号的周期T='); M=input('周期与脉冲宽度之比M='); A=1; tao=T/M; a=tao/2; y1=sym('Heaviside(t+a1)')*A; y=y1-sym('Heaviside(t-a1)')*A; y=subs(y,a1,a); y=simple(y); 实验五非周期信号的频域分析 1.实验目的 ●理解非周期信号的频域分析方法; ●掌握典型信号的幅度谱和相位谱; ●理解信号的调制特性; ●掌握傅里叶变换的性质:尺度变换、时移、频移、卷积定理、对称性、微 分特性。 2.实验内容 1.试计算宽度为2、幅度为1的三角波信号在0~f m Hz范围内信号的能量。取 f m=~10Hz。 syms t; f=linspace,10,256); N=length(f); w=zeros(1,N); for k=1:N w(k)=quadl(@(t)2*sinc(t).*sinc(t).*sinc(t).*sinc(t),0,f(k)); end y=0; for k=1:N y=y+w(k); end y plot(f,w); xlabel('Hz'); ylabel('E'); y = 2.试计算宽度和幅度均为1的方波信号在0~f m Hz频谱范围内所包含的信号能量。 syms t; f=linspace(0,5,256); N=length(f); w=zeros(1,N); for k=1:N w(k)=quadl(@(t)2*sinc(t).*sinc(t),0,f(k)); end plot(f,w); xlabel('Hz'); ylabel('E');