用AD转换声音信号,DA还原声音,一直实现不了,论坛里有人做过吗?

2019-07-20 23:10发布

最近一直在弄用AD转换声音信号,然后用DA还原播放声音,可是一直都实现不了,希望有人指导一下,谢谢!以下是主要的代码(我是采用DMA方式传输的)
AD主要代码(在AD的实验上加了DMA配置和定时器2中断实现AD开始转换):
#define ADC1_DR_Address    0x4001244C
u16 ADC_Value;
//DMA配置

//定时器2配置



DAC1主要代码(利用DMA传输、定时器6定时触发DAC)
#define DAC_DHR12R1_Address      0x40007408
uint16_t DAC_Value;



主函数主要部分
extern u16 ADC_Value;
extern uint16_t DAC_Value;

DMA_Config(ADC1_DR_Address,(u32)&ADC_Value,1);
再初始化其他函数后
while(1)
{
DAC_Value = ADC_Value;
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
49条回答
xuande
1楼-- · 2019-07-24 15:55
回复【31楼】伊轩海:
---------------------------------
原来是12位。。。我一直在按8位算。
前面说的采样率,是指点数,与每个点的位数无关!这个概念要搞清。

首先就是怎么传输12位的问题。只有先确定这个方式,才能核算指标。
a、串口一次只能发8位,所以至少要分两次。(不论给串口送多少位,串口只会把低8位作为有效数据,其他数据自动抛弃了!送4位是这样,24位也是这样。)
b、两次方式之一,是8+4,各占一帧。这显然是效率低的方法。那么要达到8K采样率,必须是 160K 波特率。
c、方式之二,是 8+4+4,前一个点的剩余4位与后一个点的4位拼起来,可以提高效率。
    即便如此,仍然需要120K波特率!而且,拼接、分拆都需要软件来做,实时性够不够?硬件有CPLD就好了。

综合考虑,把有效位数降低吧!一个点按8位进行AD、DA,这是最现实的方法。
音质当然比12位差一些,但做为一个实验项目,应当可以接受。否则,要重新设计硬件。
伊轩海
2楼-- · 2019-07-24 20:48
 精彩回答 2  元偷偷看……
xuande
3楼-- · 2019-07-25 00:02
回复【33楼】伊轩海:
---------------------------------
貌似可以设置为8位。
如果只能是12位,那么只取高8位就可以。想想道理。

伊轩海
4楼-- · 2019-07-25 02:24
回复【32楼】xuande:
---------------------------------
刚才把DA有效位降低到8位,喇叭有很大很大的噪音呢,看来8位不行,只能是12位了。。而且也不知道怎么把AD的有效位降低到8位
伊轩海
5楼-- · 2019-07-25 05:36
 精彩回答 2  元偷偷看……
xuande
6楼-- · 2019-07-25 09:05
8位不行 —— 这结论有点早。

现在又回到最初的方法,
在 AD 和 DA 只取高 8 位的前提下,
给 AD 输入标准正弦信号,串口输出到 DA,
对比两端的波形,频率、波形必须一致!否则就是软硬件有问题。
做好这一步,再说后面。

一周热门 更多>