FFT算法与离散时间信号的频域分析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字信号处理

随堂实验报告

学院计算机与电子信息学院

专业电子信息工程班级

姓名学号

指导教师肖明

实验报告评分:_______

实验3 FFT 算法与离散时间信号的频域分析

一、实验目的

1、加深对离散信号的DFT 的理解;

2、熟练使用FFT 函数并对信号进行幅频和相频分析。

二、实验原理

在MATLAB 中,可以用函数X=fft(x,N)和x=ifft(X,N)计算N 点序列的DFT 正、反变换。N 点序列的DFT 和IDFT 变换定义式如下:

1

0()()N nk N n X k x n W -==∑, 101()()N nk N n x n X k W N --==∑, 利用旋转因子2j nk N N W e π-=具有周期性,可以得到快速算法(FFT )。 在频域中,arg(())()()j X k X k X k e =,幅度为()X k ,相位为arg(())X k 。

三、实验内容

1、实序列212()cos(

7)cos(7),0,1,,12x n n n n N N N

ππ=+=-。分别用一个64点和128点的fft 函数计算幅度为()X k ,相位为arg(())X k ,并绘出的图形。 2、已知某序列x(n)在单位圆上的N=64点傅立叶变换为:

2/1(),0,1,2,,110.7j k N X k k N e π-==--

用N 点ifft 程序计算()[()]x n IDFT X k =。

3. 在噪声信号中寻找频率信号,考虑抽样频率1000Hz ,信号为频率 50 Hz 幅度0.7和频率120 Hz 幅度1的两个正弦波之和,它被零均值的随机噪声污染,程序如下:

Fs = 1000; % 抽样频率

T = 1/Fs; % 抽样间隔

L = 1000; % 信号的长度

t = (0:L-1)*T; % 时间矢量

% 50 Hz 和120 Hz正弦波相加

x = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);

y = x + 2*randn(size(t)); % 加噪声

plot(Fs*t(1:50),y(1:50))

title('被噪声污染的信号')

xlabel('时间 (ms)')

NFFT = 500;

Y = fft(y,NFFT)/L;

f = Fs/2*linspace(0,1,NFFT/2+1);

% 绘制单边幅度谱

plot(f,2*abs(Y(1:NFFT/2+1)))

title('信号y(t)的单边幅度谱')

xlabel('频率(Hz)')

ylabel('|Y(f)|')

4. 对连续的单一频率周期信号按采样频率8s a f f =采样,截取长度N 分别

选N =20和N =16,观察其DFT 结果的幅度谱。此时离散序列

()sin(2/)sin(2/8)a s x n nf f n ππ==,即k=8。用MATLAB 计算并作图,函数fft 用于计算离散傅里叶变换DFT ,程序如下:

k=8;

n1=[0:1:19];

xa1=sin(2*pi*n1/k);

subplot(2,2,1)

plot(n1,xa1)

xlabel('t/T');ylabel('x(n)');

xk1=fft(xa1);xk1=abs(xk1);

subplot(2,2,2)

stem(n1,xk1)

xlabel('k');ylabel('X(k)');

n2=[0:1:15];

xa2=sin(2*pi*n2/k);

subplot(2,2,3)

plot(n2,xa2)

xlabel('t/T');ylabel('x(n)');

xk2=fft(xa2);xk2=abs(xk2); subplot(2,2,4)

stem(n2,xk2)

xlabel('k');ylabel('X(k)');

程序运行结果:

计算结果示于图1,(a)和(b)分别是N=20时的截取信号和DFT结果,由于截取了两个半周期,频谱出现泄漏;(c) 和(d) 分别是N=16时的截取信号和DFT结果,由于截取了两个整周期,得到单一谱线的频谱。上述频谱的误差主要是由于时域中对信号的非整周期截断产生的频谱泄漏。

四、实验心得:

经过这次的实验使我加深对离散信号的DFT的理解;熟练使用FFT函数并对信号进行幅频和相频分析。在MATLAB中,熟悉函数fft、ifft的使用;

阅读扩展练习中的实例,学习在MATLAB中的实现FFT算法的实现;利用MATLAB 编程完成计算,绘出相应图形。

相关文档
最新文档