使用两种MCU虽然会降低硬件成本,但开发成本会爆炸。当然更正确的办法是换成STM32F746(我这而有闲置开发板,可以借给楼主)或者H系列,价格依然十分低廉。宽带FM解调要有一些技巧,尽量采用整数运算...
确实,现在没有做转换,界面也很简陋。对于处理能力方面,如果还要丰富和完善功能,换成F7确实是个更好的选择。
使用SDR的时候,总是离不开电脑。但是如果去野外接收,带着电脑总是不方便。虽然有时还是离不开电脑,但是还是想用便携的接收机。所以就想着自己DIY一个。这次使用STM32F4来完成,并且测试一下STM32F4的能力,为大家DIY提供一个思路。
同时,使用SDRpaly时。发现MSI001简直是神器。MSI001使用零中频模式的话,带宽最低可以设置到200k。STM32F4完全可以采下来。这样就可以实现接收一些基础信号了,虽然200K限制很大。最后,搞到了MSI001的数据手册,在寒假的时候打了一块MSI001的板子,之后按照手册用单片机驱了一下,看看能不能出信号。但是不管怎么搞,都不出信号。因为我这里有一个SDRplay。用逻辑分析仪抓了一下,完全按照抓到的东西写进去然而发现,还是驱不起来。
但是,为了验证STM32F4是否能完成这项工作,我就先参考MCHF等机器的结构,制作一个短波的接收机。来测试STM32F4。
显示使用800X480的屏幕,绘制了简单的ui,效果如下。
接收视频XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
SDR.mp4 点击下载
加上瀑布图视频
VID_20190610_175533.mp4 点击下载
为了观察各个功能消耗的时间,使用空闲的IO输出状态,使用逻辑分析仪观察。
需要的时间如下
(1)两个ADC设置采样率为200K,经计算需要5.120ms,测试结果与计算相同。
(2)进行1024点复数FFT运算需要0.625ms。
(3)FFT结果显示是最耗费时间的,一般在4ms到7ms之间。
(4)瀑布图显示需要3.699ms。
(5)125阶fir滤波需要3.058ms。
(6)滤波加上抽取和AM解调需要3.712ms。
结论
经过测试,STM32F4的运算能力确实较强,开启FPU的情况下,FFT只需要0.625ms。在只显示FFT结果的模式下,FFT运算加上其他的一些处理程序需要2.8ms,但是再加上显示程序的4ms到7ms远超5.120ms。这个时候就要丢掉一些缓冲内容。在单独解调的模式下,需要3.712ms,小于5.120ms,单独解调是可行的。但是显示频谱同时解调就很糟糕了,所以不能显示时解调。同时,如果想要瀑布图的范围加宽,对内存的需求也上升了。
上面这些情况都是在200K的采样率下的结果。如果同MCHF一样,使用48K的采样率的话,时间就很充裕了。但是,就没办法使用msi001了。当然,程序还可以再优化一下,比如把FFT结果显示改为不填充的画点就可以节约一些时间,还有降低FIR滤波器的阶数来换取一点时间。或者减小屏幕分辨率,也会节约时间。解决时间问题和驱动问题,那么stm32F4+msi001的方案还是可行的。
FM解调没有尝试过,记得kcdemo的项目使用过F4来解调FM。
经过这次测试。在STM32等平台上搞这种事情,有种吃力不讨好的感觉,并且应用也很受限制。所以我想到还可以使用卡片计算机加SDRpaly的方案。比如使用全志芯片的核心板,加上SDRplay的电路和显示电路,上ubuntu。资源就要好好多。而且不用重复造轮子了。比如使用下面这种。有时间尝试一下是否能够实现。
一些参考资料
MCHF接收部分原理图
很多简易SDR所使用的方案,其实和MCHF相同,都是开关混频。
有人使用了STM32F429ADC直接采样,搞了个中波(没有覆盖完整)电台。可以参考一下
昨天捣鼓了一下,做了一些优化。我尝试了几下,最终把显示频谱的工作划分为了几个部分,在每个5.120ms内完成一部分工作,并且降低了滤波器的阶数。最终把显示和解调放在了一起。
同时运行的视频(可以看到,滤波器阶数降低后,就受到边上较强的台的影响了)
同时.mp4 点击下载
接下来的一段时间,我有时间继续捣鼓一下msi001,争取把它驱起来。