主要内容

基于滤波x LMS FIR自适应滤波器的有源噪声控制

这个例子展示了如何应用自适应滤波器通过有源噪声控制来衰减噪声。

有源噪声控制

在主动噪声控制中,人们尝试使用电声系统,利用测量传感器(如麦克风)和输出执行器(如扬声器)来降低不需要的噪声在空气中传播的音量。噪声信号通常来自某些设备,如旋转的机器,因此可以在噪声源附近测量噪声。有源噪声控制系统的目标是产生一种“抗噪声”,利用自适应滤波器在期望的安静区域中衰减不需要的噪声。该问题与传统的自适应噪声消除的不同之处在于:-无法直接测量所需的响应信号;只有衰减的信号可用。—有源噪声控制系统在适应过程中必须考虑二次扬声器到麦克风的误差路径。

有关主动噪声控制任务的更多实施细节,参见S.M. Kuo和D.R. Morgan,“主动噪声控制系统:算法和DSP实现”,Wiley-Interscience,纽约,1996。

二次传播路径

二次传播路径是抗噪声在静区内从输出扬声器到误差传声器的路径。下面的命令生成一个喇叭到错误麦克风脉冲响应,带宽限制在160 - 2000赫兹范围内,滤波器长度为0.1秒。对于这个主动噪声控制任务,我们将使用8000hz的采样频率。

