VECENT_LIN 发表于 2023-6-21 09:16:03

ADC转换音频的问题

用p1.3口接入音频信号,ADC3通道转换,为什么没ADC好象没转换成功?


void ADC_Config()
{

        P1M1 = 0x08;P1M0 = 0x00;                // P1.3设置为高阻输入模式

        ADCTIM = 0x3F;                                                        // ADC时序设置:通道选择时间:1个时钟,通道保持时间:4个时钟,采样时间:32个时钟
        ADCCFG = 0x2F;                                                        // ADC频率设置:系统时钟/2/16,数据右对齐
        ADC_CONTR = 0xC3;

}


void main()                                                                    
{
       

        ADC_Config();
       
       WS2812_Init();
   int N=64,i;                                                           //变量初始化,64点FFT运算
        float offset;

while(!(ADC_CONTR & 0x20));
        offset=((float)ADC_RES*4+(float)(ADC_RESL%0x04)); //AD结果高8位左移2位,低2位不变,然后相加
       
        while(1)
        {       

                        for(i=0;i<N;i++)                                  //采集音频信号
                          {
                       
                                while(!(ADC_CONTR & 0x20));
                                        ADC_CONTR &= ~0x20;
                                   s.real=((float)ADC_RES*4+(float)(ADC_RESL%0x04)-offset)/4;//((((int)ADC_DATA-128)/2))*4;
                                   s.imag=0;
                          }
                          FFT(s,N);                                       //调用FFT函数进行变换
                          showbar();                                                        //显示频谱       
               

        }
}

VECENT_LIN 发表于 2023-6-21 09:24:59

关闭ADC就显示正常,加入ADC程序就没反映{:4_167:}

VECENT_LIN 发表于 2023-6-21 09:26:48

ADC设置应该问题啊,应该是启动转换,但是就是运行不了

32位8051 发表于 2023-6-30 11:30:48

楼主用的是什么型号呢,建议使用我们范例程序先测试下



梁工 发表于 2023-7-12 10:41:33

楼主可以参考下面FFT频谱的程序:
FFT频谱分析-STC32F12K54, USB-CDC虚拟串口送电脑显示
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=2808
(出处: 国芯论坛-STC全球32位8051爱好者互助交流社区)

13918210822 发表于 2023-8-7 08:28:00

梁工 发表于 2023-7-12 10:41
楼主可以参考下面FFT频谱的程序:
FFT频谱分析-STC32F12K54, USB-CDC虚拟串口送电脑显示
https://www.stcai ...

STC32F12K54 极限浮点乘法每秒可以达到多少?
拟用F12K54 作I2S和模拟采集,重采样和音频处理。然后usb/spi输出
如果浮点乘法够快,我可以把音频编码也放进去。请梁工指点一下?
如果浮点不够快,改定点乘法也有机会但是算法要改,可能对精度也有一点影响。
如果也想知道,定点乘法速度多少?
手册上虽然有指令集的机器周期说明,但是实际的情况作过FFT的你应该是最清楚的。谢谢啦

梁工 发表于 2023-8-7 10:33:01

13918210822 发表于 2023-8-7 08:28
STC32F12K54 极限浮点乘法每秒可以达到多少?
拟用F12K54 作I2S和模拟采集,重采样和音频处理。然后usb/s ...

复利计算来测试乘法速度:
for(ex=12.01f,fx=1.01f, i=0; i<1000; i++)        //1000次浮点运算 @60MHz 打开Cache. 加载硬件浮点库: 585us(包括IO驱动指示、循环控制)。
{
      P01 = 1;       //用于示波器看速度
      ex = ex * fx; // STC32F @60MHz 打开Cache,, 加载硬件浮点库: 0.500~0.600us计算一次浮点乘法.
      P01 = 0;
}

FFT计算幅度:
for(i=0; i<LENGTH; i++)
{
      FFT_A = FSqrtRoot((long)FFT_Real*FFT_Real + (long)FFT_Image*FFT_Image);                   //计算模值, STC32F @60MHz 打开Cache, 加载硬件浮点库+整数库: 286us, 2.234us/次.
}


你的音频编码不知道用的什么编码?对于我们的单片机,合适的音频编码有:PCM、DPCM、ADPCM、DM、mu-law、A-law、CVSD,那些压缩大、计算量大的算法(比如MP3),STC32F也支持不了的。
页: [1]
查看完整版本: ADC转换音频的问题