标准pcm数据(正弦波、方波、三角波)解读
一年前寫了一個demo,用于生成幾種標(biāo)準(zhǔn)的波形,如正弦波、方波、三角波。之前寫的只有這幾個功能:波形/通道/時長/頻率的控制選擇,這幾天抽了些時間又加了增益控制功能。為了避免東西丟失或意外刪除,特上傳到github,有需要的可以自己下載驗(yàn)證。
在測量板子信號時,我們根據(jù)需要生成波形(wav封裝),將得到的文件放到板子存儲設(shè)備中進(jìn)行播放。記得以前調(diào)試時都是找一個同事(一個好耍的憨厚樸實(shí)純真的兄弟,名字叫jiawei)臨時要的,然而數(shù)量畢竟有限,因?yàn)槲铱赡苄枰煌蓸勇?通道/增益/頻率組合的信號。。。
下面結(jié)合git倉庫中的CStandardWaveGenerator和Adobe Audition來介紹聲音的一些概念。像聲道、采樣率、增益、頻率、時長等概念。以后有時間了再另起博文補(bǔ)充傅里葉變換,利用這個demo生成所需要的信號源。
?
示例介紹
生成信號:正弦波 + 時長100ms + 周期10ms(頻率100Hz) + 單聲道 + 8k采樣率 + 單聲道 + 6dB
執(zhí)行命令:./StandardWaveGenerator.exe 0 100 10 8000 1 -6
附帶信息:get sin.wav with sample_rate=8000, channle=1, duration=100 ms, period=10 ms, gain=-6 dB, pcmLen:1600
得到文件sin.wav,用Audition解讀:
?
?
信號解讀
1.單雙聲道(channel)
這個通俗講,你用幾個mic去采集信號。如果是雙聲道,則上圖有兩個波形。雙聲道每次采樣數(shù)據(jù)量為:2chn * 16bit(s16le) = 4Bytes
?
2.采樣頻率(sample_rate)
這個要與信號頻率(周期信號的頻率)做下區(qū)別。這個是指:每秒鐘的采樣次數(shù)。
就如上面示例圖示,采樣頻率是8k,代表著1s內(nèi)進(jìn)行了8000次采樣,而只保留了100ms的信號,因此數(shù)據(jù)量大小:8000 * 2Bytes * (100/1000) = 1600Bytes,從命令輸出信息也可看到。
?
3.時長(duration)
這個文件的時間長度,示例中是100ms
?
4.信號頻率/信號周期(frequence/period)
這個值代表信號多長時間后又開始重復(fù),上面示例中使用了這個“period=10 ms”來控制,即T=10ms,那么f=1/T=100Hz,從圖示下半部分可以看出信號的頻率是100(明顯的一條黃帶)。
?
5.增益(gain)
這個可以表示聲音的響度,其具體含義是信號與某一個值對比:20lg(V1/V2),在音頻里則與最大值V2=215=32768進(jìn)行對比,那么-6dB的信號可以算出來其值為:214=16384
例如,如果我們從文件中去找出最大值是多少來確認(rèn)是否屬實(shí),可以按以下這么操作:
step1. 半波最大pcm值采樣序號:10ms * (1/4) / 1000ms * 8000 = 20
step2. 在文件中的offset:44 + 20*2 = 84 = 0x54,其中44為wav_header,20*2中的2代表每次采樣的2Bytes
step3. 用winhex進(jìn)行查找(alt+g):得到 25 40
?
?step4.?25 40代表值多少呢?由于存儲格式為S16LE,S(signed)代表有符號,LE(little endian)為小端存儲(先存低字節(jié),再存高字節(jié)),那么這個采樣值為0x4025 = 16421,大體上接近理論值16384。
?
轉(zhuǎn)載于:https://www.cnblogs.com/Dreaming-in-Gottingen/p/11441842.html
總結(jié)
以上是生活随笔為你收集整理的标准pcm数据(正弦波、方波、三角波)解读的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AR VR类网站
- 下一篇: 将unicode转换成汉字