首页/文章/ 详情

带你了解什么是傅里叶变换FFT

1年前浏览694

时域信号分为周期/非周期,连续和离散,这样有四种样式的傅里叶变换。

如上可以看到,在一个域的离散信号,在另一个域将变成周期的。类似的,在一个域连续的信号,在另外一个域必然是非周期的。

1DFT

分为实数和复数版本的DFT,实数版本输入是实数,得到的频域点将有两个集  合,分别是cos 和sin 函数的系数。复数输入表示的是正负频率。


   

实 DFT:

对于输入是x(n) 的点DFT,将获得N/2+1的两组cos 和sin 系数。

根据系数获取原始输入时,需要对Xre[0] Xre[N/2]除以2。



   

复 DFT:

对于点复数DFT 变换后得到的是X[k]。

变换后的X[0] 是直流分量,1∼N/2是正频成分,X[N/2] 是奈奎斯特频率,接下来的N/2−1是负频分量。


从频谱获得原始输入信号的公式是:

当时域信号是实数时,计算复DFT 时将虚部填零,下图是matlab fft 函数计算的DFT 结果。

2FFT

FFT 是DFT 计算的快速方法。


   

   

matlab

x=fft(x,N),%计算X[k]

x=ifft(x,N)



   

FFT结果举例:

假设x[n] 是频率fc=10Hz余弦信号,采样率是fs=32∗fc


   

   

fc=10;

fs=32*fc;%sampling frequency with oversampling factor=32

t=0:1/fs:2-1/fs;%2 seconds duration

x=cos(2*pi*fc*t);%time domain signal (real number)

subplot(3,1,1); plot(t,x);hold on; %plot the signal

title('x[n]=cos(2 \pi 10 t)'); xlabel('n'); ylabel('x[n]');

N=256点FFT:


   

   

X = fft(x,N);%N-point complex DFT

%output contains DC at index 1, Nyquist frequency at N/2+1 th index

%positive frequencies from index 2 to N/2

%negative frequencies from index N/2+1 to N

matlab数组从1开始,输出1-N,频点间隔是Δf=fs/N,先输出直流分量,然后是正频分量,再然后是负频分量。在MATLAB 中使用fftshift 后,将频率按负频分量、直流以及正频分量排列。


   

实信号:


实数信号以f为采样率,那奎斯特采样定理表明混跌频率是fs/2,则实数信号的fft 结果中前半部分是[0,fs/2],后半部分是[fs/2,fs]。由于周期性,在频谱不混跌的情况下,后半部分等于[−fs/2,0],在上图中看到第一个数是36+0i,这就是直流分量。另外,还应该注意到第个数,实际上等于第N个数的共轭。所以,实际上实数的快速傅里叶算法  会利用这个性质减小运算量和存储空间,这是在代码级别的优化。在实际频率显示时,某些场合期望得到[−fs/2, fs/2]显示频谱,通常会使用matlab 的fftshift 来实现这个功能。



   

复信号:

对于复信号没有负频率,以f采样率的信号,fft 频谱的结果是从[0,fs]。f>fs/2时,对复信号的fft 结果进行fftshift 会产生频谱混跌。  

来源:CAE仿真学社
MATLABANSYS
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-04-02
最近编辑:1年前
CAE仿真学社
硕士 | CAE仿真工程师 万物皆可仿,关注CAE仿真学社
获赞 154粉丝 304文章 296课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