整理一下需要注意的FFT知识点,主要来源:https://blog.csdn.net/czyt1988/article/details/84995295
FFT公式
Y = fft(signal,N)
其中signal为时域信号,N为FFT长度。当N大于signal长度,则要补零到N个点,当N小于signal长度,就截取前N个点。注意,N一般设置为2的幂次方,以便改善FFT性能。可采用nextpow2函数求N的值
N = 2^nextpow2(length(signal));
FFT的结果Y是一个N个值的复数,满足以下规律:
- 第0和N/2的两个值虚数部分为0,是对称的直流分量。
- 下标为i和N-i的两个复数是共轭的,所以有用的信息储存在0到N/2+1个值中。
频谱分辨率
其中fs是采样率,N是FFT点数。N个点中每个点的分辨率均为。则N个点对应的频段向量
。
直流分量
直流信号代表与基准0的偏移量。
FFT后的复数模-幅度
- 第一个点(i=0)和最后一个点的模(i=N/2)除以N
- 其余点的模除以N/2
原因
这是因为傅里叶级数对应时域幅值,其中已经包含了1/N项,而fourier变换中没有该系数, 所以,进行完FFT变换后需除以N/2才能与时域对应上。(这里还不是很清楚)
全世界绝大部分的FFT算法计算出来后都需要进行幅度的转换的,为何要这样设计,因为傅里叶变换在很多场合是不需要求幅度的,而只需要分贝就可以,因此,如果傅里叶变换做了乘以2除以n的处理反而在许多场合是多余的,就像求距离,好多情况只需要就可以了,并不需要
幅值根据需求有不同需求,具体见下节
幅度谱,幅值谱?Magnitude,Amplitude?
-
幅值 Amplitude
幅值就是对于波形的幅值来说的,上面一节说的转换就是把fft计算的结果转化为幅值,英文叫Amplitude
在工程中还经常看到分贝纵坐标的频谱,带分贝的频谱,使用分贝数的好处是,用较小的坐标可以描述很宽的范围。工程上会取20log(Amplitude)转变为分贝。
幅值第n(其中n!=1)点处的fft计算的结果是复数a+bi,模值A=sqrt(a2+b2),那么实际信号的幅值是2*A/N;
当n=0时(0Hz),也就是第一个点就是直流分量,它的模值就是直流分量的N倍,实际信号的幅值是A/N,注意N是采样点而不是进行FFT的点数 -
幅度 Magnitude
若对fft的结果不做任何处理,直接取模,那么这个值叫幅度,英文上叫Magnitude,
于是对fft计算的复数结果,其实数和虚数对应如下:
名称 | 计算公式 |
---|---|
幅度(Magnitude) | |
幅值(Amplitude) | |
dB |
根据这个表,就可以很明白FFT之后需要进行什么样的处理了。
其实还有:
-
截断加窗问题
-
加窗频谱幅值修正问题
最后
以上就是典雅鸡翅最近收集整理的关于matlab中值得注意的FFT知识点幅度谱,幅值谱?Magnitude,Amplitude?的全部内容,更多相关matlab中值得注意内容请搜索靠谱客的其他文章。
发表评论 取消回复