尝试了一下使用STM32实现SDR
永恒之桔2019/07/10无线电 IP:四川

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

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

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

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

 

IMG_20190415_144425.jpg


        接收视频XXXXXXXXXXXXXXXXXXXXXXXX/video/av49427390

        


SDR.mp4 点击下载

        加上瀑布图视频

        


VID_20190610_175533.mp4 点击下载


        为了观察各个功能消耗的时间,使用空闲的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 534次下载 预览

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

index.gif

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

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


[修改于 4年8个月前 - 2019/07/10 22:03:48]

来自:电子信息 / 无线电
32
 
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
Robot_V1
4年8个月前 IP:江苏
860868

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zx-16533
4年8个月前 修改于 4年8个月前 IP:广东
860903

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

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

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

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

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

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

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

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

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

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


同时.mp4 点击下载

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

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

期待楼主的进一步进展😀

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

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

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

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

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
dddggg412
4年8个月前 IP:重庆
861034

双核高频单片机感觉合适

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
dddggg412
4年8个月前 IP:北京
861035

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

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

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

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

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

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

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


Main1.gif

XXXXXXXXXXXXXXXXXXXXXX/vshaper/





K7C_Pileup.jpg

XXXXXXXXXXXXXXXXXXXXXX/Rocky/XXXXXXXXXXXp



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


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

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

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

解调.png


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

咋不用树莓派嘞,

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
表慌张
4年6个月前 IP:重庆
862857

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

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
唐老鸭
4年6个月前 IP:北京
862903

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

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

1768589737.jpg


引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
kc-82327
4年6个月前 IP:广东
862913

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

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

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


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

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

XXXXXXXXXXXXXXXXXXX/v_show/id_XNDU1NDk1NTE3Ng==.html

XXXXXXXXXXXXXXXXXXX/v_show/id_XNDU1NDk1NTE3Ng==.html

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

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

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

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

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

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

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
linzhiwen
3年1个月前 IP:广东
889515

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

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
david99
2年4个月前 IP:湖北
898280

LZ的MSI001后来驱动起来了吗?最近也在看这个片子,但是自己初始化可能没有成功

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

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

所属专业
所属分类
上级专业
同级专业
永恒之桔
机友 笔友
文章
7
回复
76
学术分
0
2015/07/11注册,2个月14天前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:四川
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}