实验二:FFT算法的MATLAB实现
2015-06-24 22:54
591 查看
实验内容:
题一:若x(n)=cos(n*pi/6)是一个N=12的有限序列,利用MATLAB计算它的DFT并画出图形。
结果:
XK =
Columns 1 through 8
-0.0000 6.0000 + 0.0000i -0.0000 + 0.0000i -0.0000 - 0.0000i -0.0000 - 0.0000i -0.0000 - 0.0000i 0 - 0.0000i 0.0000 - 0.0000i
Columns 9 through 12
0.0000 - 0.0000i 0.0000 - 0.0000i 0.0000 - 0.0000i 6.0000 + 0.0000i
题二:一被噪声污染的信号,很难看出它所包含的频率分量,如一个由50Hz和120Hz正弦信号构成的信号,受均值随机噪声的干扰,数据采样率为1000Hz,通过FFT来分析其信号频率成分,用MATLAB实现。
结果:
题三:调用原始语音信号mtlb,对其进行FFT变换后去掉幅值小于1的FFT变换值,最后重构语音信号。
(要求有四幅语音信号的频谱图在同一图形窗口以便比较:分别是1、原始语音信号;2、FFT变换;3去掉幅值小于1的FFT变换值;4、重构语音信号)
结果:
(四)心得体会:1.通过Matlab的仿真,我们可以得到离散序列在时域到频域的变化图形,其实FFT与DFT的本质是一样的。还有重构语音信号与原始语音信号差不多,也就是说相当于滤除噪音,这也是FFT的现实应用。2.仔细明白公式原理的过程,然后步步设计思路,最后不停的调试,才能得到想要的结果。3.学以致用,启迪实际应用。
题一:若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); WN=exp(-j*2*pi/N); nk=n'*k; WNnk=WN.^nk; XK=xn*WNnk plot(k,XK); xlabel('k'); ylabel('XK'); grid on;
结果:
XK =
Columns 1 through 8
-0.0000 6.0000 + 0.0000i -0.0000 + 0.0000i -0.0000 - 0.0000i -0.0000 - 0.0000i -0.0000 - 0.0000i 0 - 0.0000i 0.0000 - 0.0000i
Columns 9 through 12
0.0000 - 0.0000i 0.0000 - 0.0000i 0.0000 - 0.0000i 6.0000 + 0.0000i
题二:一被噪声污染的信号,很难看出它所包含的频率分量,如一个由50Hz和120Hz正弦信号构成的信号,受均值随机噪声的干扰,数据采样率为1000Hz,通过FFT来分析其信号频率成分,用MATLAB实现。
clc; fs=1000;N=128; %采样频率和数据点数 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); %对信号进行快速Fourier变换 mag=abs(y); %求得Fourier变换后的振幅 f=n*fs/N; %频率序列 subplot(2,2,1),plot(f,mag); %绘出随频率变化的振幅 xlabel('频率/Hz'); ylabel('振幅');title('N=128');grid on; subplot(2,2,2),plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅 xlabel('频率/Hz'); ylabel('振幅');title('N=128');grid on; %对信号采样数据为1024点的处理 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); %对信号进行快速Fourier变换 mag=abs(y); %求取Fourier变换的振幅 f=n*fs/N; subplot(2,2,3),plot(f,mag); %绘出随频率变化的振幅 xlabel('频率/Hz'); ylabel('振幅');title('N=1024');grid on; subplot(2,2,4) plot(f(1:N/2),mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅 xlabel('频率/Hz'); ylabel('振幅');title('N=1024');grid on;
结果:
题三:调用原始语音信号mtlb,对其进行FFT变换后去掉幅值小于1的FFT变换值,最后重构语音信号。
(要求有四幅语音信号的频谱图在同一图形窗口以便比较:分别是1、原始语音信号;2、FFT变换;3去掉幅值小于1的FFT变换值;4、重构语音信号)
clc; load mtlb N=512; n=1:N; subplot(2,2,1);plot(n,mtlb(n)); title('原始语音信号');grid on; y=fft(mtlb(n)); subplot(2,2,2);plot(n,y); title('原始语音信号的FFT变换'); grid on; y(y<1)=0; subplot(2,2,3);plot(n,y); title('去掉幅值小于1的FFT变换值'); grid on; subplot(2,2,4);plot(n,ifft(y)); title('重构语音信号');grid on;
结果:
(四)心得体会:1.通过Matlab的仿真,我们可以得到离散序列在时域到频域的变化图形,其实FFT与DFT的本质是一样的。还有重构语音信号与原始语音信号差不多,也就是说相当于滤除噪音,这也是FFT的现实应用。2.仔细明白公式原理的过程,然后步步设计思路,最后不停的调试,才能得到想要的结果。3.学以致用,启迪实际应用。
相关文章推荐
- 实验一 离散时间序列卷积和MATLAB实现
- Huffman编码用MTLAB的实现及编码注释----------Matlab
- MIMO信道容量及注水算法---------Matlab
- MATLAB实用源代码
- 协方差,方差,期望的意义
- matlab中sum()求和函数
- PCA ( 主成分分析) 详解 ( 写给初学者) 结合matlab
- Matlab常用函数流水账
- 几种简单常用的镜头边缘检测算法(matlab实现)
- matlab中 tic,toc函数的用法
- 利用MATLAB绘制信号时域波形和信号的频谱
- [图像]Canny检测的Matlab实现(含代码)
- matlab中clc,close,close all,clear,clear all作用区别
- Matlab——zeros函数和ones函数
- win7运行matlab7.0闪一下就消失
- Matlab图像处理小结
- Matlab区分难点
- matlab函数 bsxfun浅谈
- Matlab与C++混合编程(依赖OpenCV)
- matlab练习程序(模拟退火SA)