第二次DSP上机实验报告 MATLAB实验报告
北京邮电大学信息与通信工程学院
DSP--MATLAB实验报告
实验名称:学生姓名:班级:
班内序号:学号:日期:
1.实验要求与目的
要求:(1)用DFT分析频谱,得到高分辨率频谱清楚的谱线;
(2)利用基2时间抽选的FFT算法,计算有限点的DFT,并与理论值相比较。目的:掌握
(a)用傅立叶变换进行信号分析时基本参数的选择。
(b)经过离散时间傅立叶变换(DTFT)和有限长度离散傅立叶变换(DFT)后信号频谱上的区别,前者DTFT时间域是离散信号,频率域还是连续的,而DFT在两个域中都是离散的。
(c)离散傅立叶变换的基本原理、特性,以及经典的快速算法(基2时间抽选法),体会快速算法的效率。
(d)获得一个高密度频谱和高分辨率频谱的概念和方法,建立频率分辨率和时间分辨率的概念,为将来进一步进行时频分析(例如小波)的学习和研究打下基础。
2关键算法分析
第1页北京邮电大学信息与通信工程学院
代码的重点是利用fft函数计算离散序列的DFT,难点是矩阵的加减乘除及乘方中所涉及的matlab语句的特点。实验代码如下:(
1)N=1000;
n=(0:N-1);y=0.001*cos(0.45*n*pi)+sin(0.3*n*pi)-cos(0.302*n*pi-pi/4);y=0.001*cos(0.45*n*pi)+sin(0.3*n*pi)-cos(0.302*n*pi-pi/4);
XK=fft(y,N);--fft函数两个参数分别是进行DFT变换的序列,及DFT的长度subplot(3,1,1);stem(n,y);title("时域波形");xlabel("n");ylabel("y");
subplot(3,1,2);stem(abs(XK),".");axis([0,500,0,600]);--限定x轴与y轴的范围title("频域前500点波形");xlabel("k");ylabel("XK");
subplot(3,1,3);stem(abs(XK),".");axis([800,900,0,600]);--x轴的范围很小,目的是能看到两条很近的谱线
title("频域后500点部分波形");xlabel("k");ylabel("XK");(2)N=25;Q=0.9+j*0.3;n=(0:24);
x=Q.^n;WN=exp(-j*2*pi/N);k=(0:24);WK=WN.^k;
XK=(1-Q.^N)./(1-Q*WK);stem(XK);---理论值的计算XK1=fft(x,32);--32点基2时间抽选法的计算
subplot(3,1,1);stem(n,x);title("时域波形");xlabel("n");ylabel("x");subplot(3,1,2);stem(XK);title("频域理论值");xlabel("k");ylabel("XK");subplot(3,1,3);stem(XK1);title("频域波形");xlabel("k");ylabel("XK1");
第2页北京邮电大学信息与通信工程学院
3.程序运行结果(1)
(2)
第3页北京邮电大学信息与通信工程学院
4.问题分析
这次实验的题目相对简单,编程过程中遇到的问题主要是矩阵的加减乘除及乘方运算所对应的matlab语句的规则和fft函数的使用,fft函数的使用方法通过help语句便可查得,其两个参数:第一个是指进行fft运算的序列,第二个值fft运算的长度。而矩阵的运算规则需要上网查看相关资料或与同学讨论解决。总的来说,这次实验比第一次编程时语句的运用要熟练,而且编程比较顺利
5.心得与总结
第一次用matlab编程时遇到了很多困难,其实现在想一下,用matlab编程时
第4页北京邮电大学信息与通信工程学院
不愁没有时间编,就愁拿出了好多时间,但真到编时总是报错,又找不到错在哪里。这是让人很纠结的。这次编程我放弃了闭门造车,一个人冥思苦想的方式,而是在编的过程中与同学讨论,互相纠错,最后相对顺利的把程序编了出来。另一个比较有感触的是熟能生巧。第一次编程时什么都不懂,遇到不会编的语句就到网上去查,查到语句后又不知道那些语句中的参数代表什么,通过老师课上的讲解,我学会了用help语句,而且也积累了一些基本的函数,像axis,subplot,stem等,所以显示波形的操作做起来就比较得心应手了,多练习总是有好处的。
第5页
扩展阅读:数字信号处理上机实验报告
数字信号处理上机实验报告
实验一熟悉MATLAB环境
一、实验目的
1、熟悉MATLAB的主要操作命令。2、学会简单的矩阵输入和数据读写。3、掌握简单的绘图命令。
4、用MATLAB编程并学会创建函数。5、观察离散系统的频率响应。
二、实验内容
认真阅读本章附录,在MATLAB环境下重新做一遍附录中的例子,体会各条命令的含义。在熟悉MATLAB基本命令的基础上,完成以下实验。
上机实验内容:
1、数组的加减乘除和乘方运算,输入A求CAB,1234,B3456,
DAB,EA.B,FA./B,GA.^B,并用stem语句画出A、B、C、D、E、
F、G。
程序:
>>A=[1234];B=[3456];
C=A+B;D=A-B;E=A.*B;F=A./B;G=A.^B;
subplot(2,4,1);stem(A,".");subplot(2,4,2);stem(B,".");subplot(2,4,3);stem(C,".");subplot(2,4,4);stem(D,".");subplot(2,4,5);stem(E,".");subplot(2,4,6);stem(F,".");
subplot(2,4,7);stem(G,".")
2、用MATLAB实现下列序列。a)x(n)0.8n0n15b)x(n)e(0.23j)n0n15
n0.2)2sin(0.25n0.1)0n15c)x(n)3cos(0.125程序:A)clear;clc;n=[0:15];x1=0.8.^n;
subplot(3,1,1),stem(x1)title("x1=0.8^n")
xlabel("n");ylabel("x1");
B)clear;clc;n=[0:15];
x2=exp((0.2+3j)*n);subplot(3,1,1),stem(x2)title("x2=exp((0.2+3j)*n)")xlabel("n");ylabel("x2");
C)clear;clc;n=[0:15];
x3=3*cos(0.125*pi*n+0.2*pi)+2*sin(0.25*pi*n+0.1*pi);subplot(3,1,1),stem(x3)
title("x3=3*cos(0.125*pi*n+0.2*pi)+2*sin(0.25*pi*n+0.1*pi)")xlabel("n");ylabel("x3");
3、绘出下列时间常数的图形,对x轴,y轴以及图形上方均须加上适当的标注:
0t10sa)x(t)sin(2t)100t)sin(t)0t4sb)x(t)cos(>>m=0:0.01:10;n=0:0.01:4;x1t=sin(2*pi*m);
x2t=cos(100*pi*n).*sin(pi*n);subplot(2,1,1);plot(m,x1t);subplot(2,1,2);plot(n,x2t);
4、给定一因果系统H(z)=(1+2zz)/(1-0.67z的幅频响应与相频响应。
>>b=[1,sqrt(2),1];a=[1,-0.67,0.9];[h,w]=freqz(b,a);
am=20*log10(abs(h));%am=20*log10(abs(h))为幅频响应取dBsubplot(2,1,1);
-1-21z2),求出并绘制H(z)
plot(w,abs(h));xlabel("w");ylabel("幅频响应");title("系统响应")ph=angle(h);subplot(2,1,2);
plot(w,ph);xlabel("w");ylabel("相频响应");
5、计算序列8-2-123和序列23-1-3的离散卷积,并作图表示卷积结果。
>>a=[8-2-123];
b=[23-1-3];c=conv(a,b);M=length(c)-1;n=0:1:M;stem(n,c);
xlabel("n");ylabel("幅度");
6、求以下差分方程所描述系统的单位脉冲响应h(n),0n50:
y(n)0.1y(n1)0.06y(n2)x(n)2x(n1)
程序:>>N=50;
a=[1-2];b=[10.1-0.06];x=[1zeros(1,N-1)];k=0:1:N-1;y=filter(a,b,x);stem(k,y);
xlabel("n");ylabel("幅度");
实验二快速傅里叶变换(FFT)及其应用
一、实验目的
1、在理论学习的基础上,通过本实验,加深对FFT的理解,熟悉MATLAB中的有关函数。
2、应用FFT对典型信号进行频谱分析。
3、了解应用FFT进行信号频谱分析过程中可能出现的问题,以便在实际中正确应用FFT。
4、应用FFT实现序列的线性卷积和相关。
二、实验内容实验中用到的信号序列
a)高斯序列
npq0n15xa(n)e0其他2b)衰减正弦序列
ensin(2fn)0n15xb(n)0其他c)三角波序列
0n3nxc(n)8n4n7
0其他d)反三角波序列
0n34nxd(n)n44n7
0其他上机实验内容:
(1)观察三角波和反三角波序列的时域和幅频特性,用N8点FFT分析信号序列xc(n)和xd(n)的幅频特性,观察两者的序列形状和频谱曲线有什么异同?绘出两序列及其幅频特性曲线。程序:
n=[0:3];k=[1:8];
Xc(n+1)=n;Xc(n+5)=4-n;Xd(n+1)=4-n;Xd(n+5)=n;
三角波特性
subplot(2,2,1);plot(k-1,Xc);
xlabel("n");ylabel("时域特性");text(1,3,"三角波");subplot(2,2,2);plot(k-1,abs(fft(Xc)));
xlabel("k");ylabel("幅频特性");text(4,10,"三角波");反三角波特性
subplot(2,2,3);plot(k-1,Xd);
xlabel("n");ylabel("时域特性");text(3,3,"反三角波");subplot(2,2,4);plot(k-1,abs(fft(Xd)));
xlabel("k");ylabel("幅频特性");text(4,10,"反三角波");
在xc(n)和xd(n)末尾补零,用N32点FFT分析这两个信号的幅频特性,观察幅频特性发生了什么变化?两种情况下的FFT频谱还有相同之处吗?这些变化说明了什么?
程序:
>>n=[0:3];k=[1:32];Xc(n+1)=n;Xc(n+5)=4-n;Xd(n+1)=4-n;Xd(n+5)=n;
Xc(9:32)=0;Xd(9:32)=0;k=1:32;figure;
subplot(2,2,1);plot(k-1,Xc);
xlabel("n");ylabel("时域特性");text(1,3,"三角波");subplot(2,2,2);plot(k-1,abs(fft(Xc)));
xlabel("k");ylabel("幅频特性");text(4,10,"三角波");
subplot(2,2,3);plot(k-1,Xd);
xlabel("n");ylabel("时域特性");text(3,3,"反三角波");subplot(2,2,4);plot(k-1,abs(fft(Xd)));
xlabel("k");ylabel("幅频特性");text(4,10,"反三角波");
的16(2)用FFT分别计算xa(n)p8,q2和xb(n)0.1,f0.0625点循环卷积和线性卷积。程序:>>n1=0:1:15;
p1=8;q1=2;
x=exp(-(n1-p1).^2/q1);n2=0:1:15;a=0.1;f2=0.0625;
y=(exp(-a*n2)).*sin(2*pi*f2*n2);N=length(x);n=0:N-1;n3=0:30;X=fft(x);Y=fft(y);
x32=[xzeros(1,16)];y32=[yzeros(1,16)];X32=fft(x32);Y32=fft(y32);z16=ifft(X.*Y);z32=ifft(X32.*Y32);subplot(2,2,1);plot(n,z16,"-*");xlabel("n");ylabel("z(n)");title("循环卷积结果");subplot(2,2,2);
plot(n3,z32(1:2*N-1),"-o");xlabel("n");ylabel("z(n)");title("线性卷积结果");rm16=real(ifft(conj(X).*Y));rm32_0=real(ifft(conj(X32).*Y32));rm32=[rm32_0(N+2:2*N)rm32_0(1:N)];m=n;
11subplot(2,2,3);plot(m,rm16,"--");xlabel("m");ylabel("rm");
title("循环相关结果");m=-(N-1):N-1;subplot(2,2,4);plot(m,rm32,"--o");xlabel("m");
ylabel("rm");title("线性相关结果");
(3)产生一512点随机序列x,并用x和x作线性卷积,观察卷(((en)en)cn)积前后x频谱变化。要求将x分成8段,分别采用重叠相加法和重叠保留((en)en)法。程序:
>>n=0:7;m=1:512xc(1:4)=n(1:4);xc(5:8)=8-n(5:8);xe=rand(1,512);Xek=fft(xe);hk=fft(xc,128);subplot(3,1,1);stem(m,Xek);xlabel("n");ylabel("Xek");title("卷积前序列");forj=1:8;
x(j,:)=xe(64*(j-1)+1:64*j);
xk(j,:)=fft(x(j,:),128);
end;
y=zeros(1,576);fori=1:8y=y+f(i,:);end
subplot(3,1,2);m=0:518;
plot(m,abs(fft(y(1:519))));axis([0,518,0,250]);xlabel("k");ylabel("频域");
title("重叠相加法幅频特性")x2(1,1:71)=[zeros(1,7)xe(1:64)];
forj=2:8
f(j,(64*(j-1)+1):(64*(j-1)+128))=ifft(xk(j,:).*hk);
x2(j,:)=xe((64*(j-1)-6):(64*j));end
x2(9,:)=[xe(506:512),zeros(1,64)];forj=1:9
xk2(j,:)=fft(x2(j,:),128);f2(j,:)=ifft(xk2(j,:).*hk);end;
y2=zeros(1,576);fori=1:9
y2(1,64*(i-1)+1:64*i)=f2(i,8:71);end
subplot(3,1,3);m=0:518;
plot(m,abs(fft(y2(1:519))));axis([0,518,0,250]);xlabel("k");ylabel("频域");
title("重叠保留法幅频特性")
(4)用FFT分别计算xa(n)p8,q2和xb(n)0.1,f0.0625的自相关函数。程序:>>N=16;n=0:N-1;p=8;q=2;
Xa(n+1)=exp(-(n-p).^2./q);a=0.1;f=0.0625;
Xb(n+1)=exp(-a.*n).*sin(2*pi*f.*n);N=length(Xa);
Fa=fft(Xa,2*N);Fb=fft(Xb,2*N);F1=conj(Fa).*Fa;X81=real(ifft(F1));
X81=[X81(N+2:2*N)X81(1:N)];n=(-N+1):(N-1);
subplot(2,1,1);stem(n,X81);xlabel("n");ylabel("幅度");
Fb=fft(Xb,2*N);F2=conj(Fb).*Fb;X82=real(ifft(F2));
X82=[X82(N+2:2*N)X82(1:N)];%n=(-N+1):(N-1);
subplot(2,1,2);stem(n,X82);
xlabel("n");ylabel("幅度");
小结:
1.熟悉了MATLAB的主要操作命令,学会了简单的绘图命令,会用MATLAB编程并学会创建函数,能通过图像观察离散系统的频率响应。
2.在理论学习的基础上,通过本实验,加深了对FFT的理解,熟悉MATLAB中的有关函数。能够应用FFT对典型信号进行频谱分析,从而了解应用FFT进行信号频谱分析过程中可出现的问题,学会了应用FFT实现序列的线性卷积和相关。
友情提示:本文中关于《第二次DSP上机实验报告 MATLAB实验报告》给出的范例仅供您参考拓展思维使用,第二次DSP上机实验报告 MATLAB实验报告:该篇文章建议您自主创作。
来源:网络整理 免责声明:本文仅限学习分享,如产生版权问题,请联系我们及时删除。