利用MATLAB实现信号DFT的计算

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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');

结果图:

(注:可编辑下载,若有不当之处,请指正,谢谢!)

相关文档
最新文档