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

事实上大部分mcu都可以实现语音播放
下面是一段音频数据的波形
局部放大图:
以一定的速度采样(adc)这些波形进行存储,就是音频数据了,所以播放就是按原来采样的速率再用dac输出对应的数据即可。
这里的音频有两个主要的参数,采样速率和采样位数。
采样速率:指1s中采样多少个数据点,比如1s种采集16000个点,那么采样率就是16khz。采样速率越高,越能抓到频率较高的声音,比如cd的采样率就是44.1khz,确保人耳能听到的声音都会被抓到。
采样位数:指音频幅度最大值与最小值分为了多少阶,比如满幅度是3.3v,如果是8bit位数,那么每一阶就是3.3v/256 = 12.89mv,采样位数越高,声音细节越好。所以采样速率和位数越高,声音还原越逼真,但存储的数据量也越大,一首三四分钟的歌曲,如果不采用编码按原始波形数据存储,数据量有好几十兆大小,这涉及到音频编码的问题,这里不展开讲了,有兴趣的同学可以找相关资料。
接下来看怎么播放,最简单的当然是把采样(adc)的数据按原样输出(dac)了。但我们有些芯片本身不带有dac,所以只能用pwm代替dac,pwm即脉冲宽度调制。这里只需要把dac的幅度值转换成pwm的占空比即可,例如16khz 8bit的声音转换成16khz 256阶占空比的pwm。但有一个问题,如果用16khz的pwm播放语音,声音是可以播放,但有一个16khz的谐波存在,这个声音会被人耳听到,所以需要更高频率的pwm,数据还是按照16khz更新。
我这里使用32khz的pwm,用16khz 8bit pcm格式的音频数据,8bit的数据对应一个byte,16khz采样,1秒种占用存储空间就是16k byte,f429有2m byte的flash存储空间,理论上可以存储2048k/16k = 128秒的音频。
下面是用nucleof429实现音频播放的具体过程:
一、配置pwm
1、用stm32cubemx建立工程,配置两个定时器tim1和tim2,tim用于pwm产生,tim2用于16khz数据更新。
tim1选择pwm互补输出(单通道也可以),将pe8和pe9复用为pwmn和pwmp。
tim1在apb2总线上,tim2在apb1总线上
所以tim1和tim2的时钟频率分别为180m和90m,系统时钟用hse输入的8mhz。
将tim1设置为32khz,即31.25us。8bit占空比,一个lsb为31.25us / 256 = 0.1220703125us = 8.192mhz,tim1 180m / 8.192m = 21.97265625,这里取整数22。所以实际的pwm频率为1/(180 / 22) *256 = 31.289us = 31.96khz
tim2 为90mhz,45分频后为2mhz即0.5us,周期125即62.5us = 16khz。
nvic开启tim2中断。生成工程名和目录后生成keil工程。
二、播放语音
1、先编译后,编写tim中断服务程序。
完成后,开启tim2中断和pwm,(pwm是互补输出,需要单独开启各个通道)
用逻辑分析仪测量输出波形。
如图所示,tim1 pwm为31.96khz,tim2为62.5us即16khz,结果正确。
接下来处理音频:
这里使用的音频是pcm格式,是未进行压缩编码的原始数据,可以直接给pwm输出。
音频处理的软件有许多,只要能把格式转为pcm即可,下面是我用cool edit这款软件做的音频格式转换。
选择菜单 文件--》批量转换
选择新的采样率和采样位数。
选择pcm格式。设置输出目录后运行批处理完成转换。
完成后的音频文件用winhex这个软件打开。
图中红框中的44个byte为pcm格式的文件头信息,后面的的数据为音频数据,数据全选后利用winhex的可选格式复制
将数据以c数组的形式导出,在工程目录下新建.h文件,将复制的文件粘帖到.h文件并在工程中include进来,定义起始和结束地址,数组的大小即为文件结束地址,数组用const修饰,可以将数据存储到flash中。
在tim2中,以16khz的速度更新pwm数据即可实现音频播放。
编译工程,下载到nucleof429板子上,在pe8或pe9上接一个喇叭即可听到声音。
以上用的音频采样是16k 8bit,要想提高音质,提高采样和bit数即可,音量可以用外接三极管或功放放大,音频数据也可以用adc采集后存储到spi flash后播放,实现录音回放。


智能照明控制系统在城市轨道交通的应用
智能变配电管理解决方案用上海力控元申ThingNet物联网云平台
龙芯、鲲鹏、海光等***,在重重压力之下砥砺前行
三星 LCD 订单全部交由鸿海;存储芯片供应商优先考虑数据中心服务器订单…
传输线的特征及分类
关于PWM实现语音播放的详细过程
模拟音频对HDTV将会提出更多的挑战性
浙江省科技厅厅长到访加速科技 Synology® 发布 DSM 7.1 Beta 测试版
人工智能为中国彩电行业插上了新翅膀
“差评”不断的iPhone12该不该换?
ADI新版模拟器件设计工具简化RF设计
智能汽车时代中国汽车行业将会面临什么样的机遇和挑战?
串口屏和并口屏的区别在哪里
湿膜的应用
台积电基于GAA技术的2nm制程将会在2025年量产
麒麟980将采用台积电7nm工艺,性能比麒麟970提升30%,还会抢先搭载5G基带
三相无刷电机的结构、工作原理及驱动方法
单片机控制电机原理以及程序怎么写
替换所有.v代码中字符串的方法
人工智能和自动化有着什么样的区别?