当前位置: 首页 > news >正文

【2022集创赛】安谋科技杯一等奖作品:Cortex-M0智能娱乐收音机

本篇文章是2022年第六届全国大学生集成电路创新创业大赛安谋科技杯一等奖作品分享,参加极术社区的**【有奖征集】分享你的2022集创赛作品,秀出作品风采**活动。

团队介绍

参赛单位:武汉理工大学
队伍名称:夜的第七章
指导老师:付琴,杨媛媛
参赛队员:王鑫鹏,卢思远,黄俊颖
总决赛奖项:一等奖

图1. 团队风采

1 项目简介

本项目基于Arm Cortex-M0处理器在安路EG4S20上利用FM_SDR板卡构建具备无线通信基带信号处理的片上系统,下载程序后,可在Keil界面中完成调试及运行。

作品使用内部总线连接存储器与FPGA板载的外设,如数码管、矩阵键盘、拨动开关、LED、蜂鸣器、FLASH等,配合控制外围扩展电路实现FM等通信信号的调制解调等处理。在此基础上,设计FIR带通滤波器并为FM射频板配备了性能更加优良的射频天线与大音腔喇叭,使音质得到了提升;采用芯片CI1122完成对特定语句的离线识别功能简化了调台的操作步骤;利用芯片内合封的SDRAM和SD卡模块实现对音乐的播放、录制和评分功能;用板载QN8027发射芯片增加FM游戏、机械臂控制等通信功能,同时作为专用的FM发射芯片,QN8027支持立体声传输,但MSi001仅支持FM基带解调,采用立体声数字解调的方案,实现了对立体声副载波的解调(AM解调),完成了立体声传输,展示效果良好,实践创新性强。

2 系统设计

本系统的主要功能部件包括ARM Cortex-M0内核、AHB总线矩阵、CMSIS-DAP调试端口、语音识别模块、SD卡模块等,具体系统框图如下图所示。在方案设计时,核心思想为软硬件协同,充分利用开发板资源完成整个系统的搭建,结构如图所示。

图2. 整体系统设计

3 功能设计

3.1 FM电台

3.1.1 基带信号处理

(1)IQ信号接收
根据FPGA板自带的ADC,位宽为12bit,采样率选择1MSPS,双通道轮询串行采样。为得到最大采样速率,借助TD软件自带的IP核,使用PLL模块生成16MHz的ADC驱动时钟。再者,通过在Chip Watcher中观察相关信号关系,由Channel变量指示当前的采样结果——为I数据亦或Q数据。
(2)解调算法
由FM的数字解调公式可知,整个解调算法仅是一个由乘法和减法组成的迭代系统。

(1)
因此,在接收到更新的IQ数据后,对其进行打一拍寄存,即得到上一时刻的IQ数据。
(3)符号转换
在进行解调运算时,由于涉及减法,为防止计算溢出,参与运算的数据应为有符号数。而ADC采样数据为无符号,因此需要进行无符号向有符号的转换。

3.1.2 PWM_DAC模块

与STM32定时器的PWM输出模式类似,即实现占空比可调的PWM输出。核心思想就是计数值与参考值循环比较,从而产生占空比与参考值成正比的PWM波。因数据位宽为12位,循环计数值为4095。

我们采用的计数时钟为200MHz,仍是借助IP核,利用PLL倍频实现。选择200MHz出于以下考虑:由公式(2),FM射频板上的二阶低通RC滤波器的截止频率为31.2KHz。(根据FM射频板电路得知,R=510Ω,C=0.01uF)

(2)

在采用200MHz的前提下,由公式(3),对PWM进行傅里叶级数展开,可以由此计算计算得到PWM的一次谐波分量为48.8KHz,大于截止频率,受到抑制。且此频率在人耳辨别范围之外,保证了PWM的高阶谐波分量不会对直流分量产生干扰,实现了PWM向DAC电平的转化,从而精准启动喇叭。

(3)

3.1.3 自动搜台原理

自动搜台一般有两种方式,第一种是计算当前频率下的中频输出值,在得到特定值即表示此处有一个信号,结合当前的信号强度及信噪比判定是否要停下来收这个台;第二种是计算当前接收频率的信号大小及信噪比,大于指定的值会被认为收到了一个电台。

本系统运用第二种方式,对IQ解调后的语音信号进行强度分析,数值大小对应的幅值进行统计,设定范围寻找出存在电台的频率,实现自动搜台。

自动搜台的接口信号,方向与功能如下所示。

图3.自动搜台示意图

3.1.4 存储与切换频道

使用FPGA板载的FLASH,型号W25Q16,实现对电台频道的存储与读取。

设计的主要重点在于SPI通信,仍是采用软件的方案,基本思想与MSi001一致:先实现SPI基础的读写时序函数,再进而编写出FLASH的连续写字节和连续读字节函数。

图4. 电台存储示意图

3.1.5 音质提升

在FM解调算法出来后的信号,仍然带有大量的IQ谐波成分,设计阶数为16阶、截止频率为4000Hz的低通滤波器,滤除IQ谐波成分和非语音信号信息,让得到的音质得到提升。同时选取长度适合的天线更好收获的IQ信号,4Ω/2w含有音腔的喇叭增强发声效果。在Matlab中读取一段语言信号,并叠加一个频率为10KHz的正弦信号,设计FIR滤波器为16阶,截至频率为4K。如图5,可见10KHz高频信号被很好的滤除。

图5.matlab滤波仿真图

