audio 應用:聲波通訊(2)傳送原理
聲波通訊的一般流程
可以看到無論是傳送還是接受關鍵的都是中間過程,也就是需要傳輸的資訊內容轉換成聲音的過程,這個聲音到底是什麼呢?
每一段都是一個資訊的bit,這裡很容易認為是通過這些資訊bit的輸出幅度來判定對應的是哪個ASCII碼的,現實的情況是這樣做基本不可能實現,音量的大小解析度很低,通訊雙方的距離、播放裝置和接收裝置的擺放角度和輸出幅頻響應都會嚴重影響最終的結果。聲音的一個頑疾‘回聲’更是會造成干擾。
我們換個角度看這些聲波,從頻域看一看
可以看到這些波形其實是不同的頻率的訊號連線而成的,關於時域和頻域的理解在大學講的還是比較詳細的,通過一個圖也能夠看清楚:
將時間軸的資訊轉換了能量維度。
選用的都是正弦訊號,方波訊號 三角波都存在其他頻率分量,為了儘量減少其他的干擾。
生成方法是選用中學只是的正餘弦公式
Y = sin( (2 *PI *Frequency) / SampleRate)
PI 就是常數3.14,Frequency是想要輸出的頻率,SampleRate 是取樣率。
比如想要輸出的是8KHZ訊號,取樣率是48K
正弦波輸出公式
Frequency = 8000
SampleRate = 48000
for(i=0;i<SampleRate /Frequency ;i++)
data_out = sin( (2 *PI *i)/(SampleRate /Frequency) )
通過上面的過程我們就獲得了一個完整的8KHZ正弦波的數值,但是這個數值是0~1的值,這裡還需要根據輸出訊號位寬進行放大,
例如輸出是16bit的位寬的訊號,pcm 訊號有極性,輸出的最大正值是0x7ffff
sample_out = data_out * 0x7ffff
sample_out 就是最後寫入到硬體fifo 傳送到dal來播放的資料了。
有了任意頻率的訊號公式夠我們需要建立一個頻率和傳輸資料對應的一個表,建立一個查詢表的陣列解決這個問題,
這個函式輸入時 0,1,2,3。。。輸出就是對應頻率的count值,
由於不同頻率的訊號每週期的取樣點是不一樣的,為了獲得不同資料輸出時間相同長度的資料訊號,這裡建立一個cyc_count的陣列,這個陣列是頻率訊號的週期數量。越大頻率的訊號週期越大。如果沒有這個控制,就會出現高頻的資料輸出時間很短,很容易檢測不到這個bit.
這樣就可以是線整個過程的資料組合了,最後再呼叫輸出介面將資料輸出出去。
相關文章
- audio 應用:聲波通訊(3)接收原理
- audio 應用:聲波通訊(1)應用場景
- SMS簡訊通API——(1)Java應用傳送手機簡訊APIJava
- 超聲波網路 (TCP/IP on Audio)TCP
- flutter: 深入通訊-傳送端Flutter
- 聊聊如何在Java應用中傳送簡訊Java
- 如何在iphone應用程式中傳送簡訊iPhone
- 使用C#在應用程式間傳送訊息C#
- QYT多鏈路融合通訊閘道器(應急通訊、車載通訊、影片傳輸)應用
- iOS12系統應用傳送普通郵實現傳送iOS
- 使用Java客戶端傳送訊息和消費的應用Java客戶端
- 使用 laravel-wechat-notification 傳送微信模板訊息、企業微信應用訊息Laravel
- 乾元通多鏈路融合通訊閘道器在應急通訊、車載通訊、影片傳輸方向的應用
- html5聲頻audio和視訊videoHTMLIDE
- 向任意應用程式(包括後臺的)傳送任意按鍵訊息
- 即時通訊傳送檔案的方法有幾種?
- 關於透明傳輸在通訊中的應用淺談
- 【RocketMQ】MQ訊息傳送MQ
- RocketMQ(八):訊息傳送MQ
- iOS 傳送位置訊息iOS
- android 傳送簡訊Android
- 鴻蒙傳送訊息通知鴻蒙
- facebook web端傳送應用通知邀請Web
- 「實戰」搭建完整的IM(即時通訊)應用(2)
- 繪製聲音訊率的波紋動畫效果音訊動畫
- 瀏覽器跨 Tab 視窗通訊原理及應用實踐瀏覽器
- websocket通訊原理Web
- liunx通過TCP傳送資訊TCP
- 通訊原理中碼元,碼元傳輸速率,資訊傳輸速率
- 超聲波、毫米波、ToF鐳射雷達——在低功耗場景的應用選型
- RVP:存在和即時訊息傳送協議 (2) (轉)協議
- ucenter與其它應用結合時出現通訊失敗,ucenter應用原理與除錯除錯
- SAP UI5 應用的 OData 後設資料請求的傳送原理分析UI
- 深入研究RocketMQ生產者傳送訊息的底層原理MQ
- 從 0 開始打造聊天室,搞定 Laravel 實時通訊 —— 傳送訊息Laravel
- RocketMQ(九):訊息傳送(續)MQ
- TNW-傳送模板訊息TNW
- 使用 Python 傳送簡訊?Python