FFT算法(用matlab实现)

  • 格式:pdf
  • 大小:184.07 KB
  • 文档页数:4

下载文档原格式

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

数字信号处理实验报告实验二

FFT 算法的MATLAB 实现

(一)实验目的:理解离散傅立叶变换时信号分析与处理的一种重要变换,特别是FFT 在数字信号处理中的高效率应用。(二)实验原理:

1、有限长序列x(n)的DFT 的概念和公式:

⎪⎪⎩

⎪⎪⎨⎧-≤≤=-≤≤=∑∑-=--=1

01

01

0)(1)(10)()(N k kn N

N n kn N N n W k x N n x N k W n x k x )

/2(N j N e W π-=2、FFT 算法

调用格式是

X=fft(x)或X=fft(x,N)

对前者,若x 的长度是2的整数次幂,则按该长度实现x 的快速变换,否则,实现的是慢速的非2的整数次幂的变换;对后者,N 应为2的整数次幂,若x 的长度小于N ,则补零,若超过N ,则舍弃N 以后的数据。Ifft 的调用格式与之相同。(三)实验内容

1、题一:若x(n)=cos(n*pi/6)是一个N=12的有限序列,利用MATLAB 计算它的DFT 并画出图形。源程序:clc;N=12;n=0:N-1;k=0:N-1;

xn=cos(n*pi/6);W=exp(-j*2*pi/N);kn=n'*k

Xk=xn*(W.^kn)stem(n,Xk);xlabel('k');ylabel('Xk');grid on ;

也可用FFT 算法直接得出结果,程序如下:clc;N=12;n=0:N-1;

xn=cos(n*pi/6);

Xk=fft(xn,N);stem(n,Xk);xlabel('k');ylabel('Xk');grid on ;实验结果:

24

681012

k

X k

分析实验结果:

用DFT 和用FFT 对序列进行运算,最后得到的结果相同。但用快速傅立叶变换的运算速度可以快很多。

2、题二:一被噪声污染的信号,很难看出它所包含的频率分量,如一个由50Hz 和120Hz 正弦信号构成的信号,受均值随机噪声的干扰,数据采样率为1000Hz ,通过FFT 来分析其信号频率成分,用MATLAB 实现。源程序:clc;

fs=1000;N=1024;n=0:N-1;t=n/fs;

x=sin(2*pi*50*t)+sin(2*pi*120*t)+rand(1,N);y=fft(x,N);mag=abs(y);f=n*fs/N;

subplot(1,2,1),plot(f,mag);xlabel('频率/Hz');

ylabel('振幅');title('N=1024');grid on ;subplot(1,2,2),plot(f(1:N/2),mag(1:N/2));xlabel('频率/Hz');

ylabel('振幅');title('N=1024');grid on ;实验结果:

5001000

010*******

400500

600

频率/Hz

振幅

N=1024

200400600

100

200

300

400

500

600

频率/Hz

振幅

N=1024

分析实验结果:

用FFT 运算,将序列转变到频域上,虽然信号受到均值随机噪声的干扰,但分析频谱可清楚看到原信号的频率,50Hz 120Hz 。

3、题三:调用原始语音信号mtlb ,对其进行FFT 变换后去掉幅值小于1的FFT 变换值,最后重构语音信号。

(要求有四幅语音信号的频谱图在同一图形窗口以便比较:分别是1、原始语音信号;2、FFT 变换;3去掉幅值小于1的FFT 变换值;4、重构语音信号)源程序:clc;

load mtlb %Load data N=512;

subplot(2,2,1)

plot([1:N],mtlb(1:N));

title('原始语音信号');grid;y=fft(mtlb(1:N));

subplot(2,2,2)plot([1:N],y);

title('原始语音信号FFT 变换');grid;y(y<1)=0;subplot(2,2,3)plot([1:N],y);

title('去掉幅值小于1的FFT 变换值');grid;subplot(2,2,4)plot([1:N],ifft(y));

title('重构语音信号');grid;实验结果:

020*******-2

-10

1原始语音信号

020*******

-200

-1000

100原始语音信号FFT 变换

200

400

600

0204060

80去掉幅值小于1的FFT 变换值0

200400600

-1-0.500.5

1重构语音信号

分析实验结果:

对语音信号的FFT 变换,可以看出其频率的主要成分。去掉幅值小于1的FFT 变换值后,重构语音信号发现,与原来的信号存在着细微的差别。

(四)心得体会:通过Matlab 的仿真,形象地得出了离散序列运用FFT 运算后的频域图形。FFT 运算较DFT 运算快速,且适合计算机的运算。