我是靠谱客的博主 笨笨电源,最近开发中收集的这篇文章主要介绍matlab/simulink中关于如何使得信号FFT和IFFT前后功率保持一致,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

快速傅里叶变换FFT其实是一种对离散傅里叶变换DFT的快速算法
为了便于公式推导和理解,本文从DFT的公式出发进行解释,在帕萨瓦尔定律的条件下,探究如何保证FFT/IFFT前后信号功率保持一致

目录

    • 模型假设
    • FFT前后功率保持一致
    • IFFT前后功率保持一致
    • 总结


模型假设

我们假设有一长度为1024的序列 x ( n ) x(n) x(n),作N=1024点的FFT后得到 X ( K ) X(K) X(K)
X ( k ) = D F T [ x ( n ) ] = ∑ n = 0 N − 1 x ( n ) e − j 2 π N n k ( 0 ≤ k ≤ N − 1 ) X(k) = DFT[x(n)]= sum_{n=0}^{N-1} x(n) e^{-jfrac{2pi }{N}nk} (0leq kleq N-1) X(k)=DFT[x(n)]=n=0N1x(n)ejN2πnk(0kN1)
x ( n ) = I D F T [ X ( k ) ] = 1 N ∑ k = 0 N − 1 X ( k ) e j 2 π N k n ( 0 ≤ n ≤ N − 1 ) x(n) = IDFT[X(k)]= frac{1}{N}sum_{k=0}^{N-1} X(k) e^{jfrac{2pi }{N}kn} (0leq nleq N-1) x(n)=IDFT[X(k)]=N1k=0N1X(k)ejN2πkn(0nN1)
可以简单记作 x ( n ) ↔ X ( k ) x(n) leftrightarrow X(k) x(n)X(k)
根据有限长序列帕萨瓦尔定律(具体推导可见该博客)
∑ n = 0 N − 1 ∣ x ( n ) ∣ 2 = 1 N ∑ k = 0 N − 1 ∣ X ( k ) ∣ 2 sum_{n=0}^{N-1} |x(n)|^2 = frac{1}{N}sum_{k=0}^{N-1} |X(k)|^2 n=0N1x(n)2=N1k=0N1X(k)2
可以得知,对于有限长序列,在一个频域带限内,频域上的功率谱之和与时域上信号的功率有一个N倍的关系。

简单来说,FFT之后的信号的功率比原始信号的功率大了N倍。

FFT前后功率保持一致

在这里插入图片描述
仿真结果如上图所示,0.01152/0.00001125=1024,FFT后的信号功率大了1024倍。为了使得FFT前后信号功率保持一致,需要对FFT后的数据乘以系数 1 N frac{1}{sqrt{N}} N 1。对一个复数乘以 1 N frac{1}{sqrt{N}} N 1的增益,则其功率变为原来的 1 N frac{1}{N} N1,保证了FFT前后信号功率一致。
在这里插入图片描述

IFFT前后功率保持一致

simulink的IFFT模块中,默认是不勾选“除以N”这个选项的。
也就是说IFFT的公式
x ( n ) = I D F T [ X ( k ) ] = 1 N ∑ k = 0 N − 1 X ( k ) e j 2 π N k n ( 0 ≤ n ≤ N − 1 ) x(n) = IDFT[X(k)]= frac{1}{N}sum_{k=0}^{N-1} X(k) e^{jfrac{2pi }{N}kn} (0leq nleq N-1) x(n)=IDFT[X(k)]=N1k=0N1X(k)ejN2πkn(0nN1)
在simulink中默认是
I D F T [ X ( k ) ] = ∑ k = 0 N − 1 X ( k ) e j 2 π N k n ( 0 ≤ n ≤ N − 1 ) IDFT[X(k)]=sum_{k=0}^{N-1} X(k) e^{jfrac{2pi }{N}kn} (0leq nleq N-1) IDFT[X(k)]=k=0N1X(k)ejN2πkn(0nN1)

在这里插入图片描述
我们是习惯于不改变模块默认值的,以便模型具有通用性。因此,我们通常在IFFT模块后面添加一个 1 N frac{1}{N} N1的增益模块
在这里插入图片描述

这样我们就得到了标准的 x ( n ) ↔ X ( k ) x(n) leftrightarrow X(k) x(n)X(k)
而之前我们说过,对于标准的离散傅里叶变换对,其频域功率是时域功率的N倍。因此我们需要在标准的IFFT之后,对于时域信号再添加一个 N sqrt{N} N 的增益模块。
1 N frac{1}{N} N1的增益模块和 N sqrt{N} N 的增益模块可以合并为 1 N frac{1}{sqrt{N}} N 1的增益模块。因此,我们在默认的IFFT模块后面也只需要添加一个 1 N frac{1}{sqrt{N}} N 1的增益模块即可使得IFFT前后的信号功率保持一致。
在这里插入图片描述

总结

不论是IFFT还是FFT,都需要在默认的IFFT/FFT模块后面添加一个 1 N frac{1}{sqrt{N}} N 1的增益模块,即可使得时域信号和频域信号的功率保持一致。

最后

以上就是笨笨电源为你收集整理的matlab/simulink中关于如何使得信号FFT和IFFT前后功率保持一致的全部内容,希望文章能够帮你解决matlab/simulink中关于如何使得信号FFT和IFFT前后功率保持一致所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部