傅里叶变换
傅里叶变换是一个数学公式,它将在时间或空间中采样的信号转换为在时间或空间频率中采样的相同信号。在信号处理中,傅里叶变换可以揭示信号的重要特征,即信号的频率分量。
傅里叶变换定义了一个向量 与 均匀采样点
是一种 复根的统一在哪里 是虚单位。为 而且 的指标 而且 范围从 来 .
的fft
函数在MATLAB®中使用快速傅立叶变换算法来计算数据的傅立叶变换。考虑一个正弦信号x
这是时间的函数t
频率分量为15hz和20hz。在10秒的时间段内使用增量为1/50秒的采样时间向量。
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);
当你绘制信号的大小作为频率的函数时,大小的峰值对应于信号的频率分量15hz和20hz。
情节(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);
画出信号的功率谱。图表显示呻吟由17赫兹左右的基频和一系列的谐波组成,其中第二谐波被强调。
f = (0: n - 1) * (fs / n) / 10;%频率向量功率= abs (y)。^ 2 / n;%功率谱情节(f(1:地板(n / 2))、电力(1:地板(n / 2)))包含(的频率(赫兹)) ylabel (“权力”)
阶段的正弦曲线
利用傅里叶变换,还可以提取原始信号的相位谱。例如,创建一个由两个频率为15hz和40hz的正弦信号组成的信号。第一个正弦是有相位的余弦波 ,第二种是有相位的余弦波 .以100hz采样信号1秒。
fs = 100;t = 0:1 / fs: 1 - 1 / f;X = cos(2* *15*t - /4) - sin(2* *40*t);
计算信号的傅里叶变换。画出变换的幅度作为频率的函数。
y = fft (x);z = fftshift (y);ly =长度(y);f =(以某方式/ 2:ly / 2 - 1) / ly * fs;茎(f, abs (z))包含(“频率(赫兹)”) ylabel (“y | |”网格)
计算变换的相位,去除小幅度变换值。把相位画成频率的函数。
托尔= 1 e-6;Z (abs(Z) < tol) = 0;θ=角(z);茎(f,θ/π)包含(“频率(赫兹)”) ylabel (“阶段/ \π”网格)
另请参阅
fft
|fftshift
|nextpow2
|传输线
|fft2
|fftn
|fftw