Skip to content

Latest commit

 

History

History
303 lines (175 loc) · 15.2 KB

第6讲:用树莓派搭建FM广播,播放音乐和实时语音.md

File metadata and controls

303 lines (175 loc) · 15.2 KB

用树莓派搭建FM广播,播放音乐和实时语音

树莓派开启FM广播台,广播指定的音乐或实时语音

本教程仅供科研与学习交流之用,广播功率很小。请务必遵守国家相关电信管理法规。

基本原理:从奥斯特、法拉第,到麦克斯韦,从电容、电感到电磁波天线。

本文配套B站视频:子豪兄的树莓派零基础教程

树莓派FM广播站

【子豪兄的树莓派零基础教程】第5讲:用树莓派搭建FM广播电台,播放音乐和实时语音

作者:张子豪(同济大学在读研究生)

博客文档、源代码、更新、勘误,请看本教程Github代码仓库

知乎、简书专栏:人工智能小技巧

粉丝答疑交流QQ群:953712961

微信赞赏二维码

微信扫码支持子豪兄制作树莓派教程

目录

材料准备

  • 树莓派3B或树莓派3B+

  • SD卡已烧录好系统并完成一系列配置(换源等),具体操作可按照第3讲:一劳永逸配置树莓派【子豪兄的零基础树莓派教程】步骤一步步进行

  • 一台收音机,或安装有收音机app的手机

  • (可选)麦克风。用于广播实时语音

  • (可选)USB声卡。用于广播实时语音

    USB声卡

    声卡是干啥的?

    声卡是将话筒接受到的外界声音信号(连续的模拟信号)转换为离散数字信号(数模转换)并传输给计算机(树莓派)进行处理的数字电路。USB声卡就是通过USB口提供声音功能(耳机、麦克风)的装置。

安装配置

在树莓派的命令行界面依次运行以下八条命令

mkdir fm

cd fm

sudo git clone https://github.com/markondej/fm_transmitter

sudo apt-get install mpg123

sudo apt-get install gcc g++ make

cd fm_transmitter

sudo make

sudo apt-get install sox

注意,后文的所有命令都需要在fm/fm_transmitter目录下执行。可以通过cd fm/fm_transmitter命令切换到这个目录下。

广播内置歌曲:吉他音乐

sox acoustic_guitar_duet.wav -r 22050 -c 1 -b 16 -t wav - | sudo ./fm_transmitter -f 100.6 -

广播吉他音乐

也可以把这条命令中的100.6改成其它数字,即可在新频道上广播。不要和已有电台频率冲突。

也可以将你自己的wav格式的声音文件放到/fm/fm_transmitter文件夹中,替换命令中的star_wars.wav文件。

WAV是最接近无损的音乐格式,所以文件也比较大。

在树莓派GPIO的BCM4号引脚上接一条跳线,可以提升广播效果。

本教程仅供科研与学习交流之用,广播覆盖范围不超过十米。如想搭建大功率电台请遵守国家法律法规按正规流程申请备案。(请看文末声明

接线图

树莓派GPIO上的BCM4号引脚

广播歌曲:星球大战

sudo git reset --hard 71e7e23a0e

sox star_wars.wav -r 22050 -c 1 -b 16 -t wav - | sudo ./fm_transmitter -f 100.6 -

广播星球大战音乐

ctrl+c结束广播。

git reset命令是使所在目录回退到之前的指定版本,如果你想切换回最新版本,可以运行sudo git reset --hard 6111460命令。

广播实时语音

语音实时广播

在树莓派的USB口插上USB声卡,在USB声卡的麦克风孔里插入麦克风,运行以下命令,在即可在调频100.6MHz频道广播实时语音,你也可以把这条命令中的100.6改成其它数字,那样就会在新频道上广播:

arecord -D plughw:1,0 -c1 -d 0 -r 22050 -f S16_LE | sudo ./fm_transmitter -f 100.6 -

ctrl+c结束广播。

潜在应用领域

用移动电源给树莓派供电,设置开机免密码自动登录和自动运行广播脚本,将整个系统装在书包里,即可实现走到哪里,广播开到哪里(旅游景点、重要会场讲话、窃听器、位置信标)。与无线供电或太阳能相结合,可以实现半永久性的窃听广播站。

应用领域:警用军用情报、边防与国家安全、智能安保安防、环境灾害、地质灾害预警

例如,大佬做讲座的报告厅人满为患,就可以做一个fm广播站,让堵在门外的人也能听到实时语音。

例如,如果有窃贼或非法入侵者触发了信号(如红外探头、微动开关等),就立刻开启fm广播电台。

例如,树莓派每次开机的时候都在指定频段广播自己的ip地址。

声明

本教程仅供科研与学习交流之用,广播覆盖范围不超过十米。如想搭建大功率电台请遵守国家法律法规按正规流程申请备案。

中华人民共和国无线电管理条例

摘录:

第五条 国家鼓励、支持对无线电频谱资源的科学技术研究和先进技术的推广应用,提高无线电频谱资源的利用效率。

第十四条 使用无线电频率应当取得许可,但下列频率除外:

(一)业余无线电台、公众对讲机、制式无线电台使用的频率;

调频广播和天线基本原理

参考资料:知乎:树莓派 FM 发射机小电台原理解析

高中物理课本相关内容

幻灯片3.JPG

幻灯片4.JPG

幻灯片5.JPG

幻灯片6.JPG

幻灯片7.JPG

幻灯片8.JPG

幻灯片9.JPG

幻灯片10.JPG

幻灯片11.JPG

电波发射与信号采样

调制电磁波信息

信号采样 信号采样

调频与调幅搭载信息

调频与调幅

PWM:脉冲宽度调制

PWM脉冲宽度调制(Pulse Width Modulation) 是使用离散的数字信号生成连续的模拟信号的方法。主要由 2 个参数来定义:占空比频率。如果以保持一定的速率开关数字信号并且保持一定的占空比,那么输出看起来就像恒定电压模拟信号。

PWM

树莓派的硬件基础:CPU、GPIO

树莓派3B的CPU芯片

GPIO四号引脚

DMA直接内存访问与扩频时钟

DMA: 直接内存访问(Direct Memory Access)。不用跟CPU打招呼就可以直接访问内存。

DMA:直接访问内存

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

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

时钟信号

扩频时钟

调频得到传输信号

基带信号 x_{m}(t) ,载波频率  f_{c} ,正弦载波为 x_{c}(t)=A_{c} \cos \left(2 \pi f_{c} t\right) 将基带数据信号与载波结合起来得到了传输信号

调频公式

其中 f(\tau) 为传输信号的瞬时频率, f_{\Delta} 为频偏表示相对载波频率 f_{c} 的最大频率偏移。

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

树莓派天线长度

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

天线

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

>>> 3*10**8 / (2 * 100 * 10**6)
1.5

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

传播距离估计

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

EIRP = P - Loss +G

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

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

扩展阅读与参考文献

让树莓派说出自己的ip地址

Bilibili视频:【熟肉】教你用树莓派制作可以进行语音直播的FM调频无线电台

知乎:树莓派 FM 发射机小电台原理解析

国外参考文献:

子豪兄的树莓派系列教程

微信扫码支持子豪兄制作树莓派教程

树莓派接线

欢迎加入树莓派全球开源社区