按照公式,可以计算出直流分量为:512/N=512/256=2;50Hz信号的幅度为:384/(N/2)=384/(256/2)=3;75Hz信号的幅度为192/(N/2)=192/(256/2)=1.5 。可见,从频谱分析出来的幅度是正确的 。然后再来计算相位信息 。直流信号没有相位可言,不用管它 。先计算50Hz信号的相位,atan2(-192, 332.55)=-0.5236,结果是弧度,换算为角度就是180*(-0.5236)/pi=-30.0001 。再计算75Hz信号的相位,atan2(192, 3.4315E-12)=1.5708弧度,换算成角度180*1.5708/pi=90.0002 。可见,相位也是对的 。
根据FFT结果以及上面的分析计算,我们就可以写出信号的表达式了,它就是我们开始提供的信号 。
总结:假设采样频率为Fs,采样点数为N,做FFT之后,某一点n(n从1开始)表示的频率为:Fn=(n-1)*Fs/N;该点的模值除以N/2就是对应该频率下的信号的幅度(对于直流信号是除以N);该点的相位即是对应该频率下的信号的相位 。相位的计算可用函数atan2(b,a)计算 。atan2(b,a)是求坐标为(a,b)点的角度值,范围从-pi到pi 。要精确到xHz,则需要采样长度为1/x秒的信号,并做FFT 。要提高频率分辨率,就需要增加采样点数,这在一些实际的应用中是不现实的,需要在较短的时间内完成分析 。解决这个问题的方法有频率细分法,比较简单的方法是采样比较短时间的信号,然后在后面补充一定数量的0,使其长度达到需要的点数,再做FFT,这在一定程度上能够提高频率分辨力 。
具体的频率细分法可参考相关文献 。
附录:本测试数据使用的matlab程序
close all; %先关闭所有图片
Adc=2;%直流分量幅度
A1=3;%频率F1信号的幅度
A2=1.5; %频率F2信号的幅度
F1=50;%信号1频率(Hz)
F2=75;%信号2频率(Hz)
Fs=256; %采样频率(Hz)
P1=-30; %信号1相位(度)
P2=90;%信号相位(度)
N=256;%采样点数
t=[0:1/Fs:N/Fs]; %采样时刻
%信号
S=Adc+A1*cos(2*pi*F1*t+pi*P1/180)+A2*cos(2*pi*F2*t+pi*P2/180);
%显示原始信号
plot(S);
title('原始信号');
figure;
Y = fft(S,N); %做FFT变换
Ayy = (abs(Y)); %取模
plot(Ayy(1:N)); %显示原始的FFT模值结果
title('FFT 模值');
figure;
【fft的物理意义 fft】Ayy=Ayy/(N/2);%换算成实际的幅度
Ayy(1)=Ayy(1)/2;
F=([1:N]-1)*Fs/N; %换算成实际的频率值
plot(F(1:N/2),Ayy(1:N/2));%显示换算后的FFT模值结果
title('幅度-频率曲线图');
figure;
Pyy=[1:N/2];
for i="1:N/2"
Pyy(i)=phase(Y(i)); %计算相位
Pyy(i)=Pyy(i)*180/pi; %换算为角度
end;
plot(F(1:N/2),Pyy(1:N/2));%显示相位图
title('相位-频率曲线图');
文章插图
FFT原理的FFT基本原理FFT是一种DFT的高效算法,称为快速傅立叶变换(fast Fourier transform) 。FFT算法可分为按时间抽取算法和按频率抽取算法,先简要介绍FFT的基本原理 。从DFT运算开始,说明FFT的基本原理 。
DFT的运算为:
式中
由这种方法计算DFT对于X(K)的每个K值,需要进行4N次实数相乘和(4N-2)次相加,对于N个k值,共需N*N乘和N(4N-2)次实数相加 。改进DFT算法,减小它的运算量,利用DFT中
的周期性和对称性,使整个DFT的计算变成一系列迭代运算,可大幅度提高运算过程和运算量,这就是FFT的基本思想 。
FFT基本上可分为两类,时间抽取法和频率抽取法,而一般的时间抽取法和频率抽取法只能处理长度N=2^M的情况,另外还有组合数基四FFT来处理一般长度的FFT 设N点序列x(n),,将x(n)按奇偶分组,公式如下图
改写为:
一个N点DFT分解为两个 N/2点的DFT,继续分解,迭代下去,其运算量约为
其算法有如下规律
两个4点组成的8点DFT
四个2点组成的8点DFT
按时间抽取的8点DFT
原位计算
当数据输入到存储器中以后,每一级运算的结果仍然储存在同一组存储器中,直到最后输出,中间无需其它存储器
序数重排
对按时间抽取FFT的原位运算结构,当运算完毕时,这种结构存储单元A(1)、A(2),…,A(8)中正好顺序存放着X(0),X(1),X(2),…,X(7),因此可直接按顺序输出,但这种原位运算的输入x(n)却不能按这种自然顺序存入存储单元中,而是按X(0),X(4),X(2),X(6),…,X(7)的顺序存入存储单元,这种顺序看起来相当杂乱,然而它也是有规律的 。当用二进制表示这个顺序时,它正好是“码位倒置”的顺序 。
蝶形类型随迭代次数成倍增加
每次迭代的蝶形类型比上一次蝶代增加一倍,数据点间隔也增大一倍 频率抽取2FFT算法是按频率进行抽取的算法 。
秒懂生活扩展阅读
- 短途飞机有什么吃的
- 打钩的是什么牌子
- 公司买房可以抵税吗
- 槲寄生的花语是什么
- 土豆里的淀粉有什么作用
- 半衰期计算公式
- 一字千金红包的字怎么更换?怎么查看自己收到的字?
- 淘宝推广软件的效果明显吗?
- 淘宝客类目佣金如何删除?删除的方法是什么?
- 说说淘宝宝贝排名的机制及影响要素