SDR# (SDRSharp)代码讲解 (五)

解调算法还有不少有趣的,比如DSB、LSB、USB解调器,这些以后会讲,读者也可以先把这些模块的代码对照Matlab RTL-SDR那本书看一下。另外,比如DownConverter和Oscillator也是一个经典的用软件方式实现以前硬件中实现的工作的例子。还有DCRemover在我们大多数的SDR中也很重要,Decimator在数字信号处理中也很常见。RdsDecoder是国外的在FM信号中携带文字信息的解调器。这些以后有时间再详细讲,但我认为接下来最值得讲的是SDRSharp中的FFT实现。

 

FFT算法可以说是数字信号处理里最重要的算法,全称是快速傅立叶变换。傅立叶变换的种类有很多,我们在通信领域会接触到的还有一些比如离散傅立叶变换、连续傅立叶变换,其实如果不考虑公式推导,只是做定性理解的话,它们的功能都差不多,都是把一个信号从时域变换到了频域,用来分析信号的频域特征的。

 

通过傅立叶变换,就能知道给定时间内的信号的各频率分量,比如如果是音频信号(声波信号)做傅立叶变换,就能知道是高音分量大还是低音分量大,用来判断这个声音是高音还是低音。iPhone应用商店里有不少这种APP,对着手机唱“哆唻 咪发 嗖拉 西”,手机经过FFT运算后可以得出主要分量对应的音阶,有些APP还能把频谱图显示出来,你可以看到除了主要分量外的其它谐波分量,你可以看看音调升高后,频谱图上的主要分量是否在向右侧(高频率方向)移动。

 

无线电信号是承载在电磁波上的,电磁波很多时候与声波有相似的特性,我们也利用FFT算法来分析它的各频率分量。FFT与最原始的傅立叶变换的区别就是可以在计算机上实现,且运算速度快。

 

SDRSharp里其实有两个地方都实现了FFT,一个是SDRSharp/Radio/Fourier.cs,另一个是SDRSharp/DNR/Fourier.cs。前者主要用于PanView中的频谱显示,后者用于解调出的音频信号的降噪处理。其实内容差不多,但是我更喜欢DNR目录里的FFT实现,因为这个目录下的FFT更接近比较原始的碟形算法,而且还实现了IFFT傅立叶逆变换,跟教科书里的相关公式比较接近。

 

这里推荐一个幻灯片,把FFT算法原理讲得很好。

https://wenku.baidu.com/view/5cacb2b8bd64783e09122b9a.html

你可能感兴趣的:(SDR#,(SDRSharp)代码讲解)