傅立叶变换前后的能量守恒问题
在通信系统的仿真中,我们经常需要根据给定的信噪比(SNR: Signal Noise Ratio),为传输的数据加上"加性高斯白噪声(Additive Guassian White Noise)"。但是,传输前的数据,很多时候考虑的是频域的相位,给定的待传输的数据需要经过傅立叶反变换到时域,在时域增加噪声,然后送给接收模块做性能评估。
(录制的视频:https://www.bilibili.com/video/BV1kP411V7hq/)
问题在于:无论是 Matlab 上,还是 Python 的 numpy 库中,快速傅立叶变换和反变换,在变换的前后,都没有保持能量守恒,这为定量地增加噪声制造了一点小困难。本文试图通过简单的 QPSK 为例子,频域分成 64 个频点,经过 ifft (快速傅立叶反变换)变到时域,然后定量地分析能量的变化情况.
频域有 64 个频点,我们在第二个频点上发送一个信号,幅度为 1,相位为 ,这个信号可以表示为
. 按照直观的理解,我们发送的信号是:
可以展开为:
可以很容易地看到,实部的最大值是 1. 那么上面这个信号的功率,就是其模的平方,可以很容易看到,模的平方就是 1, 则其功率是 1.
我们来看一下用 ifft 之后的结果,64 个频点上只有第二个频点上有信号,其它频点上没有信
号,即是 0:
总计 64 个.
用下面的 python 代码来做 ifft:
画出来的图形如下:

可以看到,幅度的最大值不是 1,程序中打印出来的最大值为 0.015625 ! 为什么呢?我们来观察一下 ifft 的公式:
其中 $N$ 是傅立叶反变换的长度。这个例子中,N=64.
在这个例子中,由于只有 ,其它都是 0,上面公式中的求和项,就退化为之后 k=1参与了运算:
公式 2 与 公式 1 比较,则可以看到,公式二 多了一个 ,从图中也可以看到,最高幅值是
.
讨论到这里,似乎问题已经解决了,但是,仔细看看, ifft 变换后幅度变为原来设想的 64 分之一,那能量在转换前和转换后,是否保持一致呢?我们需要的是保持一致。
我们先从频域看,64 个频域信号的总能量,是每个频率点上能量的和,即:,这个能量是在一个 fft 对应的时间上的,即 64 个采样点内的。则换算成功率,在频域看到的功率为 :
我们只分析一个频点,k=1,在频域看,其能量为 1,这是 k=1这个频率在一个fft对应时间内的能量。
现在看matlab 和 python numpy 库中 ifft 的变换公式:
那么,k=1 对应的波形是:
那么,我们在 64个样点内计算一下能量:
可以看到,频域的能量是 1,而时域的能量是 ,能量相差了 64 倍!
所以, ifft 变换,会导致能量降为转换前的 64 分之一。同理,可以证明, fft 变换,会导致能量放大为变换前的64倍。
如果我们把傅立叶变换对的公式,稍微改变一下放大或者缩小的倍数,则可以保证转换前后的能量保持一致,即能量守恒:
FFT 变换:
IFFT 变换
使用上面修改过的公式,则可以保证能量前后保持一致。
有时候,我们不仅关心能量保持一致,还要关心这个信号的能量大小,例如我们为了加入一定信噪比 SNR 的高斯白噪声,需要知道信号的功率大小。
注意:后面讨论的能量大小,功率大小,都是基于修改后的傅立叶变换的公式,即保证变换前后能量保持一致的。
在频域看,一个频率点的信号,假设其能量为 1 (一般情况下,例如 QPSK 调制,都是保持能量为 1 的),因为傅立叶反变换后,对应到 N 个采样点的时间,因此,其功率为: .
在时域看,其对应的波形为 :
其能量为(注意:为了与频域保持一致,要注意求和的时间范围是 N 个采样点):
其功率则为 .
那么,如果在频域上,只有一个频率点上有信号,且频域 等于 1,则信号的功率就是
, 则可以根据 SNR 的公式,计算出来需要的噪声的功率。如果 N 个频点上,都有信号,且频域
等于 1,则其功率就是 1.
总结一下:本文的核心,是提醒注意用标准库中的 FFT/IFFT 函数时,存在能量在变换前后不守恒的问题。
延伸阅读:
把傅立叶变换和反变换,看成是线性空间的向量,在坐标轴上的坐标,坐标轴就是线性空间的基,这些基的要求,除了要求任何两个不相同的基之间是正交的,还需要每个基向量的长度为1.
傅立叶变换中的 构成一个合格的基向量,而
不是一个基向量,因为其长度是
.

我们来看一下傅里叶变换中基里面的各个向量(按照正确的方式来列举的):
第一个向量:
k=0
第二个向量:
k=1
第三个向量:
k=2
。。。。
第 k+1 个向量:
k=k
.....
第 N 个向量:
k=N-1
每个基的模长都为 1:
如果用 matlab 中 傅立叶变换的公式,一个向量是:
则其模长为 N:
这就不是单位向量了。
======= 感谢阅读到此处:
塑料垃圾危害多,至少不能让塑料垃圾流进河
