標準pcm數據(正弦波、方波、三角波)解讀

一年前寫了一個demo,用於生成幾種標準的波形,如正弦波、方波、三角波。以前寫的只有這幾個功能:波形/通道/時長/頻率的控制選擇,這幾天抽了些時間又加了增益控制功能。爲了不東西丟失或意外刪除,特上傳到github,有須要的能夠本身下載驗證。git

在測量板子信號時,咱們根據須要生成波形(wav封裝),將獲得的文件放到板子存儲設備中進行播放。記得之前調試時都是找一個同事(一個好耍的憨厚朴實純真的兄弟,名字叫jiawei)臨時要的,然而數量畢竟有限,由於我可能須要不一樣採樣率/通道/增益/頻率組合的信號。。。github

下面結合git倉庫中的CStandardWaveGenerator和Adobe Audition來介紹聲音的一些概念。像聲道、採樣率、增益、頻率、時長等概念。之後有時間了再另起博文補充傅里葉變換,利用這個demo生成所須要的信號源。spa

 

示例介紹調試

生成信號:正弦波 + 時長100ms + 週期10ms(頻率100Hz) + 單聲道 + 8k採樣率 + 單聲道 + 6dBblog

執行命令:./StandardWaveGenerator.exe 0 100 10 8000 1 -6get

附帶信息:get sin.wav with sample_rate=8000, channle=1, duration=100 ms, period=10 ms, gain=-6 dB, pcmLen:1600it

獲得文件sin.wav,用Audition解讀:io

 

 

信號解讀音頻

1.單雙聲道(channel)下載

這個通俗講,你用幾個mic去採集信號。若是是雙聲道,則上圖有兩個波形。雙聲道每次採樣數據量爲:2chn * 16bit(s16le) = 4Bytes

 

2.採樣頻率(sample_rate)

這個要與信號頻率(週期信號的頻率)作下區別。這個是指:每秒鐘的採樣次數。

就如上面示例圖示,採樣頻率是8k,表明着1s內進行了8000次採樣,而只保留了100ms的信號,所以數據量大小:8000 * 2Bytes * (100/1000) = 1600Bytes,從命令輸出信息也可看到。

 

3.時長(duration)

這個文件的時間長度,示例中是100ms

 

4.信號頻率/信號週期(frequence/period)

這個值表明信號多長時間後又開始重複,上面示例中使用了這個「period=10 ms」來控制,即T=10ms,那麼f=1/T=100Hz,從圖示下半部分能夠看出信號的頻率是100(明顯的一條黃帶)。

 

5.增益(gain)

這個能夠表示聲音的響度,其具體含義是信號與某一個值對比:20lg(V1/V2),在音頻裏則與最大值V2=215=32768進行對比,那麼-6dB的信號能夠算出來其值爲:214=16384

例如,若是咱們從文件中去找出最大值是多少來確認是否屬實,能夠按如下這麼操做:

step1. 半波最大pcm值採樣序號:10ms * (1/4) / 1000ms * 8000 = 20

step2. 在文件中的offset:44 + 20*2 = 84 = 0x54,其中44爲wav_header,20*2中的2表明每次採樣的2Bytes

step3. 用winhex進行查找(alt+g):獲得 25 40

 

 step4. 25 40表明值多少呢?因爲存儲格式爲S16LE,S(signed)表明有符號,LE(little endian)爲小端存儲(先存低字節,再存高字節),那麼這個採樣值爲0x4025 = 16421,大致上接近理論值16384。

相關文章
相關標籤/搜索