0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

采用PWM进行播放语音原理,PWM又是如何实现的DAC的

嵌入式IoT 来源:嵌入式IoT 作者:嵌入式IoT 2020-12-08 17:41 次阅读

1.概述

大多数微控制器上播放音频都是采用DAC进行输出,因为微控制器上都不会去带CODEC编解码芯片,但是DAC不是每个芯片都会存在,如果没有DAC,那又该怎么办呢?于是PWM就成了一个不错的选择。因为一般的微控制器板子都会有PWM,这样的设计大大简化了语音设计的门槛。其原理就是PWM可以变成一个DAC,然后进行语音信号的输出,经过功率放大器,经过喇叭,则可以将数字信号变成声音信号正常输出了。

2.声音原理

学过物理知识的都知道,声音其实是一种波,通过空气振动等弹性介质传递到人的耳朵里引起耳膜震动,牵动大脑的听视觉神经,经过大脑处理后,就会产生听觉。

人能够分辨的声音的频段为最低20Hz到最高20KHz。中学物理就学过,声音的三特征是:音调、响度和音色,响度是由声源振动的幅度决定的,振幅越大,响度越大;音调的高低和振动的频率有关,频率越高,音调越高;音色不同,波的特征也不同。

既然声音是一种波形,波则有两个特征:频率和振幅。对于单片机来说,表述这两个概念则需要一定的技巧,频率是单片机本来就具有的特性,可以通过时钟产生特定频率的信号,对于振幅,数字信号0与1该如何表述呢?可以通过位宽深度来进行表述,比如8位的位宽深度则可以表达的量化数据为0-256之间的数据,对于数字信号,声音数据也有采样的位宽,所以这个也可以用单片机描述,DAC则可以用来做这个,结合定时器产生特定的频率从而让机器发出声音。

3.DAC产生声音的原理是什么

要想真正理解DAC是如何工作的,必须首先了解什么是模拟信号,模拟信号是一个不断变化的电压,它可以完美的表达不断变化的声波。麦克风可以将传入的声音转换为代表声音的模拟电信号,这些电信号通过扬声器将模拟电信号转换成原始声音。

那么该如何记录这些模拟信号呢?很早的时候,人们就想出了将模拟信号存储为唱片上的凹槽。通过指针的来回移动从而表达出声音的电模拟信号。随着时间的推移,将这种凹槽早已变成和数字信号存储在了硬盘或者各种磁带中,而这些0或者1则表示音频信号的信息

对于声音信号,光盘可以存储每秒为44100次的16位深度量化二进制数据(16bit/44kHz)。于是在进行DAC输出的时候,我们也可同样采用16位宽的DAC进行采样,然后以44kHz的频率将声音信号转化出来,这对于MCU上去操作DAC并非难事,只需要启用一个16位宽的DAC和一个定时器即可,定时器用于控制声音输出的频率,如采样率位44.1KHz,则按照该时钟频率输出即可。

8a36eeb0-3019-11eb-a64d-12bb97331649.png

4.PWM又是如何实现的DAC的

在理解上述原理之后,我们来理解一下PWM,以及PWM是如何进行工作的。

8a722c1e-3019-11eb-a64d-12bb97331649.png

PWM(Pulse Width Modulation)最简单的理解就是MCU内部有个定时器,定时器特定的时间内将GPIO的电平翻转一下。对于翻转的时间间隔的比例就是占空比,而持续这两个过程则可以算为一个周期。这种是对于数字信号的描述,我们转变一下思维,从模拟信号的角度去理解pwm。

8a94b478-3019-11eb-a64d-12bb97331649.jpg

则可以看到上面的图示了,在一个周期内,其占空比决定了平均电压值,红色的线表示平均电压。对于一个周期内的数据,我们可以进行量化,其量化的方式为首先设定(0~5v)之间的电压用(0-256表示),此时就可以有8位分辨率(2^8=256)。由于每个量化点都可以表示一个电压,而电压又直接和PWM的一个周期的占空比直接相关,所以可以得到占空比和量化点的关系。同样的16位量化数据则表现的更为精确。但是如果量化的数据越大,则PWM频率越低(计数的时间变长),这是PWM的基本权衡。执行的越快,精度就越低。这里比较关键,但需要好好理解,随着PWM频率的不断提升,其占空比的选择就不再那么随意了,精度会大大的降低。

5.PWM的频率与底噪的关系

音频设备有个参数叫信噪比,是信号与噪声的比例,模拟信号必然会产生噪声。越好的设备信噪比越大,也就是需要非常大的增益才能听得到底噪。

信噪比(Signal-to-noise ratio,缩写为 SNR 或 S/N),也称作信杂比或讯杂比。

通常PWM发出的声音无法去除掉这一点,但这些声音有时候会变得有趣,比如红白机8bit游戏音乐。

确切的说,如果要提升音质,那么可以采用16位数据。有着如下的公式说明:

SNR(dB)=(BitDepth)*6.02dB+1.76dB)

也就是说,如果要获得更好的声音效果,可以有两种办法,第一种是降低PWM的频率,也就是上一章节解释的那样,想要获得更大的深度,则必须降低PWM的频率。第二种则是增加PWM的数量。根据奈奎斯特采样定理,PWM的最高频率至少是声音最高频率(20Khz)的两倍。

上图描述了采样频率和PWM数量以及位宽深度的关系。如果增加PWM的数量,则可以提升采样的精度,比如在不改变PWM的频率下可以改变其位宽深度。

6.PWM音乐曲目解析

