樹莓派 FM 發送機小電臺背後的原理解析
介紹
在知乎上有個問題 你在 GitHub 上看到過的最有意思的項目是什麼? 我介紹了個很有意思的無線 FM 電臺的項目,可以在不借用其他外部設備的情況下,通過代碼實現將樹莓派變爲 FM 小電臺。
但是作者只是在博客中介紹了大致的原理。於是我搜遍整個網絡,發現大多數的相關文章只是教你如何去編譯運行代碼,對背後的原理卻是隻言片語,含糊不清。
作爲好奇寶寶,我查閱了許多芯片手冊和論壇文章,又翻了翻以前學過的《天線原理》對背後的原理做了一下歸納和總結。
概念名詞解釋
首先是一些基本的概念
- FM: 調頻(Frequency Modulation) 是一種以載波的瞬時頻率變化來表示信息的調製方式,載波的頻率跟隨輸入信號的幅度直接成等比例變化。FM Radio 就是我們熟悉的調頻收音機。
- PWM: 脈衝寬度調製(Pulse Width Modulation) 是使用數字源生成模擬信號的方法。主要由 2 個參數來定義:佔空比和頻率。如果以保持一定的速率開關數字信號並且保持一定的佔空比,那麼輸出看起來就像恆定電壓模擬信號。
- GPIO: 通用型輸入輸出(General-purpose input/output),引腳可以由程序控制作爲通用輸入(GPI)或者通用輸出(GPO)。
- CPU: 中央處理器(Central Processing Unit),相當於樹莓派的大腦,功能主要是解釋計算機指令以及處理計算機軟件中的數據,負責與外圍設備通信。樹莓派使用的是高通 BCM28XX 系列的 CPU。
- DMA: 直接內存訪問(Direct Memory Access)這些設備可以執行涉及主內存和其他設備的數據傳送。由於設備執行這些操作的過程中無需藉助於 CPU,因此該類型的數據傳送稱爲直接內存訪問。簡單說就是不用 跟 CPU 打招呼就可以直接訪問內存。
HOW?
- 變化的磁場能夠在周圍空間產生電場,變化的電場能夠在周圍空間產生磁場。
- 隨時間均勻變化的磁場(電場)產生穩定電場(磁場)。隨時間不均勻變化的磁場(電場)產生變化的電場(磁場)。
- 變化的電場和變化的磁場總是相互關係着,形成一個不可分割的統一體,這就是電磁場。
隨時間變化的電場產生磁場,而隨時間變化的磁場又產生電場,兩者互爲因果。這種不斷轉化的場統稱爲電磁場。這種相互的轉化形成電磁振盪。
所以如果在樹莓派的 GPIO 上,通過軟件控制以一定頻率輸出高低電平(0/1),再加上適當長度的天線(一根杜邦線即可)就可以將能量以電磁波的形式發射出去。
FM 結構圖
由圖可知,組成一個 FM 發射機系統,樹莓派需要
- 信號採樣和 FM 調製所需的時鐘
- 可以通過編程控制電平變化的 GPIO
- 一段可以將電磁波發射出去的天線
時鐘
目前絕大多數的的微處理器都有擴頻時鐘(Spread-spectrum clock),目的是爲了降低電磁干擾(EMI),在樹莓派 BCM28XX 系列芯片上,擴頻時鐘的範圍爲 1MHz 到 250MHz,這正好用作 FM 的載波信號。
爲了減少 CPU 佔用,作者對程序進行了改進,使用樹莓派 DMA 產生基礎時鐘。
信號採樣
由於 FM 廣播發送的是音頻信號,所以先使用 228 kHz 的採樣頻率對信號進行採樣(滿足奈奎斯特採樣定理),帶寬爲 15 kHz。
調頻
基帶信號 ,載波頻率 ,正弦載波爲 將基帶數據信號與載波結合起來得到了傳輸信號
其中 爲傳輸信號的瞬時頻率, 爲頻偏表示相對載波頻率 的最大頻率偏移。
調頻輸出的是模擬信號,利用時鐘產生 PWM 調整佔空比和頻率,就可以利用數字信號生成模擬信號。
樹莓派天線長度
- 波長:
- 偶極子天線:製作偶極子天線時,會通過工作波長來確定天線的長度。最常見的偶極子天線是半波天線,它的總長度近似爲工作波長的一半,即
如果需要發射 100MHz 的 FM 信號,根據上面的公式來計算,就需要 1.5m 長的天線。
>>> 3*10**8 / (2 * 100 * 10**6)
1.5
所以理論上如果給樹莓派 GPIO(PIN4) 加上了一根 1.5M 的天線,那麼就可以輸出最大功率的 FM 信號。
不要這麼做,會干擾正常頻段!
傳播距離估計
首先需要計算有效全向輻射功率(EIRP)
其中 爲發射機的輸出功率(), 爲發射機輸出端與天線饋源之間的饋線損耗(), 爲天線的發送增益()。求出 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.
歡迎關注我的個人公衆號