资源描述:
《数字信号处理,matlab实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Matlab实验报告实验一:1.实验Matlab代码:N=25;Q=0.9+0.3*j;WN=exp(-2*j*pi/N);x=zeros(25,1);formatlong;%长整型科学计数fork0=1:25x(k0,1)=Q^(k0-1);end;fork1=1:25;X1(k1,1)=(1-Q^N)/(1-Q*WN^(k1-1));end;X1;X2=fft(x,32);subplot(3,1,1);stem(abs(X1),'b.');axis([0,35,0,15]);title('N=25,formular');xlabel('n');subplot(3,1,2)
2、;stem(abs(X2),'g.');axis([0,35,0,15]);title('N=32,FFT');xlabel('n');for(a=1:25)X3(a)=X1(a)-X2(a)end;subplot(3,1,3);stem(abs(X3),'r.');title('difference');xlabel('n');实验结果如图:实验结论:可以看出基2时间抽选的FFT算法与利用公式法所得到的DFT结果稍有偏差,但不大,在工程上可以使用计算机利用FFT处理数据。2.实验Matlab代码:N=1000;%LengthofDFTn=[0:1:N-1];xn=0.001
3、*cos(0.45*n*pi)+sin(0.3*n*pi)-cos(0.302*n*pi-pi/4);Xk=fft(xn,N);k=[0:1:N-1];subplot(5,1,1);stem(k,abs(Xk(1:1:N)));title('DFTx(n)');xlabel('k');axis([140,240,0,6])subplot(5,1,2);stem(k,abs(Xk(1:1:N)),'r');%画出sin(0.3npi)-cos(0.302npi-pi/4)axis([140,160,0,6]);title('sin(0.3*pi*n)-cos(0.302*pi*
4、n)');xlabel('k');subplot(5,1,3);stem(k,1000*abs(Xk(1:1:N)),'g');%画出0.001*cos(0.45npi)axis([220,230,0,6]);title('cos(0.45*pi*n)');xlabel('k');subplot(5,1,4);stem(k,0.01*abs(Xk(1:1:N)),'k');%画%sin(0.3npi)-cos(0.302npi-pi/4)axis([140,160,0,6]);title('sin(0.3*pi*n)-cos(0.302*pi*n)');xlabel('k')
5、;subplot(5,1,5);stem(k,10*abs(Xk(1:1:N)),'m');%画出0.001*cos(0.45npi)axis([220,230,0,6]);title('cos(0.45*pi*n)');xlabel('k');实验结果如图:实验结论:由上图及过程可知,当DFT变换长度为1000时所得到的谱线非常理想。由此可知当DFT变换长度N为多个数字频率公倍数时(即数字频率正好位于子带的中心频率上时),得到理想的谱线。实验二:实验Matlab代码:num=input('pleaseinputyourphonenumber:','s');%输入电话号码le
6、n=length(num);%电话号码长度xx=[];%时域信号key=[49,50,51,65;52,53,54,66;55,56,57,67;42,48,35,68];%DTMF表中的16个ASCII码frow=[697,770,852,941];%行频率fcol=[1209,1336,1477,1633];%列频率fora=1:len%循环len次forrow=1:4;forcol=1:4;ifnum(a)==key(row,col);break;end%检测列号endifnum(a)==key(row,col);break,end%检测行号endn=1:400;%每个
7、号码在时域中所占长度fs=8000;%取样频率x=sin(2*pi*n*frow(row)/fs)+sin(2*pi*n*fcol(col)/fs);%生成一个号码的信号x=[x,zeros(1,400)];%加一半时间的静音xx=[xxx];%与之前信号连接endsound(xx);%发声wavwrite(xx,'C:UsersMATLABsound')%生成文件subplot(2,1,1);plot(xx);title('时域波形')XX=fft(xx);XXX=abs(XX);subplot