0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

沒有ADC的MCU如何實(shí)現(xiàn)音頻播放呢?

冬至子 ? 來源:嵌入式IoT ? 作者:bigmagic ? 2023-06-21 17:24 ? 次閱讀

1.概述

大多數(shù)微控制器上播放音頻都是采用DAC進(jìn)行輸出,因?yàn)?a target="_blank">微控制器上都不會(huì)去帶CODEC編解碼芯片,但是DAC不是每個(gè)芯片都會(huì)存在,如果沒有DAC,那又該怎么辦呢?于是PWM就成了一個(gè)不錯(cuò)的選擇。因?yàn)橐话愕奈⒖刂破靼遄佣紩?huì)有PWM,這樣的設(shè)計(jì)大大簡化了語音設(shè)計(jì)的門檻。其原理就是PWM可以變成一個(gè)DAC,然后進(jìn)行語音信號(hào)的輸出,經(jīng)過功率放大器,經(jīng)過喇叭,則可以將數(shù)字信號(hào)變成聲音信號(hào)正常輸出了。

2.聲音原理

學(xué)過物理知識(shí)的都知道,聲音其實(shí)是一種波,通過空氣振動(dòng)等彈性介質(zhì)傳遞到人的耳朵里引起耳膜震動(dòng),牽動(dòng)大腦的聽視覺神經(jīng),經(jīng)過大腦處理后,就會(huì)產(chǎn)生聽覺。

人能夠分辨的聲音的頻段為最低20Hz到最高20KHz。中學(xué)物理就學(xué)過,聲音的三特征是:音調(diào)、響度和音色,響度是由聲源振動(dòng)的幅度決定的,振幅越大,響度越大;音調(diào)的高低和振動(dòng)的頻率有關(guān),頻率越高,音調(diào)越高;音色不同,波的特征也不同。

既然聲音是一種波形,波則有兩個(gè)特征:頻率和振幅。對(duì)于單片機(jī)來說,表述這兩個(gè)概念則需要一定的技巧,頻率是單片機(jī)本來就具有的特性,可以通過時(shí)鐘產(chǎn)生特定頻率的信號(hào),對(duì)于振幅,數(shù)字信號(hào)0與1該如何表述呢?可以通過位寬深度來進(jìn)行表述,比如8位的位寬深度則可以表達(dá)的量化數(shù)據(jù)為0-256之間的數(shù)據(jù),對(duì)于數(shù)字信號(hào),聲音數(shù)據(jù)也有采樣的位寬,所以這個(gè)也可以用單片機(jī)描述,DAC則可以用來做這個(gè),結(jié)合定時(shí)器產(chǎn)生特定的頻率從而讓機(jī)器發(fā)出聲音。

3.DAC產(chǎn)生聲音的原理是什么

要想真正理解DAC是如何工作的,必須首先了解什么是模擬信號(hào),模擬信號(hào)是一個(gè)不斷變化的電壓,它可以完美的表達(dá)不斷變化的聲波。麥克風(fēng)可以將傳入的聲音轉(zhuǎn)換為代表聲音的模擬電信號(hào),這些電信號(hào)通過揚(yáng)聲器將模擬電信號(hào)轉(zhuǎn)換成原始聲音。

那么該如何記錄這些模擬信號(hào)呢?很早的時(shí)候,人們就想出了將模擬信號(hào)存儲(chǔ)為唱片上的凹槽。通過指針的來回移動(dòng)從而表達(dá)出聲音的電模擬信號(hào)。隨著時(shí)間的推移,將這種凹槽早已變成和數(shù)字信號(hào)存儲(chǔ)在了硬盤或者各種磁帶中,而這些0或者1則表示音頻信號(hào)的信息。

