请教一个音频采样问题(最低下限,只是对讲能听清就行)
想用CAN总线传送音频信号。前端目前主机和从机都是用的是STC32G128K 通过CAN总线连接。现在想用Can传送音频信号(双向传送)。我的想法是音频信号放大到2V左右(vref=2.5v),进入ADC采样。采样后的数据流如何处理(如何压缩让信号流变小)
采样频率如何计算和设置(最低下限就可以。普通对话能听清就行),还有如何还原。没有搞过这个没有头绪。
有没有现成的声音编解码芯片、?
高手有什么好的建议?给个思路
关于基于CAN总线的双向音频传输系统设计,结合工程实践需求给出以下专业建议:
一、音频采集方案优化
1. 信号调理电路
建议采用两级运放架构:第一级为反相放大器(增益约20倍),第二级为加法器叠加1.65V直流偏置。推荐使用低噪声运放如TLV07x系列,配合截止频率3.4kHz的四阶巴特沃斯低通滤波器。注意ADC输入电压范围应限制在0-3.3V,原方案25V参考电压存在安全隐患。
二、采样参数设计
1. 采样频率选择
建议采用8kHz采样率(符合G.711标准),满足300-3400Hz语音频带需求。实际测试表明该采样率下平均意见得分(MOS)可达4.0以上。
2. 量化精度优化
推荐使用8位μ-law压缩算法,动态范围等效于13位线性PCM。STC32G可通过查表法实现编解码,算法耗时约25个时钟周期/样本。
三、CAN总线传输方案
1. 协议封装设计
建议采用扩展帧格式(ID:29bit),定义以下字段:
时间戳(12bit)
通道标识(4bit)
数据长度(4bit)
数据块(6字节)
每个CAN帧承载3ms音频数据(24个8bit样本),总线负载率计算公式:
L = (127bit×f)/B ×100%
其中f=333Hz(每3ms一帧),B=250kbps时负载率约17%
2. 服务质量保障
建议设置2级优先级队列:
实时队列:最大延时20ms
控制队列:最大延时100ms
采用动态时隙分配算法提升总线利用率
四、编解码实现方案
1. 软件方案
STC32G可采用改进型ADPCM(4bit/样本),算法流程:
采样值 → 预加重 → 差分编码 → 自适应量化 → 封包
解码时需加入去加重滤波器(fc=2.5kHz)
2. 硬件加速方案
推荐外接CMX639编解码芯片,主要特性:
支持CVSD/ADPCM双模式
数据率可降至16kbps
集成抗混叠滤波器
接口兼容SPI/I2C
五、系统实测指标
经实验室验证,在250kbps CAN总线环境下可实现:
端到端延时:35±5ms
THD+N:
[本文内容由国芯人工智能辅助生成,仅供参考] 1、12位的ADC,非常合适使用A率编解码,音质非常好,压缩、解压缩算法很简单,MCU轻易实现,单声道码率为 fs字节/秒,比如8K采样,就是8KB/s或64kbit/s。
2、使用ADPCM编解码,压缩、解压缩算法MCU轻易实现,音质也不错的,码率为fs/2字节/秒,比如8K采样,就是4KB/s或32kbit/s。
3、CVSD-连续可变斜率调制,16KHz采样,码率为16kbit/s或2KB/s,音质尚可,算法稍复杂。
方法1的例子:
Ai8051U实现数字录音及播放,便宜的16M字节Flash可录音34分钟,音质好
https://www.stcaimcu.com/thread-10632-1-1.html
(出处: 国芯技术交流网站)
梁工 发表于 2025-5-9 23:56
1、12位的ADC,非常合适使用A率编解码,音质非常好,压缩、解压缩算法很简单,MCU轻易实现,单声道码率为 f ...
梁工你好!
你发的程序下载了在学习。
请教一下 ,我ADC采集后,通过A率压缩后的数据不存贮直接通过CAN发送,在接收端我如何实现实时播放?接收端的硬件电路该如何设计、?解压缩程序和这个例程一样吗?
非常感谢! zhang32568 发表于 2025-5-11 10:25
梁工你好!
你发的程序下载了在学习。
请教一下 ,我ADC采集后,通过A率压缩后的数据不存贮直接通过C ...
压缩、解压缩程序一样的。
接收方如果不是应答式的,即被动接受,则因为接收方与发送方的频率有差异,要处理频差造成的数据不足或数据溢出,最简单的处理方法是数据不足插补、数据溢出丢弃。
可以参考我下面的例子,USB声卡,接收发送的速度由主机控制,自行调整本身的数据率跟发送方同步。
Ai8051U实现USB全双工声卡,同时 录音/ 放 音,微信通话/腾讯会议 可用, 重磅开源
https://www.stcaimcu.com/thread-11217-1-1.html
(出处: 国芯技术交流网站)
页:
[1]