• 收藏
  • 加入书签
添加成功
收藏成功
分享

基于自适应FIR滤波器的啸叫抑制系统设计

吴岳敏 李福源 马彬 刘凌云 罗敏 陈志楚
  
工程技术探索
2023年5期
湖北汽车工业学院 电气与信息工程学院 湖北 十堰 442002

打开文本图片集

摘要:对讲设备在日常生活中被广泛使用,但是现有的对讲终端使用时经常会产生啸叫,由于啸叫产生的信号幅值远大于正常语音信号幅值,严重影响使用体验,本文设计了基于自适应FIR带阻滤波器的啸叫抑制系统,通过对比分析语音信号和设定的基准信号,检测是否产生啸叫及产生的啸叫的频率,根据检测的啸叫频率自动选择相应频段的带阻滤波器进行啸叫抑制。通过实验验证,在接入啸叫抑制系统之后,放音设备在全频段范围内音量调节到100%时没有啸叫产生。

关键词:自适应FIR带阻滤波器;信息处理;啸叫抑制;DSP;

引言

在银行、政府办事窗口、学校教室等场合,对讲设备的使用率极高,但是在使用中,对讲系统经常会产生啸叫,严重影响了通话效果和通话质量,因此需要对对讲系统的啸叫问题进行分析,并设计相关系统来解决啸叫问题。论文提出一种基于FIR带阻滤波器的啸叫抑制系统,可以有效解决系统啸叫问题。

1 系统原理及总体设计

1.1 系统原理

对讲系统中,由于输入端的话筒将扬声器播放出来的声音反复拾取形成正反馈,从而将声音不断放大,当音量超过一定的限度时,这种同频声音信号就会引起放大电路回授,产生啸叫[1-4]。

当产生啸叫时,啸叫信号的幅值远大于正常语音信号幅值,并且啸叫信号是一个单一频率的正弦波。啸叫的频率主要受设备与声音源之间的距离和角度的影响。设备正对时,啸叫频率只和距离相关,可以通过语音信号和设定基准信号比较的方法将啸叫信号整形成方波,检测相应方波信号的频率后利用DSP进行响应频段的带阻滤波来抑制啸叫[5-7]。

1.2 系统总体方案设计

总体设计方案为:mic拾取的语音信号首先经过截止频率Fc=5KHz的低通滤波器滤波来降低噪声,然后再经过前级放大电路的放大后分成两路。其中一路信号和基准电压进行比较,将啸叫信号整形成方波供DSP检测啸叫频率;另一路经过ADC转换为数字量,由DSP根据采集到的啸叫频率自动匹配相应频段的FIR带阻滤波器,经过滤波后通过DAC输出,最后进行二次放大后输出给扩音器。系统总体方案设计如图1所示。

2 系统的硬件设计

2.1 单片机系统设计

本系统的主控板选择TI公司的C2000 LaunchPad,LAUNCHXL-F28027平台包含了F280287所需要的硬件及软件。由于DSP28027有一个自带的浮点运算库,能大大提高FIR中卷积运算的速度,所以选择此款主控。

ADCINA0、Xint1分别用来I90输出到对讲终端路语音信号的采集和啸叫频率的检测,ADCINA1、Xint2分别用来对对讲终端输出到I90的语音信号进行采集和啸叫频率的检测。

2.2 DAC模块设计

DAC模块的主要功能是将数字语音信号转化成模拟的语音信号并输出,选用的是TLV5636芯片。此款芯片是12位串行DAC芯片,指令包含16位,高4位是控制位,低12位是数据位,供电电压2.7-5.5V,可选外部基准电压或是内部基准电压。

采用两路DAC复用FS、SCLK、DIN的设计,通过CS1和CS2控制哪一路选通。设定基准电压为内部2.048V。

2.3 低通滤波和差分放大模块设计

低通滤波主要进行噪声抑制,前级放大用于将信号进行初步放大,方便DSP进行ADC采集和处理。由于运算放大器采用单电源供电,若直接进行语音信号的放大将使得信号产生失真,所以要对输入的语音信号叠加一个直流分量进行幅值抬升,然后再对信号进行处理。设计中采用整体抬升的方案能确保运放工作在线性区,避免信号在放大时产生失真。低通滤波及差分放大电路如图2所示。

系统采用二阶滤波器进行滤波,二阶响应除了使高频渐近线的陡度增加了两倍的斜率,还能对w/w0=1附近频域的幅度形状进行调节增加自由度。在实际应用中,Q的范围在0.5≤Q≤100,而接近于1的那些值最为常用。对于低Q值而言,从一条渐近线到另一条的过渡是平缓的,而对于高Q值,在w/w0=1的附近频带内有|Hlp|>1,此时Q的最大值是Q=0.707。这条曲线最接近陡峭模型,本次设计中取Q为0.7。