對(duì)于聲音信號(hào),光盤可以存儲(chǔ)每秒為44100次的16位深度量化二進(jìn)制數(shù)據(jù)(16bit/44kHz)。于是在進(jìn)行DAC輸出的時(shí)候,我們也可同樣采用16位寬的DAC進(jìn)行采樣,然后以44kHz的頻率將聲音信號(hào)轉(zhuǎn)化出來,這對(duì)于MCU上去操作DAC并非難事,只需要啟用一個(gè)16位寬的DAC和一個(gè)定時(shí)器即可,定時(shí)器用于控制聲音輸出的頻率,如采樣率位44.1KHz,則按照該時(shí)鐘頻率輸出即可。

圖片

4.PWM又是如何實(shí)現(xiàn)的DAC的

在理解上述原理之后,我們來理解一下PWM,以及PWM是如何進(jìn)行工作的。

圖片

PWM(Pulse Width Modulation)最簡單的理解就是MCU內(nèi)部有個(gè)定時(shí)器,定時(shí)器特定的時(shí)間內(nèi)將GPIO的電平翻轉(zhuǎn)一下。對(duì)于翻轉(zhuǎn)的時(shí)間間隔的比例就是占空比,而持續(xù)這兩個(gè)過程則可以算為一個(gè)周期。這種是對(duì)于數(shù)字信號(hào)的描述,我們轉(zhuǎn)變一下思維,從模擬信號(hào)的角度去理解pwm。

圖片

則可以看到上面的圖示了,在一個(gè)周期內(nèi),其占空比決定了平均電壓值,紅色的線表示平均電壓。對(duì)于一個(gè)周期內(nèi)的數(shù)據(jù),我們可以進(jìn)行量化,其量化的方式為首先設(shè)定(0~5v)之間的電壓用(0-256表示),此時(shí)就可以有8位分辨率(2^8=256)。由于每個(gè)量化點(diǎn)都可以表示一個(gè)電壓,而電壓又直接和PWM的一個(gè)周期的占空比直接相關(guān),所以可以得到占空比和量化點(diǎn)的關(guān)系。同樣的16位量化數(shù)據(jù)則表現(xiàn)的更為精確。但是如果量化的數(shù)據(jù)越大,則PWM頻率越低(計(jì)數(shù)的時(shí)間變長),這是PWM的基本權(quán)衡。執(zhí)行的越快,精度就越低。這里比較關(guān)鍵,但需要好好理解,隨著PWM頻率的不斷提升,其占空比的選擇就不再那么隨意了,精度會(huì)大大的降低。

5.PWM的頻率與底噪的關(guān)系

音頻設(shè)備有個(gè)參數(shù)叫信噪比,是信號(hào)與噪聲的比例,模擬信號(hào)必然會(huì)產(chǎn)生噪聲。越好的設(shè)備信噪比越大,也就是需要非常大的增益才能聽得到底噪。

信噪比 (Signal-to-noise ratio,縮寫為 SNR 或 S/N),也稱作信雜比訊雜比 。

通常PWM發(fā)出的聲音無法去除掉這一點(diǎn),但這些聲音有時(shí)候會(huì)變得有趣,比如紅白機(jī)8bit游戲音樂。

確切的說,如果要提升音質(zhì),那么可以采用16位數(shù)據(jù)。有著如下的公式說明:

SNR(dB)=(Bit Depth)*6.02dB + 1.76dB)

也就是說,如果要獲得更好的聲音效果,可以有兩種辦法,第一種是降低PWM的頻率,也就是上一章節(jié)解釋的那樣,想要獲得更大的深度,則必須降低PWM的頻率。第二種則是增加PWM的數(shù)量。根據(jù)奈奎斯特采樣定理,PWM的最高頻率至少是聲音最高頻率(20Khz)的兩倍。

圖片

上圖描述了采樣頻率和PWM數(shù)量以及位寬深度的關(guān)系。如果增加PWM的數(shù)量,則可以提升采樣的精度,比如在不改變PWM的頻率下可以改變其位寬深度。

6.PWM音樂曲目解析

