基于Matlab信号DFT计算-数字信号处理小论文
数字信号处理小论文
题目:基于Matlab的信号DFT的计算
学 校: 湖北文理学院
学 院: 物理与电子工程学院
专 业: 电子信息工程
班 级: 1311电工
姓 名: 第七组
指导教师: 张静
利用MATLAB实现信号DFT的计算
一、目的:
1、熟悉利用MATLAB计算信号DFT的方法
2、掌握利用MATLAB实现由DFT计算线性卷积的方法
二、设备:
电脑、Matlab软件
三、内容:
练习用Matlab中提供的内部函数用于计算DFT。
fft(x),fft(x,N),ifft(x),ifft(x,N)的含义及用法。
在进行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')
>> title('my picture')
结果图:
在对信号进行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);
>>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;
>> 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')
结果图:
利用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');
结果图:
四、实验分析
是否可以利用 DFT 计算 DTFT,如