当设定截止频率为5KHZ,选择C1=C4=0.01uF时。经过计算R3=R4=3.18KΩ,实际取3KΩ,此时的截止频率为5.3KHz,符合本系统设计要求。设定Q=0.7,Avf=1.57,再根据阻抗匹配。计算可得R=44.06KΩ用R12=R22=22KΩ串联近似,Rf=25.08KΩ用R6=3KΩ和R7=22KΩ串联近似,差分放大设定Av=2。

2.4 次级放大模块设计

次级放大模块主要起二次放大语音信号的作用,受DSP28027采集信号不能超过3.3V的影响,前级放大不能太大,并且后级的信号是进行了啸叫抑制后的纯净的语音信号,再进行放大能使语音信号更清晰,声音更大。经过电压跟随器阻抗匹配后进行差分放大,系统采用LM358运算放大器对信号进行放大,放大倍数为2倍,采用将信号整体抬升2.5V的设计方案,经过电容C19隔离直流后输出。次级放大模块电路如图3所示。

3 系统的软件设计

3.1软件流程图设计

系统上电后,首先进行定时器、外部中断、ADC、DAC、FIR滤波等模块的初始化。由于采用定时器+外部中断的组合测量啸叫频率,会导致主控频繁响应中断,如果啸叫信号是1KHz那么就是1ms进一次外部中断。但是根据奈奎斯特采样定理,保证最低允许的抽样率是通带限制信号频率宽度的2倍,就可以避免混叠现象。因此FIR滤波的Fc采样频率要大于10KHz,为了更好的还原语音信号,设定Fc=20KHz,50us进行一次定时器中断。如果不做处理,两个这种频繁的中断响应一定会相互影响,从而造成系统不能正常工作。

为了避免频繁的中断响应造成系统工作失常,采用分时段处理的方法,即以1s为周期,前50ms进行啸叫频率检测,后950ms进行FIR滤波,在空闲时进行ADC采样。软件流程如图4所示。

3.2 啸叫检测模块设计

啸叫频率检测采用的是变形的测频法和测周法,由于时间限制需要使用50ms检测出啸叫频率,所以不能使用测频法测频。经过实际测试啸叫的频段是2.5-4.5KHz,定时器的最小单位是50us,可以推导出测周法最大误差范围是11.1%-14.28%(F=2.5KHz时)。

啸叫频率检测程序流程图如图5所示。算法是:以上升沿触发信号为计时起点,统计在下一个50ms计时之前的周期T的个数N。测频法的最大误差公式和测周法一样,此时的T代表的是50ms到达后下一个信号周期到来的时间,范围是50ms±1/Fc。那么误差的范围是0.099-0.101%,大大的缩小了误差。

3.3 FIR滤波模块设计

FIR滤波模块形成多个不同频带的带阻滤波器,主要实现对啸叫信号的抑制。使用Matlab的Filter Designer & Analysis Tool工具设计带阻滤波器。通过设置相关参数,从MATLAB工作空间导出滤波器,直接指定滤波器系数,可以快速设计出FIR或者IIR数字滤波器[16]。

在MATLAB工作空间中利用fdatool命令,进入FDATOOL主界面。

使用此工具设计带阻滤波器,需要设置以下几个参数:specific order(滤波阶数)、Fs(采样频率)、Fpass1(低频段通带截止频率)、Fstop1(低频段阻带截止频率)、Fpass2(高频段通带截止频率)、Fstop2(高频段阻带截止频率)、Wpass1(低频段通带最大衰减)、Wstop(阻带最小衰减)、Wpass2(高频段通带最大衰减)。三个带阻滤波器的参数如下:

1)2.0KHz-2.95KHz的带阻滤波器specific order=31,Fs=20KHz,Wpass1=3dB,Wstop=20dB,Wpass2=3dB,Fpass1=2000Hz,Fstop1=2500Hz,Fpass2=3000Hz,Fstop2=3500Hz;

2)2.95KHz-3.95KHz的带阻滤波器specific order=31,Fs=20KHz,Wpass1=3dB, Wstop=20dB,Wpass2=3dB,Fpass1=2500Hz,Fstop1=2900Hz,Fpass2=3500Hz,Fstop2=3900Hz;

3)3.95KHz-5.0KHz的带阻滤波器specific order=31,Fs=20KHz,Wpass1=3dB,Wstop=20dB,Wpass2=3dB,Fpass1=3500Hz,Fstop1=3900Hz,Fpass2=4500Hz,Fstop2=5000Hz;

