离散傅里叶变换
离散傅里叶变换(DFT)是傅里叶变换在时域和频域上都呈现离散的形式,将时域信号的采样变换为在频域的采样。在实际应用中通常采用快速傅里叶变换(FFT)以高效计算DFT。
DFT的定义为:
其中N为DFT的点数,点数越大频率分辨率越高,k=0,1,2,…,N-1。
离散傅里叶变换可以看做是离散时域信号与不同频率的离散正弦信号进行相关运算得到相应的频率对应的幅值(复数)。
MATLAB程序
clc
clear
close all
N=2048;% ADC采样点数
Fs=1e6;% ADC采样率
t=(0:N-1)/Fs;% 采样时间序列
F1=60e3;% 信号频率1
F2=80e3;% 信号频率2
signal = cos(2*pi*F1 * t) + cos(2*pi*F2 * t);
figure;
plot(t,signal);
axis([0 inf -2.2 2.2]);
xlabel('时间/s');
title('时域信号');
% FFT
NN=2048;% NN点DFT
XN=fft(signal,NN)/NN;% 计算signal的NN点快速傅里叶变换
f0=Fs/NN; % 频率分辨率
f=(0:NN-1)*f0; % 频率序列
fk=(0:NN-1); % 谱线序列
A=abs(XN); % 幅值序列
Phase=atan(-real(XN)./imag(XN))/pi*180; % 相位序列
figure;
subplot(2,1,1);
plot(f(1:NN/2),A(1:NN/2));
xlabel('频率/Hz');ylabel('幅度');
% axis([50e3 90e3 0 inf]);
title('FFT幅频谱');
subplot(2,1,2);
plot(f(1:NN/2),Phase(1:NN/2));
xlabel('频率/Hz');ylabel('相位/°');
title('FFT相频谱');
figure;
subplot(2,1,1);
plot(f(1:NN/2),real(XN(1:NN/2)));
xlabel('频率/Hz');
title('频谱实部');
subplot(2,1,2);
plot(f(1:NN/2),imag(XN(1:NN/2)));
xlabel('频率/Hz');
title('频谱虚部');