背景介绍

在知乎上有个问题

你在 GitHub 上看到过的最有意思的项目是什么?​www.zhihu.com

我介绍了个很有意思的无线 FM 电台的 Github 项目,可以在不借用其他外部设备的情况下,通过代码实现将树莓派变为 FM 小电台。

但是作者只是在博客中介绍了大致的原理,我搜遍整个网络,发现大多数的相关文章只是教你如何去编译运行代码,对背后的原理却是只言片语,含糊不清。

作为好奇宝宝,我查阅了许多芯片手册和论坛文章,又翻了翻以前学过的《天线原理》对背后的原理做了一下归纳和总结。

概念名词解释

首先是一些基本的概念

  • FM: 调频(Frequency Modulation) 是一种以载波的瞬时频率变化来表示信息的调制方式,载波的频率跟随输入信号的幅度直接成等比例变化。FM Radio 就是我们熟悉的调频收音机。
FM 调制
  • PWM: 脉冲宽度调制(Pulse Width Modulation) 是使用数字源生成模拟信号的方法。主要由 2 个参数来定义:占空比频率。如果以保持一定的速率开关数字信号并且保持一定的占空比,那么输出看起来就像恒定电压模拟信号。
PWM
  • GPIO: 通用型输入输出(General-purpose input/output),引脚可以由程序控制作为通用输入(GPI)或者通用输出(GPO)。
RPI GPIO
  • CPU: 中央处理器(Central Processing Unit),相当于树莓派的大脑,功能主要是解释计算机指令以及处理计算机软件中的数据,负责与外围设备通信。树莓派使用的是博通 BCM28XX 系列的 CPU。
BCM2837
  • DMA: 直接内存访问(Direct Memory Access)这些设备可以执行涉及主内存和其他设备的数据传送。由于设备执行这些操作的过程中无需借助于 CPU,因此该类型的数据传送称为直接内存访问。简单说就是不用 跟 CPU 打招呼就可以直接访问内存。
DMA

HOW?

根据麦克斯韦的电磁场理论

1. 变化的磁场能够在周围空间产生电场,变化的电场能够在周围空间产生磁场。
2. 随时间均匀变化的磁场(电场)产生稳定电场(磁场)。随时间不均匀变化的磁场(电场)产生变化的电场(磁场)。
3. 变化的电场和变化的磁场总是相互关系着,形成一个不可分割的统一体,这就是电磁场。

麦克斯韦方程组

随时间变化的电场产生磁场,而随时间变化的磁场又产生电场,两者互为因果。这种不断转化的场统称为电磁场。这种相互的转化形成电磁振荡。

所以如果在树莓派的 GPIO 上,通过软件控制以一定频率输出高低电平(0/1),再加上适当长度的天线(一根杜邦线即可)就可以将能量以电磁波的形式发射出去。

FM 结构图

FM 发射机框图

由图可知,组成一个 FM 发射机系统,树莓派需要

  • 信号采样和 FM 调制所需的时钟
  • 可以通过编程控制电平变化的 GPIO
  • 一段可以将电磁波发射出去的天线

时钟

目前绝大多数的的微处理器都有扩频时钟(Spread-spectrum clock),目的是为了降低电磁干扰(EMI),在树莓派 BCM28XX 系列芯片上,扩频时钟的范围为 1MHz 到 250MHz,这正好用作 FM 的载波信号。

为了减少 CPU 占用,作者对程序进行了改进,使用树莓派 DMA 产生基础时钟。

时钟信号

信号采样

由于 FM 广播发送的是音频信号,所以先使用 228 kHz 的采样频率对信号进行采样(满足奈奎斯特采样定理),带宽为 15 kHz。

信号采样

调频

基带信号

,载波频率
,正弦载波为
将基带数据信号与载波结合起来得到了传输信号

其中

为传输信号的瞬时频率,
为频偏表示相对载波频率
的最大频率偏移。

调频输出的是模拟信号,利用时钟产生 PWM 调整占空比和频率,就可以利用数字信号生成模拟信号。

树莓派天线长度

  • 波长

  • 偶极子天线:制作偶极子天线时,会通过工作波长来确定天线的长度。最常见的偶极子天线是半波天线,它的总长度近似为工作波长的一半,即

如果需要发射 100MHz 的 FM 信号,根据上面的公式来计算,就需要 1.5m 长的天线。

>>> 

所以理论上如果给树莓派 GPIO(PIN4) 加上了一根 1.5m 的天线,那么就可以输出最大功率的 FM 信号。

不要这么做,会干扰正常频段!

传播距离估计

首先需要计算有效全向辐射功率(EIRP)

其中 P 为发射机的输出功率(dBm),Loss 为发射机输出端与天线馈源之间的馈线损耗(dB),G 为天线的发送增益(dBi)。求出 EIRP 后可以进而获得自由空间路径损失(Free Space Path Loss,FSPL)。

但是使用这个公式估算,意义不是太大。实际测量,如果使用一根 10cm 的杜邦线作为天线,一个楼梯拐角信号就已经非常弱了。

总结

  • 深深佩服第一个作者的 Geek 范和莫大的脑洞;
  • 不要干扰正常频段,属于违法行为!

参考

代码请见参考链接

  • [1] Eben Upton and Gareth Halfacree. Raspberry Pi user guide. John Wiley & Sons, 2014.
  • [2] Oliver Mattos and Oskar Weigl. Turning the Raspberry Pi Into an FM Transmitter. http://www.icrobotics.co.uk/wiki/index.php/Turning the Raspberry Pi Into an FM Transmitter, 2015.
  • [3] Christophe Jacquet. FM-RDS transmitter using the Raspberry Pi’s PWM . https://github.com/ChristopheJacquet/PiFmRds, 2014.
  • [4] Richardson. Turning the Raspberry Pi Into an FM Transmitter. http://www.icrobotics.co.uk/wiki/index.php/Turning_the_Raspberry_Pi_Into_an_FM_Transmitter, 2015.