Fs = 8 e3;% 8 kHzN = 800;% 800samples@8 kHz = 0.1秒流= 160;%低频带边缘:160hzFhigh = 2000;%上带边缘:2000hz延迟= 7;Ast = 20;% 20 dB阻带衰减Nfilt = 8;%过滤器订单设计带通滤波器以产生限带脉冲响应filtSpecs = fdesign.bandpass (“N Fst1 Fst2 Ast、“流,Nfilt Fhigh, Ast, Fs);带通=设计(filtSpecs,“cheby2”“FilterStructure”“df2tsos”...“SystemObject”,真正的);%过滤噪声以产生脉冲响应secondaryPathCoeffsActual =带通([0(延迟,1);...日志兰德(N-delayS 1) +(0.99 * 0.01)。*...符号(randn (N-delayS,1))。* exp (-0.01 * (1: N-delayS) '));secondaryPathCoeffsActual =...secondaryPathCoeffsActual /规范(secondaryPathCoeffsActual);t = (1: N) / Fs;情节(t, secondaryPathCoeffsActual“b”);包含(的时间(秒));ylabel (的系数值);标题(“真二次路径脉冲响应”);

估计次级传播路径

主动噪声控制的首要任务是估计二次传播路径的脉冲响应。这一步通常是在噪声控制之前执行的,使用合成随机信号通过输出扬声器播放,而不需要的噪声存在。下面的命令生成3.75秒的随机噪声以及误差麦克风上的测量信号。

ntrS = 30000;randomSignal = randn (ntrS, 1);要播放的合成随机信号secondaryPathGenerator = dsp。FIRFilter (“分子”, secondaryPathCoeffsActual。');secondaryPathMeasured = secondaryPathGenerator(randomSignal) +...%随机信号通过辅助路径传播0.01 * randn (ntrS, 1);%麦克风测量噪声

设计二次传播路径估计

通常,辅助路径滤波器估计的长度不像实际的辅助路径那么长,在大多数情况下不需要足够的控制。我们将使用长度为250分的二次路径滤波器,对应于脉冲响应长度为31毫秒。任何自适应FIR滤波算法都可以用于这一目的,而归一化LMS算法由于其简单性和鲁棒性而经常被使用。输出信号和误差信号的图表明,算法经过大约10000次迭代后收敛。

M = 250;亩= 0.1;secondaryPathEstimator = dsp。LMSFilter (“方法”“归一化LMS”“StepSize”亩,...“长度”, M);[y, eS, SecondaryPathCoeffsEst] = secondaryPathEstimator (randomSignal secondaryPathMeasured);n = 1: ntrS;人物,情节(y secondaryPathMeasured n, n, n, eS);包含(的迭代次数);ylabel (的信号值);标题(“使用NLMS自适应滤波器进行二次识别”);传奇(“期望信号”的输出信号误差信号的);

辅助路径估计的精度

次要路径脉冲响应估计的准确性如何?这个图显示了真实路径和估计路径的系数。只有真正的脉冲响应的尾部没有被准确估计。该残差对有源噪声控制系统在所选任务中运行时的性能没有明显的影响。

人物,情节(t, secondaryPathCoeffsActual...SecondaryPathCoeffsEst t (1: M),...t [secondaryPathCoeffsActual (1: M) -SecondaryPathCoeffsEst (1: M);secondaryPathCoeffsActual (M + 1: N)));包含(的时间(秒));ylabel (的系数值);标题(“二次路径脉冲响应估计”);传奇(“真正的”“估计”“错误”);

主要传播路径

要消除的噪声的传播路径也可以用线性滤波器来描述。下面的命令生成一个输入到错误的麦克风脉冲响应,带宽限制在200 - 800hz范围内,滤波器长度为0.1秒。

delayW = 15;流= 200;%下带边:200hzFhigh = 800;%上带边缘:800hzAst = 20;% 20 dB阻带衰减Nfilt = 10;%过滤器订单设计带通滤波器以产生限带脉冲响应filtSpecs2 = fdesign.bandpass (“N Fst1 Fst2 Ast、“流,Nfilt Fhigh, Ast, Fs);bandpass2 =设计(filtSpecs2,“cheby2”“FilterStructure”“df2tsos”...“SystemObject”,真正的);%过滤噪声以产生脉冲响应(delayW primaryPathCoeffs = bandpass2 ([0, 1);日志兰德(N-delayW 1) +(0.99 * 0.01)。*...符号(randn (N-delayW,1))。* exp (-0.01 * (1: N-delayW) '));primaryPathCoeffs = primaryPathCoeffs /规范(primaryPathCoeffs);人物,情节(t, primaryPathCoeffs“b”);包含(的时间(秒));ylabel (的系数值);标题(“主路径脉冲响应”);

要取消的噪音

典型的主动噪声控制应用包括旋转机械恼人的声音。在这里,我们综合产生噪音,可能来自一个典型的电动机。

主动噪声控制的初始化

最流行的主动噪声控制自适应算法是滤波x LMS算法。该算法利用二次路径估计来计算输出信号,其在误差传感器上的贡献会对不期望的噪声产生破坏性干扰。参考信号是在其源附近测量到的不希望听到的声音的嘈杂版本。对于这些信号统计,我们将使用长度约为44 ms、步长为0.0001的控制器滤波器。

% FIR滤波器用于模拟初级传播路径primaryPathGenerator = dsp。FIRFilter (“分子”, primaryPathCoeffs。');% Filtered-X LMS自适应滤波器,控制噪声L = 350;muW = 0.0001;noiseController = dsp。FilteredXLMSFilter (“长度”L,“StepSize”muW,...“SecondaryPathCoefficients”, SecondaryPathCoeffsEst);%正弦波发生器来合成噪声一个=。01 .01 .02 . 0.3 .4 . 0.3 . 0.07 .02 .01];La =长度(A);F0 = 60;k = 1:拉;F = F0 * k;阶段=兰德(La);%随机初始相位正弦= audioOscillator (“NumTones”,洛杉矶,“振幅”一个,“频率”F...“PhaseOffset”阶段,“SamplesPerFrame”, 512,“SampleRate”Fs);%音频播放器播放噪音之前和之后取消球员= audioDeviceWriter (“SampleRate”Fs);%频谱分析仪显示原始和衰减的噪声= dsp范围。简介(“SampleRate”Fs,“OverlapPercent”, 80,...“SpectralAverages”, 20岁,“PlotAsTwoSidedSpectrum”假的,...“ShowLegend”,真的,...“ChannelNames”, {“原始噪声信号”“减噪音”});

基于滤波x LMS算法的有源噪声控制仿真

本文对有源噪声控制系统进行了仿真。为了强调不同,我们在前200次迭代中运行系统时没有主动噪声控制。在取消之前,通过错误麦克风听它的声音,它具有这种发动机的工业“呜呜声”特征。

一旦启用了自适应滤波器,产生的算法在大约5(模拟)秒的自适应后收敛。将残差信号的频谱与原始噪声信号的频谱进行比较,我们发现大部分的周期分量都被大大衰减了。然而,稳态相消性能在所有频率上可能不是一致的。应用于主动噪声控制任务的现实世界系统常常是这样。听着错误信号,恼人的“牢骚”大大减少。

m = 1:400%通过添加随机相位的正弦波来生成合成噪声x = sin ();d = primaryPathGenerator(x) +...%通过主路径传播噪声0.1 * randn(大小(x));添加测量噪声如果< = 200%前200次迭代无噪声控制e = d;其他的%在200次迭代后启用主动噪声控制Xhat = x + 0.1*randn(size(x));[y, e] = noiseController (xhat d);结束球员(e);播放噪声信号范围((d, e));%显示原始频谱(频道1)%和衰减噪声(通道2)结束释放(球员);%释放音频设备释放(范围);释放谱分析仪