请问全志R329如何使用DMIC的高通滤波寄存器滤掉低频噪声?
本回答来源全志R329如何使用DMIC的高通滤波寄存器滤掉低频噪声?
问题描述
客户使用DMIC录音,想通过配置高通滤波寄存器,滤掉800hz的噪声
与高通滤波相关的寄存器:
HPF_EN_CTR: 0x38
HPF_COEF_REG: 0x3c
HPF_GAIN_REG: 0x40
解决方案
只需要更改HPF_COEF_REG中的值即可,假如效果没有达到预期,还请找出噪声来源,从源头上解决。
coef值与截止频率的关系是Fc=fs*(1-coef)/2π,其中fs是采样频率。
coef的值是3.24格式,也就是有效位是27bit,3个整数位,24个小数位,默认值为0x00FFAA45,换算成10进制就是0.99869,当采样频率是48k时,默认设置的截止频率Fc=48k *(1-0.99869)/2π = 10Hz。
下面演示如何通过配置HPF_COEF_REG寄存器滤掉100hz的正弦波。
使用audiocodec播放100hz正弦波。
HPF_COEF_REG使用默认值,DMIC使用采样频率16k录音,保存文件为100hz_default.wav。
截止频率为100Hz的话,经计算得出coef值为0.96075,因此HPF_COEF_REG修改为0x00f5f1db,DMIC使用采样频率16k录音,保存文件为100hz_setHPF.wav。
两者的音频波形如下,可见100hz_setHPF的波形中,录回正弦波的db值比100hz_default更小。
因为驱动中并没有对该寄存器进行操作,所以目前只有硬改寄存器的方式进行配置,之后会考虑在dts中添加截止频率的配置项。