傅里叶原理表明:任何连续测量的时序或信号,都可以表示为不同频率的正弦波或余弦信号的无限叠加。
1.FFT的理论就会告诉你可以通过傅里叶变化获知这个频率。
但是这个信号飘荡在空中,你需要先通过采样得到一个离散信号:
(i=1,2,...N)
(fs是采样频率,香农和奈奎斯特告诉我们,需要fs>2f)。
2.得到离散信号后如何计算f,DFT就会告诉你怎么办;
3.你嫌DFT太慢了怎么办,FFT就粉墨登场了;
一段matlab程序:
%fs:采样频率
fs=1;
%频率分辨率为fs/N=0.01Hz,下面信号的频率0.05是0.01的整数倍,即为整周期采样
N=100;
% n=0---99
n=0:N-1;
t=n/fs;
%设定余弦信号频率
f0=0.05;
%生成正弦信号 %FFT是余弦类变换,最后得到的初始相位是余弦信号的初时相位,在这里为0。如果信号
x=cos(2*pi*f0*t+pi/3);
%调出第一张图
%为x=sin(2*pi*f0*t);则初时相位应该是-90度而非0度。
figure(1);
%表示subplot(m,n,p)有 m行 n列 第几个图
subplot(211);
%作余弦信号的时域波形
plot(t,x);
xlabel('t');
ylabel('y');
title('余弦信号 时域波形');
grid;
%进行FFT变换并做频谱图
%进行fft变换
y=fft(x,N);
%求幅值 乘上后面的2/N得到正确幅值
mag=abs(y)*2/N;
%进行对应的频率转换
f=(0:length(y)-1)'*fs/length(y);
subplot(212);
;%做频谱图
plot(f(1:N/2),mag(1:N/2))
xlabel('频率(Hz)');
ylabel('幅值');
title('余弦信号 幅频谱图');
grid;
%求信号初时相位。频率坐标f为[0 0.01 0.02 0.03 0.04 0.05 0.06 ...],所以谱线y中第6根谱线和信号x对应。
angle(y(6))*180/pi;
ans = 60.0000