信号的相关性
在二维或三维的欧几里得空间中,两个向量正交即它们成90°角。
数学定义中,正交的矢量的内积为零:
将矢量空间正交分解的概念可推广到信号空间,即:
但是正交有什么用呢?
它可以用于检测信号中是否含有某个频率的信号波:把一个待检测信号波乘以另一个信号波,生成个新的信号波,再把这个新的信号波所有的点进行相加,从相加的结果就可以判断出这两个信号的相似程度,比如下图:
上图中先看左侧的example 1,上图是待检测信号,中图为采样冲激信号,下图为两者的乘积,将下图的各点相加,很显然值是正的,这就说明a图含中图频率的正弦波,或者说上图、中图两个信号是相关的。
再看右侧的example 2,上图、中图相乘后,下图中各点相加结果约等于0了,说明上图不含有中图的正弦波。
一次计算后,我们实现了对一个频率的识别,通过改变中图中信号的频率,就可以逐个识别出上图的原始信号中是否包含中图对应的频率成分,这就是dft也就是离散傅里叶变换最底层的原理。
聪明的同学可能已经想到了,为什么中图中要用sin信号昵,其他函数行不行啊?这就引出了正交函数集合的概念,在信号空间找到若干个相互正交的信号作为基本信号(称为正交函数集),使得信号空间中任意信号均可表示成它们的线性组合。
可以证明:
就是一个完备的正交函数集,利用上述正交函数集合,现在f(t)就是:
dft就是将待检测信号和很多不同频率的正弦波和余弦波相乘,也就是进行了信号相关性检测,从而可以计算出信号中含有的正弦波的幅度,若含有此频率的正弦波,那么幅值不为0,若不含有此正弦波,那么幅值为0,这就是傅里叶变换的由来。
DFT的代码实现
先给出DFT的公式:
其中X(k)表示DFT变换后的数据,x(n)为采样的模拟信号,公式中的x(n)为复信号,但是在实际当中,x(n)都是实信号,即虚部为0,利用我们前面介绍的欧拉公式,可以展开为:
从这个公式可以看出,变换后的数据就是原信号对cos和sin的相关操作,即进行相乘求和(连续信号即为积分),再来看看DFT的c语言代码:
其中Input_Squence保存采样数据,N为采样点数,Sum_Point.real和Sum_Point.imag 分别对应复数的实部和虚部,真个DFT是不是一目了然了
呵呵,会者不难难者不会,高大上的DFT也不过如此。