gcpwd123 发表于 2023-8-28 14:30:55

声音信号与ADC

有一个做实际项目可能遇到影响算法性能的问题希望在这得到解答,在声源发出声音信号通过麦克风以60dB的增益采集,采集后的数据又经10倍的同相比例放大器对该信号放大,因为H7的ADC只能接收正的ADC,因此对该信号进行抬升后,通过ADC输入至单片机。我如果想要在KEIL程序中恢复原来采集的信号应该怎么处理?

Blake 发表于 2023-8-28 17:04:55

60db是放大了1000倍,后面运放还放大了十倍,总共放大了一万倍,但是同向运放的放大倍数=1+Rf/Rg。要确认一下运放是放大了10倍还是11倍。 剩下就是换算成电压,减去抬升电压,除放大倍数就是声源发出的信号。

Blake 发表于 2023-8-28 17:07:36

不过还有一个声压级,是麦克风灵敏度的电信号和声压Pa的关系,不知道你想要的具体是对应什么单位的信号。

gcpwd123 发表于 2023-8-28 18:04:10

Blake 发表于 2023-8-28 17:07
不过还有一个声压级,是麦克风灵敏度的电信号和声压Pa的关系,不知道你想要的具体是对应什么单位的信号。

您好,非常感谢您的答复。我采的这个信号大约为一个正弦信号,我想在算法中将该信号还原,大概的处理如下不知道是否正确 请您帮我看下 (我设为两个参数,因为在单片机中使用不知道是否正确)
e_adc=Get_Adc(ADC_CHANNEL_3); //STM32H7获得ADC的值 e_adc是我设置用于存储该ADC的参量
en=(float32_t)(e_adc/10000);//en=0~65535 //前面提到放大了10000倍我将它除1W在强转float类型便于应用
en=(en-32768)/32768;//        en=-1~1 //将参数进行归一化处理便于后续应用

Blake 发表于 2023-8-29 09:02:32

gcpwd123 发表于 2023-8-28 18:04
您好,非常感谢您的答复。我采的这个信号大约为一个正弦信号,我想在算法中将该信号还原,大概的处理如下 ...

你这个如果是12位的AD,应该要先吧AD值减去32768,然后在换算成电压值或者直接除10000也可以,如果你想要的只是数据,数据是什么单位的无所谓,那AD值直接减去32768就可以直接用了。
en=(float32_t)(e_adc/10000);//en=0~65535 你这句之后 en的范围就不是0-65535

Blake 发表于 2023-8-29 09:03:08

gcpwd123 发表于 2023-8-28 18:04
您好,非常感谢您的答复。我采的这个信号大约为一个正弦信号,我想在算法中将该信号还原,大概的处理如下 ...

你这个如果是12位的AD,应该要先吧AD值减去32768,然后在换算成电压值或者直接除10000也可以,如果你想要的只是数据,数据是什么单位的无所谓,那AD值直接减去32768就可以直接用了。
en=(float32_t)(e_adc/10000);//en=0~65535 你这句之后 en的范围就不是0-65535

gcpwd123 发表于 2023-8-29 15:20:54

Blake 发表于 2023-8-29 09:03
你这个如果是12位的AD,应该要先吧AD值减去32768,然后在换算成电压值或者直接除10000也可以,如果你想要 ...

好的 非常感谢我改下看看
页: [1]
查看完整版本: 声音信号与ADC