听说按了点赞的人,手指都会有淡淡的玫瑰香味 。

树莓派 小屏幕_树莓派 FM 发射机小电台原理解析相关推荐

  1. 树莓派 小屏幕_树莓派无屏上手指南

    学习 Linux 的童鞋如果想买个玩具,树莓派肯定是不二之选.对于树莓派的介绍,良许就先不赘述了,百度一搜一大把.简而言之,树莓派就是一个小电脑,我们可以用它来学习 Linux ,也可以扩展做出很多好 ...

  2. 树莓派 小屏幕_树莓派学习手动积累(1)

    树莓派4B到手,满怀激动地拆开包装,准备大展拳脚. Raspberry Pi(中文名为"树莓派",简写为RPi,(或者RasPi / RPI)是为学习计算机编程教育而设计),只有信 ...

  3. 树莓派 小屏幕_树莓派打造复古游戏主机Retropie

    前言 疫情在家无聊在B站刷到一些up主用树莓派diy折腾一些好玩的项目,如下. 其中小电视和树莓派掌机瞬间燃起了我的强烈兴趣,小电视可以当是一台超小mini pc主机,主机支持运行Linxu系统和wi ...

  4. 树莓派 小屏幕_树莓派小技巧关闭低电压提醒图标

    在使用树莓派的时候,有时会发现右上角有个小小的闪电图标,当看到这个图标的时候,表示当前电压比较低.树莓派的供电,建议使用5V3A的电源,但就算使用的是官方电源,也是有可能会出现这种提示. 至于,为什么 ...

  5. 一个公众号可以绑定几个小程序_如何实现微信小程序和公众号的绑定

    再此之前,为什么要有小程序和公众号绑定这一个操作. 第一:小程序绑定公众号之后,公众号可以推文. 如下所示,公众号推文,文章内容由后台发布,因为公众号分为服务号和订阅号,订阅号每天可以发送一次,一次最 ...

  6. 万能门店小程序_超市门店微信小程序注册流程

    现在超市门店商家利用小程序卖货已经非常普遍,小程序可以便捷地连接线上线下通道,让商家不再局限于门店周围的流量,能够从微信获取更多客户,从而提升销量和店铺知名度.超市要想有自己的线上电商小程序,就得先注 ...

  7. 不同主体公众号跳转小程序_公众号和小程序的区别

    其实公众号和小程序都是微信的衍生功能,同时微信的产品.但是它们的功能不同.公众号更倾向于引流,主要是通过持续的输出有价值的文案视频图片来吸引大量的粉丝(顾客),并且培育粉丝最终获得收益.(在这里特别提 ...

  8. 树莓派蓝屏_树莓派刷写Windows 10 ARM版后成功运行桌面程序

    微软在2015年时推出Windows 10 IoT物联网版供树莓派系列以及其他单板电脑安装和部署更多的应用程序. 不过树莓派系列设备本身都是使用博通的ARM处理器,所以也只能运行Windows 10商 ...

  9. 专属海报小程序_剑3泡泡 | 小程序给你一份专属的账号海报!

    01按照惯例,这里是简介 paopaods.com 本期推送的是: 如何正确的使用小程序 每个账号均可小程序[剑3泡泡]搜到,生成专属账号海报! 点击底部[点我卖号]即可拥有! 02教程开始之前,安利 ...

最新文章

  1. jdk1.8.0_45源码解读——Map接口和AbstractMap抽象类的实现
  2. Python 爬虫从入门到进阶之路(七)
  3. 全球与中国固态电池市场深度研究及投资可行性评估报告2022-2028年
  4. 转 一个SMD 0805的LED的电流,电压,亮度关系表
  5. django数据库迁移问题
  6. c 中=和==的区别有哪些?
  7. Linux环境 安装 Redis-6.2.6 配置运行_01
  8. python的矩阵表示_Python 稀疏矩阵表示
  9. CentOS7下ab压力测试Nginx和Tomcat
  10. 关于groupby与层次化索引的联系和层次化标签的使用
  11. rest_frameword学前准备
  12. 【Django 2021年最新版教程24】循环得到2个日期之间的所有日期
  13. Windows自带利器:Rundll.exe高级应用
  14. python自回归模型_21向量自回归模型
  15. 最好用的两款库存管理软件推荐,不要错过
  16. js压缩图片到指定大小
  17. jmeter上传文件踩坑指南
  18. 从0开始学大数据(十二)
  19. X在苍茫大地 闻一达(闻大嘴) 闻明远
  20. 开启产品经理之路-产品模型制作

热门文章

  1. toad for oracle12.11,Toad for Oracle 12.11 - 发行版本说明
  2. 史上最简单OpenWRT教程!三分钟三步搞定!碉堡了
  3. 朱丹老师课程学习笔记:10、生活便捷—购物、美食、看病时这样搜,至少能省一半心
  4. elementUI+nodejs中间件multer+mysql实现图片上传功能
  5. JavaFX 按钮Button
  6. android限速 编程,GitHub - renjingc/TrafficSignsRecognition: 基于深度学习的android端交通牌标志检测与识别...
  7. Qgraf + MaTeX + tikz-feynman 自动生产Feynman图
  8. 修改hifi音乐pro服务器,hifi音乐pro
  9. OBIEE12C 使用RPD文件
  10. [zt]某MBA创业失败后的感慨