我曾经看到过一篇很有意思的文章,就是讲了pwm然后用无源蜂鸣器做个播放器的播放《你笑起来真好看》这个曲目,我觉得很有意思。我的上述分析虽然不是完全的可以结合上这个原理,但是至少可以帮助理解一下乐理知识。在音乐中,节奏和节拍两者相辅相成,构成音乐的骨架。使用PWM直接给无源蜂鸣器供电,当高电平时,无源蜂鸣器响,低电平时不响。然后给定音乐的节拍让其响或者不响,则可以演奏出乐曲出来,而人发出的声音却比这个要复杂许多,高低变化的声音,声调的变化要展示出来,是非常有难度的事情。

7.后续

本文分析了声音通过PWM或者DAC产生的一些原理和过程,其中比较关键的是PWM从模拟信号的角度上来看,其占空比的变化也可以变成电压信号。从而通过类似于DAC的原理,此时加上定时器,按照声音特定的频率去播放,则可以输出声音了。当然,本文至少从原理上说明这个方案是可行的,更多的细节和更多的技术实现还在是要继续进行探索,后面会研究多个PWM如何提升声音信噪比以及带来的副作用是那些,也会去用MCU的视角去理解更多乐理知识。

责任编辑:PSY

原文标题:PWM实现语音播放原理

文章出处:【微信公众号:嵌入式IoT】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PWM
    PWM
    +关注

    关注

    114

    文章

    5109

    浏览量

    213047
  • 语音
    +关注

    关注

    3

    文章

    381

    浏览量

    37961
  • dac
    dac
    +关注

    关注

    43

    文章

    2255

    浏览量

    190698

原文标题:PWM实现语音播放原理

文章出处:【微信号:Embeded_IoT,微信公众号:嵌入式IoT】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    采用PWM实现电压输出DAC电路

    一种基于PWM的电压输出DAC电路设计
    发表于 04-29 10:05

    如何使用PWM实现语音播放

    如何使用PWM实现语音播放
    发表于 02-14 06:59

    CH32V103基础教程93-PWM播放音乐 (1个TIM)

    函数介绍关于TIM,在前面章节已经进行过介绍,在此不再赘述。关于PWM播放音乐原理,即将PWM模拟变成一个DAC
    发表于 05-11 16:10

    CH32V103基础教程-PWM播放音乐(2个TIM)

    。关于PWM播放音乐原理,即将PWM模拟变成一个DAC进行语音信号的输出。大概原理就是:通过改变
    发表于 05-11 16:11

    PWM语音播放器——基于Luminary单片机

    PWM语音播放器——基于Luminary单片机 详述PWM语音播放器原
    发表于 04-07 16:50 47次下载

    PWM DAC文档

    PWM DAC文档,关于PWM DAC文档的详细介绍,PWM DAC文档的应用实例。
    发表于 05-03 11:44 0次下载

    如何采用PWM通过RC低通滤波器来模拟实现DAC功能

    当我们电路需要DAC而单片机并没有DAC外设时,则可采用PWM通过RC低通滤波器来模拟实现DAC
    的头像 发表于 03-21 15:45 1.6w次阅读
    如何<b class='flag-5'>采用</b><b class='flag-5'>PWM</b>通过RC低通滤波器来模拟<b class='flag-5'>实现</b><b class='flag-5'>DAC</b>功能

    关于PWM实现语音播放的详细过程

    以一定的速度采样(ADC)这些波形进行存储,就是音频数据了,所以播放就是按原来采样的速率再用DAC输出对应的数据即可。
    的头像 发表于 04-25 17:27 8245次阅读
    关于<b class='flag-5'>PWM</b><b class='flag-5'>实现</b><b class='flag-5'>语音</b><b class='flag-5'>播放</b>的详细过程

    使用PWM实现DAC

    使用PWM实现DAC(现代电源技术基础pdf)-1 Introduction Many embedded microcontroller applications require
    发表于 09-17 12:02 18次下载
    使用<b class='flag-5'>PWM</b><b class='flag-5'>实现</b><b class='flag-5'>DAC</b>

    PWM模拟DAC的关键参数分析

    实现DAC系统的性能的主要因素。仿真发现,滤波器环节对于PWM模拟DAC的性能参数是至关重要的,在不考虑PWM的位数限制时,滤波级数越高
    发表于 09-17 13:00 28次下载
    <b class='flag-5'>PWM</b>模拟<b class='flag-5'>DAC</b>的关键参数分析

    PWM DAC相关资料

    PWM DAC相关资料(ups电源技术发展动向)-PWM DAC相关资料                         
    发表于 09-18 15:45 30次下载
    <b class='flag-5'>PWM</b> <b class='flag-5'>DAC</b>相关资料

    STM的PWMDAC学习

    STM的PWMDAC学习
    发表于 11-23 17:51 12次下载
    STM的<b class='flag-5'>PWM</b>与<b class='flag-5'>DAC</b>学习

    使用PWM实现语音播放

    本文转自ARM中文社区,作者:Xiaoya链接:https://community.arm.com/cn/b/blog/posts/nucleof429-2-pwm 事实上大部分MCU都可...
    发表于 12-14 18:56 17次下载
    使用<b class='flag-5'>PWM</b><b class='flag-5'>实现</b><b class='flag-5'>语音</b><b class='flag-5'>播放</b>

    STM32的PWMDAC练习

    STM32的PWMDAC练习STM32F103输出一路PWM波形序言源码实操DAC练习STM32F103输出一路PWM波形建议
    发表于 12-16 16:53 7次下载
    STM32的<b class='flag-5'>PWM</b>和<b class='flag-5'>DAC</b>练习

    PWM DAC

    PWM DAC硬件## PWM DAC1、PWM DAC原理
    发表于 12-16 16:56 19次下载
    <b class='flag-5'>PWM</b> <b class='flag-5'>DAC</b>