傅里叶变换是一种线性积分变换,用于信号在时域(或空域)和频域之间的变换,在物理学和工程学中有许多应用。
1.傅里叶级数
先从傅里叶级数讲起,任何周期函数都可以展开为正弦和余弦函数的和。
周期为2
的 f(x), 能展开成,
或者写成
其中Fn为复振幅。
2. 连续傅里叶变换
继续延申傅里叶级数的思想,计算连续傅里叶变换,即把用积分代替求和。
连续傅里叶变换将可积函数 f(t) 成 复指数函数的积分或级数形式。
傅里叶变换逆变换为
代表角频率。
3. 离散傅里叶变换
类似的,离散时间信号x(n) 的离散傅里叶变换DTFT (Dicrete time Fourier transform)可以写为
逆变换为
表示频谱,一般为复数。注意DTFT中,时域是离散的,而频域依然是连续的。对DTFT频域离散采样之后的操作,称为离散傅里叶变换(DFT)。
如果还不懂的话,可以看这个: 一幅图弄清DFT与DTFT,DFS的关系。
一幅图弄清DFT与DTFT,DFS的关系 - BitArt - 博客园www.cnblogs.com
4. 快速傅里叶变换
在离散傅里叶变换(DFT)上,当N很大时,直接计算的方法,耗时太久。因此,有研究者提出了很多快速傅里叶变换(FFT)的算法。
matlab实现快速傅里叶变换
----
clear;clc
Fs = 1000; % 采样频率
T = 1/Fs; % 采样周期
L = 1000; % 信号长度 由此知,频率分辨率为 1hz
t = (0:L-1)*T; % 时间相量
S = 0.7*sin(2*pi*50*t+pi/4) + sin(2*pi*150*t-pi/2); % 原始函数
Y = fft(S);
P2 = abs(Y/L); % 每个量除以数列长度 L
P1 = P2(1:L/2+1); % 取交流部分
P1(2:end-1) = 2*P1(2:end-1); % 交流部分模值乘以2
f = Fs*(0:(L/2))/L; %横坐标频率
plot(f,P1)
title('Single-Sided Amplitude Spectrum of S(t)')
xlabel('f (Hz)')
ylabel('|P1(f)|')
----
得到结果如下:
特别要注意的有两点
1). fft之后的实数值部分,并不是真的amplitude,还需要 abs(z1)/L*2;
2). 横坐标,频率的计算;
5. 功率谱 (Power Spectral density, PSD)
根据Weiner-Khintchine 定理,信号的功率谱和其自相关函数服从一对傅里叶变换公式,
但是实际计算中,会遇到两个问题 (a)不可能获得无限长度的信号 (b)有噪音。
谱估计方法分为经典和现在方法。
参考文献