信号与系统实验第九章
董玲
2011级通信工程
20111060126
9.1 已知周期半波余弦信号和周期全波余弦信号的波形如图所示,用MATLAB编
程求出它们的傅里叶系数,绘出其直流、一次、二次、三次、四次、及五次谐波
叠加后的波形图,并将其与周期信号的时域波形进行比较,观察周期信号的分解
与合成过程。
解:
display('Please input the value of m (傅里叶级数展开的项数)');
m = input('m = ');
t = -3*pi:0.01:3*pi;
n = round(length(t)/4);
f=cos(t).*(heaviside(t+2.5*pi)-heaviside(t+1.5*pi)+heaviside(t+0.5*pi)-heaviside(t-0.
5*pi)+heaviside(t-1.5*pi)-heaviside(t-2.5*pi));
y = zeros(m+1,max(size(t)));
y(m+1,:) = f';
figure(1);
plot(t/pi,y(m+1,:));
grid;
axis([-3 3 -1 1.5]);
title('半波余弦信号');
xlabel('单位 pi','Fontsize', 8);
x = zeros(size(t));
kk = '2';
y(1,:)=1/pi;
plot(t/pi,y(m+1,:));
hold on;
plot(t/pi,y(1,:));
axis([-3 3 -1 1.5]);
title('直流分量和半波余弦信号');
xlabel('单位 pi','Fontsize', 8);
hold off;
pause
y(2,:)=1/pi+(1/2)*cos(t);
x=1/pi+(1/2)*cos(t);
plot(t/pi,y(m+1,:));
hold on;
plot(t/pi,y(2,:));
axis([-3 3 -1 1.5]);
title('第 1 次谐波叠加');
xlabel('单位 pi','Fontsize', 8);
hold off;
%一次谐波
for k=2:m
pause;
x = x+(-2*cos(pi*k/2)/pi/(k^2-1))*cos(k*t);
y((k+1),:) = x;
plot(t/pi,y(m+1,:));
hold on;
plot(t/pi,y((k+1),:));
hold off;
grid;
axis([-3 3 -1 1.5]);
title(strcat('第 1、',kk,'次谐波叠加'));
xlabel('单位 pi','Fontsize', 8);
kk = strcat(kk,'、',num2str(k+1));
end
pause;
plot(t/pi,y(1:m+1,:));
grid;
axis([-3 3 -1 1.5]);
title('谐波叠加');
xlabel('单位 pi','Fontsize', 8);
9.2 试用 MATLAB 编程绘出 9.1 中所示周期信号的幅度频谱,要求交互式信号
输入信号周期,观察分析信号周期与频谱的关系。当周期 T 趋于无穷大时,频
谱谱线将发生什么样的变化?
解:
% dm09201
% 绘制周期信号的频谱特性
% 以周期矩形脉冲信号为例,计算其频谱特性
% Nf:级数分解的谐波次数,由键盘输入
% Nn:输出数据的准确位数
% a0:直流项系数
% an:第 1,2,3,...次谐波余弦项展开系数
% bn:第 1,2,3,...次谐波正弦项展开系数
% tao:周期矩形脉冲信号脉宽,由键盘输入
% T:周期矩形脉冲信号周期,由键盘输入
display('Please input the value of T, tao and Nf'); %命令窗口提示用户输入参数
T = input('T = ');
tao = input('tao = ');
%定义符号变量
%输出数据的位数
%分配 an 系数数组
%分配 bn 系数数组
%求出直流项
%求出余弦项
%求出正弦项
%获取参数组 A0 所对
%获取参数组 As 所对应
%获取参数组 Bs 所对应
%构造 u(t+tao/2)
%构造 u(t-tao/2)
Nf = input('Nf = ');
syms t n k x
Nn = 32;
为 32 位
an = zeros(Nf+1,1);
bn = zeros(Nf+1,1);
s1 = strcat('Heaviside(t+',num2str(tao*pi/2),')');
s2 = strcat('Heaviside(t-',num2str(tao*pi/2),')');
x = sym(cos(t*tao).*( sym(s1) - sym(s2)));
A0 =int(x,t,-pi/(2*tao),pi/(2*tao))/T;
a0
As=2*int(x*cos(2*pi*n*t/T),t,-pi/(2*tao),pi/(2*tao))/T;
系数 an
Bs=2*int(x*sin(2*pi*n*t/T),t,-pi/(2*tao),pi/(2*tao))/T;
系数 bn
an(1) = double(vpa(A0,Nn));
应的 ASCII 码数值数组
for k=1:Nf
an(k+1)=double(vpa(subs(As,n,k),Nn));
的 ASCII 码数值数组
bn(k+1)=double(vpa(subs(Bs,n,k),Nn));
的 ASCII 码数值数组
end
cn = sqrt(an.*an+bn.*bn);
t = -T*5:0.001:T*5;
d = -T*5:T:T*5;
xx = (sqrt(cos(t*tao).* cos(t*tao))+ cos(t*tao))/2;
subplot(211);
子窗口,并指向第 1 个子窗口
plot(t,xx);
号
axis([-T*5 T*5 0 1.1]);
%title('周期矩形脉冲信号','Fontsize',8);
s1 = strcat('周期矩形脉冲信号 T=',num2str(T),' Tao=',num2str(tao),'t');
xlabel(s1,'Fontsize',8);
subplot(212);
k = 0:Nf;
stem(k,cn);
hold on;
plot(k,cn);
xlabel('幅度谱 \omega','Fontsize',8);
% End
改变 T 的比对结果:
%计算幅度谱
%x 轴标签
%将显示窗口分为 2 个
%绘制周期矩形脉冲信
%指定坐标系范围
%标注标题
%指向第 2 个子窗口
%绘制幅度谱
%绘制幅度谱包络线
1
0.8
0.6
0.4
0.2
0
0.4
0.3
0.2
0.1
0
0
改变 tao 的结果比对:
-40
-30
-20
0
-10
20
周期矩形脉冲信号 T=9.4248 Tao=1t
10
30
40
10
20
30
幅度谱
40
50
60