当检测到的啸叫信号频率处于2.0KHz-2.95KHz时选用2.0KHz-2.95KHz的带阻滤波器;处于2.95KHz-3.95KHz时选用2.5KHz-4.5KHz的带阻滤波器;处于3.95KHz-5.0KHz时选用3.5KHz-5.0KHz的带阻滤波器;检测到其它频带时则认为是没有产生啸叫,直接DAC输出。2KHz-3.5KHz滤波程序如下:

Fs=20000,Fpass1=2000,Fstop1=2500,Fstop2=3000,Fpass2=3500,Wpass1=3,Wstop=20,

Wpass2=3

float fHn1[FIRNUMBER]={

0.02213,0.07793,-0.06375,0.06024,0.07796,

0.05644, 0.00648,-0.06790,-0.08557,-0.04202, 0.03720,0.09636,0.08943,0.01682,-0.07093,  0.89026,-0.07093,0.01682,0.08943,0.09636,

0.03720,-0.04202,-0.08557, 0.06790,-0.00648,  0.05644,0.07796,0.06024,-0.06375,0.07793,  0.02213};//2KHz-3.5KHz带阻

3.4 DAC模块设计

DAC实现的是将数字信号还原成模拟信号输出,本设计选用的是12位串行的TLV5636 DAC芯片。采用串行I/O口实现数据传输,GPIO1、GPIO2、GPIO3、GPIO4、GPIO5为数字I/O输出引脚,分别对应FS、CS1、SCLK、DIN、CS2,主要用来控制DAC输出。当CS为低电平时允许数据写入,FS出现一个下降沿时开始进行数据传输,在每一个SCLK的下降沿读取数据,当数据读取完毕后,FS由低电平跳变为高电平,表示数据读取完成,然后再拉高CS禁止输入,两片TLV5636芯片通过CS片选信号决定哪块芯片使用。

4 系统测试

考虑到啸叫的产生原因由两个,一个是单个设备之间MIC和喇叭对声音的回授造成的,另外一个是多个设备工作是相互串扰导致的。所以本次测试分成单套设备测试和两套设备测试。

4.1单套设备测试

为了测试隔音效果,采用实验室门来隔音。将I90放在门外,对讲终端放在门里面,相距1m,用手机在I90 MIC端播放音乐,播放时音量从10%开始,以10%为步进,测试两路的啸叫情况。经过实际测试,未使用本次开发系统时,音量调节到50%的时候距离1m就会产生啸叫,在接入了基于自适应FIR带阻滤波器的啸叫检测和抑制系统后,将音量调节到100%也不会产生啸叫。

4.2两套设备测试

同时对两套设备进行测试,即将两套设备的I90放置在室外,间隔50cm;对应连接的对讲终端放在室内,间隔50cm;每套设备的I90和对讲终端间距1m进行测试。正常播放音乐时,将音量从10%开始,每次增加10%直到100%为止,测试全程都无啸叫产生。

5 结论

经过实际测试,基于自适应FIR滤波器的啸叫抑制系统能够实现对啸叫频率的检测和啸叫的抑制,解决了对讲系统啸叫问题,提升了对讲系统语音通话效果,研究达到预期目标。

参考文献:

[1]杨飒,邢凤闯.基于高频谐振功率放大电路分析的仿真教学研究[J]. 广东第二师范学院学报,2020(5):98-105.

[2]陈梦凡,郭 涛,啜燕军,畅彦祥,万 晨.一种可变增益的音频放大电路设计及实现[J].电子设计工程,2022,30(7): 1-5.

[3]熊宇鹏,方如意,黄 煜,陈炳权.基于STM32的非线性失真放大器设计与测试分析[J].电子设计工程,2022,30(7): 53-57.

[4]杨川,张小波,牟琪琦,周维川.一种带啸叫检测与抑制的D类功放系统设计[J].现代制造技术与装备,2021(11):16-19.

[5]刘 健,张卫平,毛 鹏.基于运算放大器的前置电路误差分析及补偿[J].电子设计工程,2022,30(7):115-119.

[6]李娜.用于数字对讲机的解调、音量调节及啸叫抑制技术研究[D].北京工业大学, 2020.

[7]甘华国.基于深度学习的音频啸叫处理方法研究[D].广州大学,2021.

湖北省教育厅青年人才项目(Q20181804)资助

吴岳敏(1986—),男,湖北武汉人,硕士研究生,讲师。研究方向:测控技术及数控技术。

*本文暂不支持打印功能

monitor