尝试了一下使用STM32实现SDR

        使用SDR的时候,总是离不开电脑。但是如果去野外接收,带着电脑总是不方便。虽然有时还是离不开电脑,但是还是想用便携的接收机。所以就想着自己DIY一个。这次使用STM32F4来完成,并且测试一下STM32F4的能力,为大家DIY提供一个思路。

同时,使用SDRpaly时。发现MSI001简直是神器。MSI001使用零中频模式的话,带宽最低可以设置到200k。STM32F4完全可以采下来。这样就可以实现接收一些基础信号了,虽然200K限制很大。最后,搞到了MSI001的数据手册,在寒假的时候打了一块MSI001的板子,之后按照手册用单片机驱了一下,看看能不能出信号。但是不管怎么搞,都不出信号。因为我这里有一个SDRplay。用逻辑分析仪抓了一下,完全按照抓到的东西写进去然而发现,还是驱不起来。

       但是,为了验证STM32F4是否能完成这项工作,我就先参考MCHF等机器的结构,制作一个短波的接收机。来测试STM32F4。

显示使用800X480的屏幕,绘制了简单的ui,效果如下。

 

IMG_20190415_144425.jpg


        接收视频https://www.bilibili.com/video/av49427390

        


        加上瀑布图视频

        



        为了观察各个功能消耗的时间,使用空闲的IO输出状态,使用逻辑分析仪观察。

 

dsp2.png


        需要的时间如下

        (1)两个ADC设置采样率为200K,经计算需要5.120ms,测试结果与计算相同。

 

