| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 基于教科书C语言的FM收音机-Taskbus Stdio封装器在SDR课程中的应用 -> 正文阅读 |
|
[C++知识库]基于教科书C语言的FM收音机-Taskbus Stdio封装器在SDR课程中的应用 |
自从学校引入SDR教学以来,总觉得学生的实验课上的很吃力——还不如学习Matlab仿真算了。原因是编程基础不是很扎实的学生,可能只会使用C语言课上介绍的最基础的知识,这些知识往往无法支持其完成完整的SDR收音机接收实验。 之前为了避免学生学习太多的周边知识,对其造成困扰,我和几个老师共同建立了TaskBus工程。工程的初衷很好,旨在提供一种基于stdio(就是进程默认的键盘和回显句柄)的数据吞吐策略,把SDR的发射、接收、处理、播放串起来。关于这个工程,可以参考我的系列文章。 但这个框架还是没有顺利推进,主要原因:
因此,能够使用C语言为TaskBus开发模块的同学屈指可数。这个项目苟延残喘到本学期,把新来的实验老师弄毛了。我们提出了一个想法——能不能进一步简化,就在C语言教科书上的例子里,直接解决问题呢?折腾了几个礼拜,还真的实现了。 1 学生开发的FM最简收音机学生根据课本内容,实现FM广播单声道解调。输入的是调制信号,采样率200KHz,基带复数形式。大部分学生都能够通过测量前后两个样点的相位差,来估算频率。频率与相位是积分关系,对相位求微分,获得频率。求atan后,得到声音。 这个程序没有用到任何难以接受的知识点。唯一的美中不足,是在windows下要开启stdio句柄的二进制模式,方式Windows下的回车+换行代换破坏数据。这点在树莓派和Linux下不需要。但让我想不到的是,耽误时间最多的,是atan(y/x)的0除和象限问题。这个问题困扰不少学生很久。
这个程序可以用离线的文件来测试,并把结果导入AudaCity里播放。学生写好了这个程序,直接放在taskBus里,就能使用。可以看到,与不使用封装器的 TaskBus FM解调模块代码相比,上面的代码更为聚焦算法,大大降低了篇幅。 2. 用Qt建立stdio封装器Stdio封装器要把上面这个普通的使用标准输入输出的可执行文件封装起来,完成stdio输入输出的格式化组包。说到进程的封装,Qt的Process很棒。只要给定可执行文件的名字,就能作为子进程启动,并用QIODevie接口吞吐数据。
一旦进程启动,在 slot_readyReadStandardOutput 和 slot_readyReadStandardError里,就能顺序读取进程的输出了:
同时,想发往子进程数据,直接调用write即可:
这个封装器作为Taskbus的新插件,在这里可以找到源码。其界面如下: 3.引入Taskbus在Taskbus里,拖入封装器模块,把路径设置到学生自己的exe上,并连接管脚:这样,学生的模块就嵌入到FM解调工程中去了。FM的接收与解调,主要分为:
学生能够直观感觉到自己的程序竟可以参与到实时的接收处理中,成就感很高!并且,通过开发类似的模块,可以逐步取代老师们开发的范例模块,并对比其性能。比如老师通过^V Github写的仿Matlab 分数倍采样率变换,使用了浮点,速率不高。如果能变成定点,性能肯定更好。 4.测试结果通过测试,这个小模块可以很好的播放本地广播电台的音乐。 5 衍生应用封装EXE的标准输入输出,并不要求EXE一定是C语言写的。使用python、node.js甚至标准的命令程序,如grep,都可以引进来处理。 有了这种技术,即使是没有多线程、数据库、动态链接库、COM、消息队列等知识的新手,也能够根据教科书上的内容迅速尝试向实时处理系统中输出自己的知识。 Taskbus目前支持鼠标的动态连线了,进一步方便了学生的操作。加入的USRP UHD 定时突发发射模块仍在测试中。相关程序的运行、软件使用文档尚不完善。20220419 DEMO发行版见这里。 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 22:43:08- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |