利用MATLAB实现信号DFT的计算
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
07级电信(2)班 刘坤洋 24
实验一 利用MATLAB 实现信号DFT 的计算
一、实验目的:
1、熟悉利用MATLAB 计算信号DFT 的方法
2、掌握利用MATLAB 实现由DFT 计算线性卷积的方法
二、实验设备:电脑、matlab 软件
三、实验内容:
1、练习用matlab 中提供的内部函数用于计算DFT
(1) fft (x ),fft (x ,N ),ifft (x ),ifft (x ,N )的含义及用法
(2) 在进行DFT 时选取合适的时域样本点数N
请举例,并编程实现
题目:
源程序: >> N=30; %数据的长度
>>L=512; %DFT 的点数
>>f1=100; f2=120;
>>fs=600; %抽样频率
>>T=1/fs; %抽样间隔
>>ws=2*pi*fs;
>>t=(0:N-1)*T;
>>f=cos(4*pi*f1*t)+cos(4*pi*f2*t);
>>F=fftshift(fft(f,L));
>>w=(-ws/2+(0:L-1)*ws/L)/(2*pi);
>>hd=plot(w,abs(F));
>>ylabel('幅度谱')
>> xlabel('频率/Hz')
的频谱
分析利用)π4cos()π4cos()(DFT 21t f t f t x +=Hz
600,Hz 120,Hz 10021===s f f f
>> title('my picture')
结果图:
(3) 在对信号进行DFT 时选择hamming 窗增加频率分辨率
请举例,并编程实现
题目:
源程序:>> N=50; %数据的长度
>>L=512; %DFT 的点数
>>f1=100;f2=150;
>>fs=600; %抽样频率
>>T=1/fs; %抽样间隔
>>ws=2*pi*fs;
>>t=(0:N-1)*T;
>>f=cos(4*pi*f1*t)+0.15*cos(4*pi*f2*t);
的频谱
分析利用)π4cos(15.0)π4cos()(DFT 21t f t f t x +=Hz 600,Hz 150,Hz 10021===s f f f
>>wh=(hamming(N))';
>>f=f.*wh;
>>F=fftshift(fft(f,L));
>>w=(-ws/2+(0:L-1)*ws/L)/(2*pi);
>>plot(w,abs(F));
>>ylabel('幅度谱')
>> xlabel('频率/Hz')
>> title('my picture')
>> legend('N=50')
结果图:
2、增加DFT 点数M 以显示更多频谱细节
请举例,并编程实现
题目: 利用MATLAB 计算16点序列x [k ]的512点DFT 。
源程序:>> N = 32;
>> k = 0:N-1;
4
,32 ),/ π4cos(][===r N N rk k x
>> L = 0:511;
>> x = cos(4*pi*k*4./N);
>> X = fft(x);plot(k/N,abs(X),'o');
>> hold on
>> XE = fft(x,512);plot(L/512,abs(XE)) ;
>> legend('N=32')
结果图:
3、利用MATLAB实现由DFT计算线性卷积
请举例,并编程实现
题目:利用MATLAB由DFT计算x[k]* h[k]。x[k]={1, 2, 1, 1}, h[k]={2, 2, 1, 1}源程序:% 利用DFT计算线性卷积
>> x = [1 2 1 1];
>>h = [2 2 1 1];
>> % 确定卷积结果的长度
>>L = length(x)+length(h)-1;
% 计算序列的L点DFT
>>XE = fft(x,L);
>.HE = fft(h,L);
>> % 由IDFT计算卷积结果
>>y1 = ifft(XE.*HE);
>> %绘制卷积结果及误差图
>> k=0:L-1;
>> subplot(1,2,1);
>> stem(k,real(y1));axis([0 6 0 7]);
>> title('Result of linear Convolution');
>> xlabel('Time index k');ylabel('Amplitude');
>> y2=conv(x,h);error=y1-y2;
>> subplot(1,2,2);stem(k,abs(error));
>> xlabel('Time index k');ylabel('Amplitude');
>> title('Error Magnitude');
结果图:
(注:可编辑下载,若有不当之处,请指正,谢谢!)