MATLAB——FFT的细节处理

一:概述

对于fft函数,其作用为快速傅里叶变换,可以实现常规傅里叶变换的仿真。而由于其原理,最后生成的图像可能并不是我们常分析的样子。本文将简要对fft函数的细节处理进行一定的分析,从而使原来的的图像变为便于我们分析的样子。

二:仿真参数

f0=1e6; %频率
fs=5e6; %采样率
t=1/fs:1/fs:1; %样点采集
s=cos(2pif0*t); %信号

三:原始FFT图像

原始与最后版本以一段程序实现,测试时只需要把所有的【2】代码取消备注,【1】代码加上备注,即可实现对原始模式的仿真。
仿真结果如下:
在这里插入图片描述
我们可以看到,频率上除了1e6HZ,还有4e6HZ,这其实是由于FFT函数的对称性而产生的。即FFT函数的返回值是以奈奎斯特频率对称的(本函数为2.5e6Hz)
对于幅度来说,这两根线的幅度均为2.5e6。分析可知,其为采样率的一半。即FFT的幅值大小与样点个数有关。
而对于我们来说,我们习惯正频率与负频率,信号幅值下的图像,这就要求我们对FFT的结果进行一定的变化。

四:变化后FFT图像

代码正常运行即可,结果为:
在这里插入图片描述
简要来说,我们只是将横坐标变为正负两端,对已进行FFT变化的函数进行了fftshift的再次变化。
fftshift——一种循环平移的函数,可以将奈奎斯特频率(即对称轴)移动至频谱中心。

五:仿真代码

clc;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%傅里叶变换理解%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
f0=1e6;                                %频率
fs=5e6;                                %采样率
t=1/fs:1/fs:1;                         %样点采集
%fshift =(1:length(t));                 %2】原始版,频率
fshift=(-length(t)/2:length(t)/2-1);   %1】完全版,频率
s=cos(2*pi*f0*t);
%sff=fft(s);                            %2】原始版,变换
sf_test=fft(s)/length(s);              %1】完全版,还原原始幅度值
sff=fftshift(sf_test);                 %1】完全版,变换循环平移 
figure;
plot(fshift, abs(sff));                 %abs取绝对值,消除虚数影响
xlabel('频率/Hz');
ylabel('幅度');
title('常规傅里叶变换图')

发布了3 篇原创文章 · 获赞 4 · 访问量 247

猜你喜欢

转载自blog.csdn.net/qq_45001172/article/details/104065892