打印
[STM32F1]

STM32 中的AD转换声音信号,DA还原声音,一直实现不了

[复制链接]
5223|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
伊轩海|  楼主 | 2015-1-14 21:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近一直在弄用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;

int main(void)
{
             NVIC_Configuration();                 uart_init(9600);                 //´

        TIM2_Configuration(1663,0x0);//44.1KHz,0x0表示不分频
        TIM2_NVIC_Configuration();
        DMA_Config();
        Adc_Init(ADC_Channel_2);                                  //初始化ADC1通道2         

    DMA_Config(ADC1_DR_Address,(u32)&ADC_Value,1);
   
   while(1)
   {
       DAC_Value = ADC_Value;
   }
}
沙发
liuhong198698| | 2015-1-14 22:23 | 只看该作者
你是用44.1kHZ的采样声音的话,要想DA还原的话必须使用内插函数SINX/X 才能完整地重建声音
你可以先不使用声音,你采样的正弦波,看你这种方法能不能还原正弦波

使用特权

评论回复
板凳
伊轩海|  楼主 | 2015-1-14 22:35 | 只看该作者
liuhong198698 发表于 2015-1-14 22:23
你是用44.1kHZ的采样声音的话,要想DA还原的话必须使用内插函数SINX/X 才能完整地重建声音
你可以先不使用 ...

什么是内插函数?

使用特权

评论回复
地板
liuhong198698| | 2015-1-14 22:41 | 只看该作者
就是你采用44.1Khz的采样,你在周期22us 之间要插入固定的值才能还原原信号,利用你采样得到的值,通过内插函数得出插入的的值DA值

使用特权

评论回复
5
liuhong198698| | 2015-1-14 22:45 | 只看该作者
这个内插函数 很有名 叫sinc 函数

使用特权

评论回复
6
伊轩海|  楼主 | 2015-1-14 22:46 | 只看该作者
liuhong198698 发表于 2015-1-14 22:45
这个内插函数 很有名 叫sinc 函数

呵呵,没用过,也不会用

使用特权

评论回复
7
戈卫东| | 2015-1-14 23:29 | 只看该作者
电路没有问题吧?

使用特权

评论回复
8
伊轩海|  楼主 | 2015-1-15 09:18 | 只看该作者
戈卫东 发表于 2015-1-14 23:29
电路没有问题吧?

我试过把声音采集的电路和播放的电路直接连起来,对着咪头说话,喇叭有声音,应该没问题

使用特权

评论回复
9
伊轩海|  楼主 | 2015-1-15 11:02 | 只看该作者
再补充以下,今天用了示波器测量AD输入和DA输出的图形,请各位请帮忙分析分析,

我用一个偏置了的正弦波输入给AD,同时DA输出。接着用示波器同时测AD端和DA端,出现以下的情况,蓝色代表AD输入,黄色代表DA输出,请帮忙分析一下
1、正弦波输入给AD,同时DA输出



2、正弦波输入给AD,同时DA输出,调节示波器上的周期旋钮




3、没有输入正弦波给AD,直接测量DA输出



使用特权

评论回复
10
2545958269| | 2015-1-15 18:50 | 只看该作者
怎么觉得这还不如用DSP

使用特权

评论回复
11
戈卫东| | 2015-1-15 19:16 | 只看该作者
方波哪来的?

使用特权

评论回复
12
伊轩海|  楼主 | 2015-1-15 20:07 | 只看该作者
戈卫东 发表于 2015-1-15 19:16
方波哪来的?

原来我在while函数中加了延时,产生的,后来去掉延时,DA可以还原声音了,只不过喇叭伴随“沙沙沙...”的声音,很奇怪,请教怎么会有“沙沙沙....” 的声响

使用特权

评论回复
13
戈卫东| | 2015-1-15 20:11 | 只看该作者
你的数据不连续,有断的地方?

使用特权

评论回复
14
伊轩海|  楼主 | 2015-1-15 21:10 | 只看该作者
戈卫东 发表于 2015-1-15 20:11
你的数据不连续,有断的地方?

没有断的地方,就是喇叭发出的声音伴随着“沙沙沙...”的响

使用特权

评论回复
15
戈卫东| | 2015-1-15 22:35 | 只看该作者
伊轩海 发表于 2015-1-15 21:10
没有断的地方,就是喇叭发出的声音伴随着“沙沙沙...”的响

DAC完全关闭有没有“沙沙”响?

使用特权

评论回复
16
伊轩海|  楼主 | 2015-1-16 09:08 | 只看该作者
戈卫东 发表于 2015-1-15 22:35
DAC完全关闭有没有“沙沙”响?

没有:)

使用特权

评论回复
17
戈卫东| | 2015-1-16 09:12 | 只看该作者
伊轩海 发表于 2015-1-16 09:08
没有

那还是你的数据供给有问题,某些点的数据被延迟了

使用特权

评论回复
18
烽~燧| | 2015-12-30 18:39 | 只看该作者
戈卫东 发表于 2015-1-16 09:12
那还是你的数据供给有问题,某些点的数据被延迟了

你好,你以前弄的声音采集还原系统调试好了没,
我调了一个多星期了,很好的声音信号采集输出后带有很多杂音,能不能指点一下,谢谢
我的QQ783251895

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

72

帖子

4

粉丝