0 傅里叶分析和滤波
资料来源:https://ww2.mathworks.cn/help/matlab/fourier-analysis-and-filtering.html?s_tid=CRUX_lftnav
变换和滤波器是用于处理和分析离散数据的工具,常用在信号处理应用和计算数学中。当数据表示为时间或空间的函数时,傅里叶变换会将数据分解为频率分量。
图片来源:https://ww2.mathworks.cn/help/matlab/fourier-analysis-and-filtering.html?s_tid=CRUX_lftnav
1 快速傅里叶变换简单介绍
(1)傅里叶变换
傅里叶分析将信号从其原始域(通常是时间或空间)转换为频域的表示形式,反之亦然。
傅里叶变换物理意义:任何连续测量的时序或信号,都可以表示为不同频率的正弦波信号的无限叠加。傅立叶变换算法利用直接测量到的原始信号,以累加方式来计算该信号中不同正弦波信号的频率、振幅和相位。
傅立叶变换将原来难以处理的时域信号转换成了易于分析的频域信号(信号的频谱),可以利用一些工具对这些频域信号进行处理、加工。最后还可以利用傅立叶反变换将这些频域信号转换成时域信号。
数学角度:傅里叶变换是一种特殊的积分变换。它能将满足一定条件的某个函数表示成正弦基函数的线性组合或者积分。
为什么要进行傅里叶变换:https://zhuanlan.zhihu.com/p/37057915
简单理解是将时域的信号转换到频域的正弦信号,更有利于处理信号。
(2)快速傅里叶变换
快速傅氏变换(FFT)是离散傅氏变换(DFT)的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。
快速傅里叶变换是离散傅里叶变换的一种快速实现方式,快速傅里叶变换可用于多项式乘法、大数乘法、卷积等操作。
参考资料:https://blog.csdn.net/dan1900/article/details/39694075
2 快速傅里叶变换实现方法MATLAB
参考资料:https://blog.csdn.net/qq_34840129/article/details/85339999
matlab fft函数介绍:https://ww2.mathworks.cn/help/matlab/ref/fft.html
实例:将高斯脉冲从时域转换成频域。
第一步:定义信号参数和高斯脉冲 X
Fs = 100; % Sampling frequency
t = -0.5:1/Fs:0.5; % Time vector
L = length(t); % Signal length
X = 1/(4*sqrt(2*pi*0.01))*(exp(-t.^2/(2*0.01)));
第二步:在时域中绘制脉冲
plot(t,X)
title('Gaussian Pulse in Time Domain')
xlabel('Time (t)')
ylabel('X(t)')
显示结果:
第三步:zero-padding
要使用 fft 将信号转换为频域,首先从原始信号长度确定是下一个 2 次幂的新输入长度。这将用尾随零填充信号 X 以改善 fft 的性能。
n = 2^nextpow2(L);
Y = fft(X,n);
f = Fs*(0:(n/2))/n;
P = abs(Y/n).^2;
plot(f,P(1:n/2+1))
title('Gaussian Pulse in Frequency Domain')
xlabel('Frequency (f)')
ylabel('|P(f)|^2')
3 快速傅里叶逆变换IFFT
参考资料:https://ww2.mathworks.cn/help/matlab/ref/ifft.html
快速傅里叶逆变换IFFT可以实现时空采样数据与频率采样数据间的傅里叶变换,即频率采样数据转换成时空采样数据。
数学角度:向量的逆变换
X = [1 2 3 4 5];
Y = fft(X)
快速傅里叶逆变换IFFT:ifft(Y)