快速傅里叶变换(FFT)后的点的物理含义

基础知识点:
  1.  信号频率,F
  2.  采用频率, Fs
  3.  采用频率必须是信号频率的2倍及以上,才能保证采到的信号没有失真

物理含义:

采样获取到数字信号后,就可以对其做FFT变换了。N个采样点,经过FFT之后,可以得到N个点的FFT结果,这N个点是以复数形式存储的。为了有利于蝶形变换运算,通常N取2的整数次方。

每一个点就对应着一个频率点。这个点的模值,就是该频率值下的振幅特性。具体跟原始信号的幅度有什么关系呢?

    假设原始信号的峰值为A,那么FFT的结果的每个点(除了第一个点直流分量之外)的模值就是A的N/2倍。而第一个点就是直流分量,它的模值就是直流分量的N倍。


FFT后的N点,具有以下几个物理含义:
1' 第一个点表示0HZ,第N+1个点表示采样频率Fs(N+1个点不存在),从第1个点到N个点,这中间被N-1个点平均分成N等份,每个点的频率依次增加。例如某点n所表示的频率为:Fn=(n-1)*Fs/N
2' FFT能分辨的频率是:Fs/N,列如,Fs=50,采样1秒钟,进行FFT,那么FFT所识别的频率是1HZ,同样是Fs=50,采样两秒钟后进行FFT,那么FFT的分辨率就是0.5HZ. 因此如果要提高频率分辨力,则必须增加采样点数,也即采样时间。频率分辨率和采样时间是倒数关系。

3' 由于采样频率是数字信号频率的两倍及以上,所以我们只需要前N/2个结果即可,从FFT的特性上来看,FFT后N个点是对称的,所以也只需要查看前N/2个结果.


下面是Python的程序:

import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import freqz
from scipy.fftpack import fft,ifft 
fs=200.0;#采用频率
f1=50.0;#信号1的频率
f2=90.0;#信号2的频率
f3=75.0;#信号3的频率
#nsamples = 1 * fs;#采样时间
t =np.array( [c/200.0 for c in range(0,200)]);
x = 1 * np.cos(2 * np.pi * f1 * t + np.pi*30/180);#振幅为1,相位为30度,频率为50hz的cos信号
x += 0.3 * np.cos(2 * np.pi * f2 * t + .11)#振幅为0.3,相位为0.11弧度,频率为90hz的cos信号
x += 0.5 * np.cos(2 * np.pi * f3 * t)#振幅为0.5,相位为0度,频率为75hz的cos信号
fftresult=fft(x);#进行FFT运算
yf=abs(fftresult) # 取绝对值  
xf = np.arange(len(x)) # 频域
plt.figure(1)
plt.plot(xf,yf,'r')
plt.title('FFT of Mixed wave(two sides frequency range)',fontsize=7,color='#7A378B')
plt.show()

结果如下:

快速傅里叶变换(FFT)后的点的物理含义_第1张图片


你可能感兴趣的:(数字信号处理;傅里叶变换)