用樹莓派搭建FM廣播,播放音樂和實時語音

樹莓派開啟FM廣播台,廣播指定的音樂或實時語音

本教程僅供科研與學習交流之用,廣播功率很小。請務必遵守國家相關電信管理法規。 基本原理:從奧斯特、法拉第,到麥克斯韋,從電容、電感到電磁波天線。 本文配套B站視頻:子豪兄的樹莓派零基礎教程

【子豪兄的樹莓派零基礎教程】第5講:用樹莓派搭建FM廣播電台,播放音樂和實時語音

作者:張子豪(同濟大學在讀研究生)

博客文檔、源代碼、更新、勘誤,請看本教程Github代碼倉庫

知乎、簡書專欄:人工智慧小技巧

粉絲答疑交流QQ群:953712961

微信讚賞二維碼

目錄

  • 材料準備
  • 安裝配置
  • 廣播內置歌曲:吉他音樂
  • 廣播歌曲:星球大戰
  • 廣播實時語音
  • 潛在應用領域
  • 聲明
  • 調頻廣播和天線基本原理
    • 高中物理課本相關內容
    • 電波發射與信號採樣
    • 調頻與調幅搭載信息
    • PWM:脈衝寬度調製
    • 樹莓派的硬體基礎:CPU、GPIO
    • DMA直接內存訪問與擴頻時鐘
    • 調頻得到傳輸信號
    • 樹莓派天線長度
    • 傳播距離估計
  • 擴展閱讀與參考文獻

材料準備

  • 樹莓派3B或樹莓派3B+
  • SD卡已燒錄好系統並完成一系列配置(換源等),具體操作可按照第3講:一勞永逸配置樹莓派【子豪兄的零基礎樹莓派教程】步驟一步步進行
  • 一台收音機,或安裝有收音機app的手機
  • (可選)麥克風。用於廣播實時語音
  • (可選)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號引腳上接一條跳線,可以提升廣播效果。 本教程僅供科研與學習交流之用,廣播覆蓋範圍不超過十米。如想搭建大功率電台請遵守國家法律法規按正規流程申請備案。(請看文末聲明)

廣播歌曲:星球大戰

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 發射機小電台原理解析

高中物理課本相關內容

電波發射與信號採樣

信號採樣

調頻與調幅搭載信息

PWM:脈衝寬度調製

PWM脈衝寬度調製(Pulse Width Modulation) 是使用離散的數字信號生成連續的模擬信號的方法。主要由 2 個參數來定義:占空比頻率。如果以保持一定的速率開關數字信號並且保持一定的占空比,那麼輸出看起來就像恆定電壓模擬信號。

樹莓派的硬體基礎:CPU、GPIO

DMA直接內存訪問與擴頻時鐘

DMA: 直接內存訪問(Direct Memory Access)。不用跟CPU打招呼就可以直接訪問內存。

絕大多數的的微處理器都有擴頻時鐘(Spread-spectrum clock),目的是為了降低電磁干擾(EMI),在樹莓派 BCM28XX 系列晶元上,擴頻時鐘的範圍為 1MHz 到 250MHz,這正好用作 FM 的載波信號。

為了減少CPU佔用,作者對程序進行了改進,使用樹莓派 DMA 產生基礎時鐘。

調頻得到傳輸信號

基帶信號

,載波頻率

,正弦載波為

將基帶數據信號與載波結合起來得到了傳輸信號

其中

為傳輸信號的瞬時頻率,

為頻偏表示相對載波頻率

的最大頻率偏移。

調頻輸出的是模擬信號,利用時鐘產生 PWM 調整占空比和頻率,就可以利用數字信號生成模擬信號。

樹莓派天線長度

  • 波長

  • 偶極子天線:製作偶極子天線時,會通過工作波長來確定天線的長度。最常見的偶極子天線是半波天線,它的總長度近似為工作波長的一半,即

如果需要發射100MHz的FM信號,根據上面的公式來計算,就需要1.5m長的天線。

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

所以理論上如果給樹莓派 GPIO(PIN4) 加上了一根 1.5m 的天線,那麼就可以輸出最大功率的 FM 信號。

傳播距離估計

首先需要計算有效全向輻射功率(EIRP)

其中 P 為發射機的輸出功率(dBm),Loss 為發射機輸出端與天線饋源之間的饋線損耗(dB),G 為天線的發送增益(dBi)。求出 EIRP 後可以進而獲得自由空間路徑損失(Free Space Path Loss,FSPL)。

但是使用這個公式估算,意義不是太大。實際測量,如果使用一根 10cm 的杜邦線作為天線,一個樓梯拐角信號就已經非常弱了。

擴展閱讀與參考文獻

讓樹莓派說出自己的ip地址

Bilibili視頻:【熟肉】教你用樹莓派製作可以進行語音直播的FM調頻無線電台 知乎:樹莓派 FM 發射機小電台原理解析國外參考文獻:
  • [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. icrobotics.co.uk/wiki/i the Raspberry Pi Into an FM Transmitter, 2015.
  • [3] Christophe Jacquet. FM-RDS transmitter using the Raspberry Pi』s PWM . github.com/ChristopheJa, 2014.
  • [4] Richardson. Turning the Raspberry Pi Into an FM Transmitter. icrobotics.co.uk/wiki/i, 2015.


推薦閱讀:
相关文章