OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2459|回复: 3

请问下WAV文件的波形数据与PWM占空比怎么转换?

[复制链接]

3

主题

5

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2019-7-27
在线时间
5 小时
发表于 2020-1-13 00:03:33 | 显示全部楼层 |阅读模式
1金钱
我想用PWM播放8K采样率、8位宽度的音频数据,声音能播放出来,但都是伴随非常刺耳的杂音。比如8位的WAV波形数据,宽度是+128~-128;请问这个+128,-128,0x80,这些数据,转换成PWM占空比的话应该怎么算?

最佳答案

查看完整内容[请看2#楼]

首先WAVE内部的幅度数据似乎是有符号的,也就是0x0000-0x7FFF代表正半周幅度,越大幅度越大;0xFFFF-0x8000代表负半周幅度,负数表示越大幅度越大。但是你的PWM实际上只能输出单极性信号,这就需要进行移位输出。对WAVE拿出的原始电平采样数据视为uint16的形式对其加0x8000就行了,对于正半周,移位后幅度是0x8000-0xFFFF;负半周是0x7FFF-0x0000. 这样得出的uint16就是PWM占空比应有的数值,0x0000-0xFFFF对应PWM信号占空比0-100% ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

154

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
439
金钱
439
注册时间
2018-12-21
在线时间
126 小时
发表于 2020-1-13 00:03:34 | 显示全部楼层
首先WAVE内部的幅度数据似乎是有符号的,也就是0x0000-0x7FFF代表正半周幅度,越大幅度越大;0xFFFF-0x8000代表负半周幅度,负数表示越大幅度越大。但是你的PWM实际上只能输出单极性信号,这就需要进行移位输出。对WAVE拿出的原始电平采样数据视为uint16的形式对其加0x8000就行了,对于正半周,移位后幅度是0x8000-0xFFFF;负半周是0x7FFF-0x0000. 这样得出的uint16就是PWM占空比应有的数值,0x0000-0xFFFF对应PWM信号占空比0-100%的情况,如果PWM占空比没有那么精细,你把这个数值进行缩小就行了,比如除以0x0100就变成0x00-0xFF的8位PWM占空比数据。
这个操作的本质就是原来是+0x7FFF到-0x8000的范围,加上0x8000后就把负的幅度值移到正的幅度值上了,这样就可以单极性输出了。你最好了解一下正负数在计算机中的表示方式,这样处理就游刃有余。
回复

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
发表于 2020-1-13 14:33:32 | 显示全部楼层
帮顶!
回复

使用道具 举报

8

主题

154

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
439
金钱
439
注册时间
2018-12-21
在线时间
126 小时
发表于 2020-1-14 17:09:35 | 显示全部楼层
上面说的是16位,8位也一样,直接抽取原始幅度数据,加上0x80变成单极性幅度数据对应8位PWM占空比0x00-0xFF就行。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-19 14:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表