将叠加后含10KHz噪音的信号生成到txt文本中,将信号传入到Verilog设计的filter_fir模块中,编写Testbench文件可得到信号如图6。

其中FIR_MUSIC为原语音信号信息,FIR_IN为加噪后信息,FIR_OUT为滤波后信息,可见滤波器模块成功去除了高频噪声。

图6. 提升音质

3.2 K歌模式

K歌以sd卡进行伴奏歌曲演奏,麦克风输入人声进行评分,耳机或有源音箱来个人倾听或者外接功放随时随地K歌。同时运用到SPI通信的sd模块播放音乐和FPGA芯片封装的SDRAM存储音乐。

图7. K歌模式

3.3 语音识别

采用芯片CI1122,通过训练完成对特定语句的离线识别功能。设备通过串口与CI1122进行通信,实现了语音调频功能和语音存储功能。语音识别功能简化了操作步骤,使设备更加智能化、产品化。

图8. 语音识别模块

3.4 FM通信

3.2.1 FM游戏

共设计两个游戏,第一个是以打地鼠为原型的打兔子游戏,第二个是童年经典游戏——碰手指。规则较为简单,且均为双人模式,轻松诙谐。

以矩形脉冲作为调制信号,其频率、占空比作为传输信息,调制到FM载波上进行传输。考虑到FM射频模块二阶RC电路对基带信号的滤波作用,我们采用的频率集中在500Hz~1000Hz,此时解调还原出的信号较强,可识别性较好。

图9. FM游戏通信方式

3.2.2 FM机械臂

基于我们制定的FM通信协议,将通信对应到控制机械臂的引用,开拓了更多的使用场景。

图10. 机械臂通信方式

借助3D打印技术制作体感手套,并在体感手套上嵌入姿态传感器JY901,收到D0端口电压值控制爪子开合,利用FM通信实现了体感控制机械臂。

图11. 机械臂通信流程

3.5 立体声传输

作为专用的FM发射芯片,QN8027支持立体声传输,而MSi001仅支持FM基带解调。在充分学习通信理论的基础上,我们采用立体声数字解调的方案,设计专用的FIR滤波器、乘法器、Cordic取模运算等,实现了对立体声副载波的解调(AM解调) ,完成了立体声传输,展示效果良好,实践创新性强。

图12. 非相干解调流程

4 作品外观

图13. 实物图
功能演示视频:

https://www.bilibili.com/video/BV16B4y1n7fD​www.bilibili.com/video/BV16B4y1n7fD

5 参赛感受和分享

随着物联网的普及化,收音机逐渐淡出人们的视野,如何理解收音机收音原理并完善收音机为其增添新的血液是我们可以思考的。通过参加本次arm杯比赛,增加了我们片上系统的理解和设计经验,同时切身体会到老式收音机问题并为其拓展新的功能,整个项目核心思想为软硬件协同,充分利用开发板资源完成整个系统的搭建,软硬件的协调整合需要团队成员之间不断的沟通配合,在团队协作以及团队老师的指导下,最终我们成功完成了整个系统的设计,为收音机作品添加了诸如FM游戏、机械臂控制、立体声解调等扩展功能,本次比赛也为日后科研和工作积累宝贵的经验。

相关文章:

  • python3-python中的多任务处理利器-协程的使用(一),asyncio模块的使用
  • vue06安装vue-cli+使用vue-cli搭建项目+什么是*.vue文件+开发示例+必问面试知识点
  • chrome盗取用户身份
  • 队列(Queue)的详解
  • 快速发布windows上的web项目【免费内网穿透】
  • 【C++笔试强训】第十一天
  • [Linux打怪升级之路]-vim编辑器(看就能马上操作噢)
  • 睿智的目标检测61——Keras搭建YoloV7目标检测平台
  • DM8: 达梦数据库生成100以内2位数加减法
  • 《数据结构》(六)八大排序(上)
  • 几道简单的Linux驱动相关面试题,你看你会几题?
  • libusb系列-004-Qt下使用libusb库
  • vue的简单学习
  • Arduino基础知识
  • 【入门4】数组——蛇形方阵
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • CSS魔法堂:Absolute Positioning就这个样
  • EventListener原理
  • jdbc就是这么简单
  • laravel 用artisan创建自己的模板
  • spring boot下thymeleaf全局静态变量配置
  • zookeeper系列(七)实战分布式命名服务
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 后端_MYSQL
  • 类orAPI - 收藏集 - 掘金
  • 面试总结JavaScript篇
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  •  一套莫尔斯电报听写、翻译系统
  • RDS-Mysql 物理备份恢复到本地数据库上
  • ​你们这样子,耽误我的工作进度怎么办?
  • #1015 : KMP算法
  • #pragma multi_compile #pragma shader_feature
  • #pragma预处理命令
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (二)linux使用docker容器运行mysql
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (一)WLAN定义和基本架构转
  • (一)基于IDEA的JAVA基础12
  • (转)菜鸟学数据库(三)——存储过程
  • .“空心村”成因分析及解决对策122344
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • [BUUCTF NewStarCTF 2023 公开赛道] week3 crypto/pwn
  • [codevs 1288] 埃及分数 [IDdfs 迭代加深搜索 ]
  • [FxCop.设计规则]8. 也许参数类型应该是基类型
  • [GN] Vue3.2 快速上手 ---- 核心语法2
  • [Head First设计模式]策略模式
  • [Jenkins] Docker 安装Jenkins及迁移流程
  • [kubernetes]控制平面ETCD
  • [Linux] PXE批量装机
  • [OCR]Python 3 下的文字识别CnOCR