用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-23 04:57
14L,第一个问题,怎么样了?
伊轩海
2楼-- · 2019-07-23 06:48
 回复【19楼】 xuande :
#xuande
---------------------------------
1、好像波形挺完整的,黄 {MOD}表示AD端,蓝 {MOD}表示DA端,只不过感觉DA的波形不够平滑,采样频率是40KHz


xuande
3楼-- · 2019-07-23 10:28
1、波形进步多了。但是二者频率变了,应当是DA的触发时钟与AD的时钟在频率上不一致。还是要朝完全一致来努力,才能无失真地还原。

2、到这一步,功放如果正常,应当可以听到声音了。声音可能不完美,比如音量太大会失真,以及有变调。变换几种不同频率试试。

不错,快了。
铜河
4楼-- · 2019-07-23 12:27
 精彩回答 2  元偷偷看……
伊轩海
5楼-- · 2019-07-23 18:05
 精彩回答 2  元偷偷看……
xuande
6楼-- · 2019-07-23 23:56
回复【23楼】伊轩海:
---------------------------------

1、前面问过你采样定理的事,你可以查查,即:采样速率必须大于信号最高频率的两倍,才能无失真重现原信号。
   对于音频,40K采样率,已经是最低要求了。高保真的设备,可以达到上百K。
2、你的程序。
  我做过类似定时器触发AD的设计,根本不用开溢出中断,溢出信号直接在CPU内部触发AD,开始转换。
  就是说,完全是硬件实现触发,无需软件干预。所以,开中断无用,反而误事。
  有了软件参与,这软件实现的“时钟”可能就不准确了。
  DA,也是同样,完全用内部硬件实现。

  想想,看怎么实现。做到这一点,水平是个大提高。


一周热门 更多>