@[就酱的新征程]数字处理仿真与应用实验二:仿真观测对于不同数量的谐波,其线性叠加与周期方波信号的误差
这学期数字处理仿真与应用实验的记录
不多说,进入正题吧~
实验要求
仿真观测对于不同数量的谐波,其线性叠加与周期方波信号的误差。
实验结果
## 代码
%---------------------%
%------数字信号处理仿真第一次实验------%
%---------------------%
%程序功能:
%----------1.仿真观测对于不同数量的谐波,其线性叠加与周期方波信号的误差。
%编程人员:就酱
%编程更新时间:2020年5月20日
clc;
clear all;
close all;
syms x;
T=10;
t=0:0.001:16;
f=max(square(pi*0.5*t,50),0);%创建方波最大值是1,最小值是0
figure(1)
subplot(411);plot(t,f);grid on;hold on;title('标准方波');
xlabel('t(s)');ylabel('f(t)');axis([0 4*pi -0.5 1.5]);
A0=1/2;
F=0;
for i=1:10 %谐波的阶数
As=int(2*cos(2*pi*i*x/T)/T,x,0,T/2);%傅里叶系数an
Bs=int(2*sin(2*pi*i*x/T)/T,x,0,T/2);%傅里叶系数bn
F=F+As*cos(2*pi*i*t/T)+Bs*sin(2*pi*i*t/T);%求傅里叶级数展开
end
F=F+A0;
subplot(412);plot(t,F);grid on;hold on;title('n=10方波级数分解');
xlabel('t(s)');ylabel('f(t)');axis([0 4*pi -0.5 1.5]);
A0=1/2;
F_1=0;
for i=1:20 %谐波的阶数
As=int(2*cos(2*pi*i*x/T)/T,x,0,T/2);%傅里叶系数an
Bs=int(2*sin(2*pi*i*x/T)/T,x,0,T/2);%傅里叶系数bn
F_1=F_1+As*cos(2*pi*i*t/T)+Bs*sin(2*pi*i*t/T);%求傅里叶级数展开
end
F_1=F_1+A0;
subplot(413);plot(t,F_1);grid on;hold on;title('n=20方波级数分解');
xlabel('t(s)');ylabel('f(t)');axis([0 4*pi -0.5 1.5]);
A0=1/2;
F_1=0;
for i=1:50 %谐波的阶数
As=int(2*cos(2*pi*i*x/T)/T,x,0,T/2);%傅里叶系数an
Bs=int(2*sin(2*pi*i*x/T)/T,x,0,T/2);%傅里叶系数bn
F_1=F_1+As*cos(2*pi*i*t/T)+Bs*sin(2*pi*i*t/T);%求傅里叶级数展开
end
F_1=F_1+A0;
subplot(414);plot(t,F_1);grid on;hold on;title('n=50方波级数分解');
xlabel('t(s)');ylabel('f(t)');axis([0 4*pi -0.5 1.5]);
实验结果分析
任何信号都可以用正弦波叠加而成,方波也可以通过正弦波来逼近。谐波的阶数越大,叠加得到的波形越接近方波。
思考
如果把本次实验的结果应用的到实际工程中,我们就在可以解释为什么在布过程中,数字地与模拟地分开,因为数字端生成的信号是由很多次谐波叠加而成,如果此时恰好模拟端有这个频率的信号,信号就会相互干扰。
总结(感觉傻不拉几的)
这是数字信号处理仿真课程的第二个实验,通过这次实验我有了以下进步:
1.编程更加规范,之前写程序都是不会编写“程序头”就是程序正文前的一些内容,比如编程内容,目标,编程时间,人员等等,我觉得这样的编程规范很好,方便自己以后查看,修改。这些编程规范也是工作中会使用到的,提前养成这些习惯能更好适应工作。
2.我更好的掌握了图像的排版规范,每个图像都配有标题,横轴,纵轴,都一一画出。掌握好这些小细节很重要,我很同意老师说的,正牌与杂牌的说法,就是因为这些细节才体现工作的严谨认真,我们的生成图像,程序都可以体现自己的态度。有时候细节决定成败,注重这些小细节可以让自己走的更远。
3.实验的原理的原理在信号与系统中学过,但是还是忘了,百度了相关知识和例程以后,还是写出了程序。之前一直有数字地和模拟地分开的说法,每次布板都照做,但是没有思考这是为什么,通过这次实验就明白了。我也体会到了在工程中知识与实践是相互联系的。