在 Matlab 中实现一个简单的傅里叶变换
傅立叶变换可能是数字信号处理的第一课,它的应用无处不在,它是分析数据(所有扇区)或信号的强大工具。Matlab 有一套强大的傅里叶变换工具箱。在这个例子中,我们将使用傅立叶变换来分析基本的正弦波信号,并使用 FFT 生成有时称为周期图的信息:
%Signal Generation
A1=10; % Amplitude 1
A2=10; % Amplitude 2
w1=2*pi*0.2; % Angular frequency 1
w2=2*pi*0.225; % Angular frequency 2
Ts=1; % Sampling time
N=64; % Number of process samples to be generated
K=5; % Number of independent process realizations
sgm=1; % Standard deviation of the noise
n=repmat([0:N-1].',1,K); % Generate resolution
phi1=repmat(rand(1,K)*2*pi,N,1); % Random phase matrix 1
phi2=repmat(rand(1,K)*2*pi,N,1); % Random phase matrix 2
x=A1*sin(w1*n*Ts+phi1)+A2*sin(w2*n*Ts+phi2)+sgm*randn(N,K); % Resulting Signal
NFFT=256; % FFT length
F=fft(x,NFFT); % Fast Fourier Transform Result
Z=1/N*abs(F).^2; % Convert FFT result into a Periodogram
注意,离散傅立叶变换是通过 Matlab 中的快速傅里叶变换(fft)实现的,两者都将产生相同的结果,但 FFT 是 DFT 的快速实现。
figure
w=linspace(0,2,NFFT);
plot(w,10*log10(Z)),grid;
xlabel('w [\pi rad/s]')
ylabel('Z(f) [dB]')
title('Frequency Range: [ 0 , \omega_s ]')