傅里叶变换是一个数学公式,它将一个在时间或空间上采样的信号与同一个在频率上采样的信号联系起来。在信号处理中,傅里叶变换可以揭示信号的重要特征,即信号的频率成分。
傅里叶变换定义为一个向量 与 均匀抽样点
是其中之一 单位的复根 为虚数单位。为 和 的指标 和 范围从 来 .
的fft
函数中使用了快速傅里叶变换算法来计算数据的傅里叶变换。考虑一个正弦信号x
这是时间的函数t
频率成分为15hz和20hz。使用以为增量采样的时间向量
在10秒的时间内。
Ts = 1/50;t = 0: Ts: 10-Ts;X = sin(2* 15*t) + sin(2* 20*t)情节(t, x)包含(的时间(秒)) ylabel (“振幅”)
计算信号的傅里叶变换,并创建向量f
这对应于信号在频率空间中的采样。
y = fft (x);fs = 1 / Ts;f =(0:长度(y) 1) * fs /长度(y);
当你画出信号的幅度作为频率的函数时,幅度上的尖峰对应于信号的频率成分15 Hz和20 Hz。
情节(f, abs (y))包含(的频率(赫兹)) ylabel (“级”)标题(“级”)
这个变换也会产生一个对应于信号负频率的尖峰的镜像副本。为了更好地形象化这个周期,你可以使用fftshift
函数,该函数对变换执行以零为中心的圆形移位。
n =长度(x);fshift = (- n / 2: n / 2 - 1) * (fs / n);yshift = fftshift (y);情节(fshift、abs (yshift))包含(的频率(赫兹)) ylabel (“级”)
在科学应用中,信号经常被随机噪声破坏,掩盖了它们的频率成分。傅里叶变换可以处理掉随机噪声并显示频率。例如,创建一个新信号,xnoise
,通过向原始信号中注入高斯噪声,x
.
rng (“默认”) xnoise = x + 2.5*randn(size(t)));
信号功率作为频率的函数是信号处理中常用的度量。功率是信号的傅里叶变换的大小的平方,由频率样本的数量归一化。计算并绘制以零频率为中心的噪声信号的功率谱。尽管有噪音,你仍然可以通过能量峰值分辨出信号的频率。
ynoise = fft (xnoise);ynoiseshift = fftshift (ynoise);功率= abs (ynoiseshift)。^ 2 / n;情节(fshift、电力)标题(“权力”)包含(的频率(赫兹)) ylabel (“权力”)
直接用傅里叶变换公式来计算 的元素 要求按顺序 浮点操作。快速傅里叶变换算法只需要 操作来计算。当处理有数百万个数据点的数据时,这种计算效率是一个很大的优势。许多快速傅里叶变换算法的专门实现在 是2的幂。
以加州海岸水下麦克风收集的音频数据为例。这些数据可以在由康奈尔大学生物声学研究项目.中加载并格式化数据的子集bluewhale.au
,里面有太平洋蓝鲸的叫声。因为蓝鲸的叫声是低频的,人类几乎听不到。数据中的时间尺度被压缩了10倍,以提高音调,使呼叫更清晰可闻。可以使用该命令声音(x, fs)
来听整个音频文件。
whaleFile =“bluewhale.au”;[x, fs] = audioread (whaleFile);whaleMoan = x (2.45 e4:3.10e4);t = 10 * (0:1 / fs: ((whaleMoan) 1)长度/ fs);情节(t, whaleMoan)包含(的时间(秒)) ylabel (“振幅”) xlim ([0 t(结束)))
指定一个新的信号长度,该长度是原长度的下一个2的幂。然后,用fft
来计算新的信号长度的傅里叶变换。fft
自动填充数据与零,以增加样本量。这种填充可以使转换计算大大加快,特别是对于素数因子较大的样本大小。
m =长度(whaleMoan);n = pow2 (nextpow2 (m));y = fft (whaleMoan n);
绘制信号的功率谱。从图中可以看出,呻吟由17hz左右的基本频率和一组强调二次谐波的和声组成。
f = (0: n - 1) * (fs / n) / 10;%频率向量功率= abs (y)。^ 2 / n;%功率谱情节(f(1:地板(n / 2))、电力(1:地板(n / 2)))包含(的频率(赫兹)) ylabel (“权力”)
fft
|fftshift
|nextpow2
|传输线
|fft2
|fftn
|fftw