数字信号处理实验报告-FFT算法的MATLAB实现

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

数字信号处理 实验报告

实验二:FFT 算法的MATLAB 实现

一、实验目的

通过本实验的学习,掌握离散傅立叶变换的理论,特别是FFT 的基本算法以及其在在数字信号处理中的应用。

二、实验内容

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

题二:一被噪声污染的信号,很难看出它所包含的频率分量,如一个由50Hz 和120Hz 正弦信号构成的信号,受均值随机噪声的干扰,数据采样率为1000Hz ,对这污染信号进行傅立叶变换,以检查所包含的频率分量

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

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

三、实验原理

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

⎪⎪⎩⎪⎪⎨⎧-≤≤=-≤≤=∑∑-=--=10101

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、基2的FFT 算法

四、实验条件

(1)微机

(2)MATLAB 编程工具

五、用matlab 程序实现:

实验一:

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');

实验二

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');

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

ylabel('振幅');title('N=1024');

实验三:

clc;

load mtlb

N=1500;

subplot(2,2,1)

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

title('原始语音信号');

y=fft(mtlb(1:N));

subplot(2,2,2)

plot([1:N],y);

title('原始语音信号FFT变换');

y(y<1)=0;

subplot(2,2,3)

plot([1:N],y);

title('去掉幅值小于1的FFT变换值');

subplot(2,2,4)

plot([1:N],ifft(y));

title('重构语音信号');

六、实验心得:

(1)通过这次实验,掌握离散傅立叶变换的理论,特别是FFT的基本算法以及其在在数字信号处理中的应用。并且知道可以用离散傅里叶变换进行信号的分离和重构

(2)通过这次实验,让我真正的了解了通过离散傅里叶变换可以消除噪声对信号的干扰,可以重构语音信号。

相关文档
最新文档