fft真是自以为很熟悉很了解,matlab张手就是fft(xn)
但变换之后到底得到的是啥?画图时每个点的横纵坐标又代表了啥?
以一段fft变换的代码为例:
t_s = 0.01; %采样周期
t_start = 0.5; %起始时间
t_end = 5; %结束时间
t = t_start : t_s : t_end;
y = 1.5*sin(2*pi*5*t)+3*sin(2*pi*20*t)+randn(1,length(t)); %生成信号
y_f = fft(y); %傅里叶变换
subplot(5,1,1);plot(t,y);title('original signal'); %绘制原始信号图
Druation = t_end -t_start; %计算采样时间
Sampling_points = Druation/t_s +1; %采样点数,fft后的点数就是这个数
f_s = 1/t_s; %采样频率
f_x = 0:f_s/(Sampling_points -1):f_s;
subplot(5,1,2);plot(f_x,abs(y_f));title('fft transform');
得到这样的结果
以上代码,很顺手噢,但是
fft变换之后的横坐标为什么要那样设置?
频率分辨率是什么?
首先,原始信号y是一组离散的数据点没问题吧,这些数据点,横轴为时间信息,纵轴为信号的幅值。
那fft做了什么?
一言以蔽之:把原来的一组点变成另外一组点。
变换之后的点肯定能反映出什么东西才会这样操作。
那变换之后的点反应出了什么了?
首先,变换之后点的横坐标为[0,fs),假设一共采N个点,那么变换之后的一组点(也是N个)的横坐标为:0,fs1/N,fs2/N,fs3/N,fs4/N······fs*(N-1)/N
也就是说,变换之后每个点的横坐标都是以采样率/采样点数(fs/N)为间隔变化的,也即频率分辨率为fs/N
说完了横坐标,那纵坐标是啥?反应了啥?
每个横坐标fsk/N对应的纵坐标是一个复数,这个复数的模反应了原始信号频率为fsk/N的子信号的幅值A的N/2倍(频率为0处的幅值为直流量的N倍),复数的相位就反应了原始信号频率为fs*k/N的子信号的相位。
现在,对fft有直观认识了吗?
参考文章