我曾經(jīng)看到過一篇很有意思的文章,就是講了pwm然后用無源蜂鳴器做個(gè)播放器的播放《你笑起來真好看》這個(gè)曲目,我覺得很有意思。我的上述分析雖然不是完全的可以結(jié)合上這個(gè)原理,但是至少可以幫助理解一下樂理知識(shí)。在音樂中,節(jié)奏和節(jié)拍兩者相輔相成,構(gòu)成音樂的骨架。使用PWM直接給無源蜂鳴器供電,當(dāng)高電平時(shí),無源蜂鳴器響,低電平時(shí)不響。然后給定音樂的節(jié)拍讓其響或者不響,則可以演奏出樂曲出來,而人發(fā)出的聲音卻比這個(gè)要復(fù)雜許多,高低變化的聲音,聲調(diào)的變化要展示出來,是非常有難度的事情。

圖片

7.后續(xù)

本文分析了聲音通過PWM或者DAC產(chǎn)生的一些原理和過程,其中比較關(guān)鍵的是PWM從模擬信號(hào)的角度上來看,其占空比的變化也可以變成電壓信號(hào)。從而通過類似于DAC的原理,此時(shí)加上定時(shí)器,按照聲音特定的頻率去播放,則可以輸出聲音了。當(dāng)然,本文至少從原理上說明這個(gè)方案是可行的,更多的細(xì)節(jié)和更多的技術(shù)實(shí)現(xiàn)還在是要繼續(xù)進(jìn)行探索,后面會(huì)研究多個(gè)PWM如何提升聲音信噪比以及帶來的副作用是那些,也會(huì)去用MCU的視角去理解更多樂理知識(shí)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 微控制器
    +關(guān)注

    關(guān)注

    48

    文章

    7346

    瀏覽量

    150189
  • 功率放大器
    +關(guān)注

    關(guān)注

    102

    文章

    3364

    瀏覽量

    131161
  • 編解碼芯片
    +關(guān)注

    關(guān)注

    0

    文章

    14

    瀏覽量

    8826
  • ADC采樣
    +關(guān)注

    關(guān)注

    0

    文章

    134

    瀏覽量

    12793
  • MCU芯片
    +關(guān)注

    關(guān)注

    3

    文章

    244

    瀏覽量

    11259
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    DSP教學(xué)實(shí)驗(yàn)箱:音頻采集與播放實(shí)驗(yàn)

    學(xué)習(xí)McASP管腳的使用方法,掌握音頻采集播放的原理和過程,并實(shí)現(xiàn)音頻的采集與播放。
    的頭像 發(fā)表于 10-25 17:41 ?1287次閱讀
    DSP教學(xué)實(shí)驗(yàn)箱:<b class='flag-5'>音頻</b>采集與<b class='flag-5'>播放</b>實(shí)驗(yàn)

    基于FPGA的音頻播放器設(shè)計(jì)

    主要是音頻播放器設(shè)計(jì)不太會(huì),想問各位大神怎么樣可以實(shí)現(xiàn)用verilog語言實(shí)現(xiàn)音頻播放,通過串口
    發(fā)表于 01-03 13:54

    音頻播放功能的愛普生IC支持12種言語

    音頻播放
    Piezoman壓電俠
    發(fā)布于 :2024年01月12日 09:55:57

    音頻文件(WAV)特技播放的原理及實(shí)現(xiàn)

    本帖最后由 eehome 于 2013-1-5 10:08 編輯 音頻文件的播放是開發(fā)多媒體軟件中的一個(gè)重要內(nèi)容,但有時(shí)需要對(duì)它進(jìn)行特技播放,如快速播放,慢速
    發(fā)表于 03-12 00:42

    wm8978實(shí)現(xiàn)了錄音和播放音樂但無法修改音量

    最近用wm8978來實(shí)現(xiàn)音樂播放功能,現(xiàn)在已經(jīng)可以正常錄音,也可以播放wav音頻,mp3用mcu來解碼后也可以正常
    發(fā)表于 03-04 23:37

    怎樣在音頻播放系統(tǒng)里面進(jìn)行音頻系數(shù)量化的設(shè)計(jì)

    怎樣在音頻播放系統(tǒng)里面進(jìn)行音頻系數(shù)量化的設(shè)計(jì)?要注意什么問題嗎?
    發(fā)表于 10-18 09:27

    如何沒有ADC,MCU怎么實(shí)現(xiàn)音頻播放?

    1.概述大多數(shù)微控制器上播放音頻都是采用DAC進(jìn)行輸出,因?yàn)槲⒖刂破魃隙疾粫?huì)去帶CODEC編解碼芯片,但是DAC不是每個(gè)芯片都會(huì)存在,如果沒有DAC,那又該怎么辦?于是PWM就成了一個(gè)...
    發(fā)表于 11-02 10:17

    如何實(shí)現(xiàn)USB播放音頻功能?

    如何實(shí)現(xiàn)USB播放音頻功能?
    發(fā)表于 11-26 07:23

    如何利用PyAudio庫來實(shí)現(xiàn)pzh-py-speech的音頻播放和錄制功能

    pzh-py-speech的主要功能是什么?如何利用PyAudio庫來實(shí)現(xiàn)pzh-py-speech的音頻播放和錄制功能?
    發(fā)表于 12-23 09:45

    在Linux下如何實(shí)現(xiàn)音頻播放功能?

    在Linux下如何實(shí)現(xiàn)音頻播放功能?
    發(fā)表于 01-26 06:35

    如何實(shí)現(xiàn)STM32 MCU的16位ADC分辨率

    STM32 MCU 具有 12 位 ADC 分辨率,但一些 MCU 聲稱“高達(dá) 16 位硬件過采樣”。當(dāng)我在 STMCubeMX 中設(shè)置 ADC 時(shí),
    發(fā)表于 12-01 06:11

    使用低級(jí)音頻函數(shù)實(shí)現(xiàn)音頻采集與播放

    使用低級(jí)音頻函數(shù)實(shí)現(xiàn)音頻采集與播放,下來看看。
    發(fā)表于 01-21 11:17 ?7次下載

    沒有ADCMCU如何實(shí)現(xiàn)音頻播放?

    1.概述大多數(shù)微控制器上播放音頻都是采用DAC進(jìn)行輸出,因?yàn)槲⒖刂破魃隙疾粫?huì)去帶CODEC編解碼芯片,但是DAC不是每個(gè)芯片都會(huì)存在,如果沒有DAC,那又該怎么辦?于是PWM就成了一個(gè)...
    發(fā)表于 10-28 18:21 ?10次下載
    <b class='flag-5'>沒有</b><b class='flag-5'>ADC</b>的<b class='flag-5'>MCU</b>如何<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>音頻</b><b class='flag-5'>播放</b>?

    芯知識(shí) | 什么是音頻藍(lán)牙播放語音芯片?

    隨著科技的不斷進(jìn)步,音頻藍(lán)牙播放語音芯片成為嵌入式音頻系統(tǒng)中備受關(guān)注的創(chuàng)新解決方案。本文將深入解析什么是音頻藍(lán)牙播放語音芯片,以及其在
    的頭像 發(fā)表于 12-15 08:36 ?626次閱讀
    芯知識(shí) | 什么是<b class='flag-5'>音頻</b>藍(lán)牙<b class='flag-5'>播放</b>語音芯片?

    TM4C12x MCU上的數(shù)字音頻播放

    電子發(fā)燒友網(wǎng)站提供《TM4C12x MCU上的數(shù)字音頻播放.pdf》資料免費(fèi)下載
    發(fā)表于 09-19 10:37 ?0次下載
    TM4C12x <b class='flag-5'>MCU</b>上的數(shù)字<b class='flag-5'>音頻</b><b class='flag-5'>播放</b>