sample.png


         (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。资源就要好好多。而且不用重复造轮子了。比如使用下面这种。有时间尝试一下是否能够实现。

TB2PIERp9tYBeNjSspkXXbU8VXa_!!654742580.png

        一些参考资料

        MCHF接收部分原理图

attachment icon mcHFx_logic_a_5_Oct_2017.pdf 494.91KB PDF 259次下载 预览

        很多简易SDR所使用的方案,其实和MCHF相同,都是开关混频。

index.gif

        有人使用了STM32F429ADC直接采样,搞了个中波(没有覆盖完整)电台。可以参考一下

attachment icon ARM_Radio.pdf 2.26MB PDF 413次下载 预览


[修改于 2 年前 - 2019-07-10 22:03:48]

来自:电子与无线电 / 无线电通信
 
Robot_V1
1年8个月前
1楼

或许可以用2块单片机来解决时间紧张的问题。比如一块负责A/D转换和运算,另一块专用于刷显示、读按键等操作。为降低成本,第二块可以用更廉价的51等(毕竟对运算速度要求不高)。

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
虎哥
1年8个月前 修改于 1年8个月前
2楼
引用Robot_V1发表于1楼的内容
或许可以用2块单片机来解决时间紧张的问题。比如一块负责A/D转换和运算,另一块专用于刷显示、读按键等...

使用两种MCU虽然会降低硬件成本,但开发成本会爆炸。当然更正确的办法是换成STM32F746(我这而有闲置开发板,可以借给楼主)或者H系列,价格依然十分低廉。

宽带FM解调要有一些技巧,尽量采用整数运算,降低精度。窄带FM解调,STM32能够轻松跑。

另外,似乎没有做线性/对数转换,这还将消耗不少的资源。目前显示看起来十分流畅,不错。

如果希望做一个轻量级的作品,并且做到名片盒大小(含电池),个人认为用单板机+ubuntu不是一个好想法,除非是为了学习嵌入式开发。

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
smith
1年8个月前
3楼

我之前有试过全志A64 + msi2500 + msi001 的方案,msi2500有linux驱动的,USB插入后可以生成一个内核节点读取数据,此外也可以通过 https://github.com/f4exb/libmirisdr-4 这个库来读取到数据,不过后面比较懒就没有深入研究下去了,另外msi001应该是需要提供refclk的,楼主可以检查一下是否有设置正确,我也想抓一下通信协议,不过主要想试试获取msi2500设置下来的VFO频率

回复
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
永恒之桔作者
1年8个月前
4楼
引用虎哥发表于2楼的内容
使用两种MCU虽然会降低硬件成本,但开发成本会爆炸。当然更正确的办法是换成STM32F746(我这而...

确实,现在没有做转换,界面也很简陋。对于处理能力方面,如果还要丰富和完善功能,换成F7确实是个更好的选择。

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
永恒之桔作者
1年8个月前
5楼
引用smith发表于3楼的内容
我之前有试过全志A64 + msi2500 + msi001 的方案,msi2500有linux驱动...

好的,这段时间再看一下是哪里出了问题。请问,refclk是指20脚的REF_IN吗?我这个脚使用有源晶振给的信号,是否可行呢?

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
smith
1年8个月前
6楼
引用永恒之桔发表于5楼的内容
好的,这段时间再看一下是哪里出了问题。请问,refclk是指20脚的REF_IN吗?我这个脚使用有源...

那个频率应该不是20M的,需要用示波器测一下,我也忘了以前测试是多少,可以再测试一下

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
永恒之桔作者
1年8个月前
7楼
引用smith发表于6楼的内容
那个频率应该不是20M的,需要用示波器测一下,我也忘了以前测试是多少,可以再测试一下

我根据数据手册给的24.576M的。只不过我先测一下SDRpaly,看一下是多少。

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
极速外卖
1年8个月前
8楼

俺觉得屏幕上FFT更新频率不需要那么高,可以降低一点速度和分辨率,边缘平滑一下会更好


话说之前去LZ宿舍是不是给我演示了个音频FFT??

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
radio
1年8个月前 修改于 1年8个月前
9楼

其实这个频谱显示不一定非得要完全覆盖的

例如可以每采样10240个点然后只抽前1024个点来FFT然后显示刷新

只要不是看窄脉冲之类的没什么问题的

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
永恒之桔作者
1年8个月前
10楼
引用极速外卖发表于8楼的内容
俺觉得屏幕上FFT更新频率不需要那么高,可以降低一点速度和分辨率,边缘平滑一下会更好话说之前去LZ宿...

是的,当时用的是F1,搞了个音频的。😆

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
永恒之桔作者
1年8个月前
11楼

谢谢各位的建议😀。接下来我再优化一下,尤其是频谱显示的部分。修改显示算法加上降低刷新率,估计会节约不少时间出来。

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
永恒之桔作者
1年7个月前
12楼

昨天捣鼓了一下,做了一些优化。我尝试了几下,最终把显示频谱的工作划分为了几个部分,在每个5.120ms内完成一部分工作,并且降低了滤波器的阶数。最终把显示和解调放在了一起。

同时运行的视频(可以看到,滤波器阶数降低后,就受到边上较强的台的影响了)


接下来的一段时间,我有时间继续捣鼓一下msi001,争取把它驱起来。😗

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
fjf02386104
1年7个月前
13楼
引用永恒之桔发表于12楼的内容
昨天捣鼓了一下,做了一些优化。我尝试了几下,最终把显示频谱的工作划分为了几个部分,在每个5.120m...

期待楼主的进一步进展😀

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
虎哥
1年7个月前
14楼
引用永恒之桔发表于12楼的内容
昨天捣鼓了一下,做了一些优化。我尝试了几下,最终把显示频谱的工作划分为了几个部分,在每个5.120m...

FIR可以多用几个,每个阶数少点。解调出来的音频如果不是算法有问题的话,低通一下,感觉听到超声波了。

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
永恒之桔作者
1年7个月前
15楼
引用虎哥发表于14楼的内容
FIR可以多用几个,每个阶数少点。解调出来的音频如果不是算法有问题的话,低通一下,感觉听到超声波了。

好的,我去试一下多个FIR。😁

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
dddggg412
1年7个月前
16楼

双核高频单片机感觉合适

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
dddggg412
1年7个月前
17楼

Jlink10那个片子就是个成熟的双核

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
dddggg412
1年7个月前
18楼
引用永恒之桔发表于7楼的内容
我根据数据手册给的24.576M的。只不过我先测一下SDRpaly,看一下是多少。

从2500框图看  应该是24/2=12

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
永恒之桔作者
1年7个月前
19楼
引用dddggg412发表于18楼的内容
从2500框图看  应该是24/2=12

今天我测了一下SDRpaly,给msi001的是24MHz。

回复
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
极速外卖
1年7个月前 修改于 1年7个月前
20楼

对于IQ调制解调电路验证,先在这里贴个比较方便的声卡IQ软件


Main1.gif

http://www.dxatlas.com/vshaper/





K7C_Pileup.jpg

http://www.dxatlas.com/Rocky/Advanced.asp



另外,通过和LZ聊天,得知其解调的原理框图和ARM_Radio的差别好像比较大,如果方便最好画个图贴上来


回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
永恒之桔作者
1年7个月前
21楼
引用极速外卖发表于20楼的内容
对于IQ调制解调电路验证,先在这里贴个比较方便的声卡IQ软件http://www.dxatlas.c...

嗯,好多用Softrock的人就用的rocky。论坛好像有人搞过。(就是那个开关混频的电路图)。

处理过程我之前用gnuradio搞过一下,如下图。

解调.PNG


回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
不沉的Sam
1年7个月前
22楼

咋不用树莓派嘞,

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
表慌张
1年6个月前
23楼

还有ebaz4205矿板呀,xilinx zynq 7010 这样是不是更好实现?

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
唐老鸭
1年6个月前
24楼

如果考虑成本的话没必要用那么贵的开发板,而且也没必要跑ubuntu这么臃肿的系统。

我建议可以选一个廉价的单核arm核心板+RTOS的方案。比如下面这种核心板只需30块钱,单核ARM-A7,有专门的LCD接口接液晶屏。

1768589737.jpg


回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
kc-82327
1年6个月前
25楼

请问一下你的瀑布图是怎么画的。我用循环缓存画不出来

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
smith
1年6个月前
26楼
引用唐老鸭发表于24楼的内容
如果考虑成本的话没必要用那么贵的开发板,而且也没必要跑ubuntu这么臃肿的系统。我建议可以选一个廉...

这款是做运动dv之类的芯片,不太适合做sdr,其实个人觉得最适合的是A33或者R系列的芯片,用usb1接一个msi2500,把软件接收到的数据显示出来。


回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
bg6rdf
1年0个月前
27楼

我也做了一个类似的。但用的是STM32H747,一个核负责DSP,一个核负责显示和控制。接收部分基本做完了。计算能力好像还富裕很多。

https://v.youku.com/v_show/id_XNDU1NDk1NTE3Ng==.html

https://v.youku.com/v_show/id_XNDU1NDk1NTE3Ng==.html

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
永恒之桔作者
1年0个月前 修改于 1年0个月前
28楼
引用bg6rdf发表于27楼的内容
我也做了一个类似的。但用的是STM32H747,一个核负责DSP,一个核负责显示和控制。接收部分基本...

厉害,界面漂亮。H747有两个核心就是爽,看起来很流畅😂。7050收广播应该是用了其他机器输出的IQ吧。

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
weiyu
1年0个月前
29楼
引用永恒之桔发表于28楼的内容
厉害,界面漂亮。H747有两个核心就是爽,看起来很流畅😂。7050收广播应该是用了其他机器输出的I...

想知道单片机能解调出i/q通道上的信息吗?比如接收到的数传信息解调到串口。

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
bg6rdf
1年0个月前
30楼
引用永恒之桔发表于28楼的内容
厉害,界面漂亮。H747有两个核心就是爽,看起来很流畅😂。7050收广播应该是用了其他机器输出的I...

模拟部分还没做,现在用的是KX3的I/Q输出。完整做出来,工作量很大。最开始用的是F746,分辨率低不少,刷显示的时间比运算的时间还多。用两个核顾忌就小多了。但总是有种升级处理器的冲动,必须时刻提醒自己,够了,够了。

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
linzhiwen
1个月7天前
31楼

楼主厉害!不知道用的F4是不是208脚的,少于208脚的F4芯片的SDRAM只有16位而不是32位,LTDC+DMA2D的时钟也只有45M而不是70M,按安富莱那边的测试,32位SDRAM刷屏速度快2~3倍,可以大幅度减轻GUI的负担。

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

永恒之桔
机友 笔友
文章
7
回复
74
学术分
0
2015/07/11注册,1 天前活动
暂无简介
%7B%22isDisplay%22%3Atrue%7D

仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。

插入资源
全部
图片
视频
音频
附件
全部
未使用
已使用
正在上传
空空如也~
上传中..{{f.progress}}%
处理中..
上传失败,点击重试
等待中...
{{f.name}}
空空如也~
(视频){{r.oname}}
{{selectedResourcesId.indexOf(r.rid) + 1}}
处理中..
处理失败
插入表情
我的表情
共享表情
Emoji
上传
注意事项
最大尺寸100px,超过会被压缩。为保证效果,建议上传前自行处理。
建议上传自己DIY的表情,严禁上传侵权内容。
点击重试等待上传{{s.progress}}%处理中...已上传
空空如也~
草稿箱
加载中...
此处只插入正文,如果要使用草稿中的其余内容,请点击继续创作。
{{fromNow(d.toc)}}
{{getDraftInfo(d)}}
标题:{{d.t}}
内容:{{d.c}}
继续创作
删除插入插入
{{forum.displayName}}
{{forum.countThreads}}
篇文章,
{{forum.countPosts}}
条回复
{{forum.description || "暂无简介"}}
ID: {{user.uid}}
学术分隐藏
{{submitted?"":"投诉或举报"}}
请选择违规类型:
{{reason.description}}
支持的图片格式:jpg, jpeg, png
插入公式
分享回复:{{shareId}}
加载中...
评论控制
加载中...
文号:{{pid}}
加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
加入关注取消关注
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
建议修改
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}
下载资料
{{fileName}}
大小:{{size}}
下载当前附件将花费 {{costMessage}}
你当前剩余 {{holdMessage}}
{{fileName}}
大小:{{size}}
当前附件免费。
你已购买过此附件,下载当前附件不需要花费积分。
加载中...
{{errorInfo}}
附件已丢失
当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}