傅里叶变换
傅里叶变换是一种数学公式,它将在时间或空间上采样的信号转换为在时间或空间频率上采样的相同信号。在信号处理中,傅里叶变换可以揭示信号的重要特征,即它的频率分量。
傅里叶变换是定义一个向量的 与 均匀采样点
是 复根的单位在哪里 是虚数单位。为 而且 ,指数 而且 范围从 来 .
的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)*(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.45e4:3.10e4);t = 10*(0:1/fs:(length(whaleMoan)-1)/fs);情节(t, whaleMoan)包含(的时间(秒)) ylabel (“振幅”xlim([0 t(end)])
指定一个新的信号长度,它比原来的长度大2的次幂。然后,用fft
用新的信号长度来计算傅里叶变换。fft
自动用零填充数据以增加样本大小。这种填充可以使变换计算显著加快,特别是对于具有大素数因子的样本量。
m = length(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 (“权力”)
正弦波相位
利用傅里叶变换,还可以提取原始信号的相位谱。例如,创建一个由频率为15hz和40hz的两个正弦波组成的信号。第一个正弦波是有相位的余弦波 ,二是有相位的余弦波 .对100hz的信号采样1秒。
Fs = 100;T = 0:1/fs:1-1/fs;X = cos(2* 15*t - /4) - sin(2* 40*t);
计算信号的傅里叶变换。把变换的幅度画成频率的函数。
Y = fft(x);Z = fftshift(y);Ly =长度(y);F = (-ly/2:ly/2-1)/ly*fs;茎(f, abs (z))包含(“频率(赫兹)”) ylabel (“y | |”网格)
计算变换的相位,去除小幅度的变换值。把相位画成频率的函数。
Tol = 1e-6;Z (abs(Z) < tol) = 0;=角(z);茎(f,θ/π)包含(“频率(赫兹)”) ylabel ("Phase / \pi"网格)
另请参阅
fft
|fftshift
|nextpow2
|传输线
|fft2
|fftn
|fftw