竞争性自适应权重cars matlab_自适应回声消除器简介

本文介绍了一种基于最小均方(LMS)算法的基本声学回声消除器。声学回声消除器对于许多现代通信产品是必需的。我确定你曾经遇到过在电话讲话时听到声音的时候,对吗?嗯,这是声学回声的一个例子。声学回声是一个常见的问题,这种问题是由于音频信号从附近物体反弹并且当麦克风只能拾取您的声音或者直接从扬声器麦克风对(如手机)耦合时耦合到麦克风中。没有取消这些影响,通信系统使用起来非常烦人!

cf7217829c2ce8b5598519d42302ecf0.png

图1

这里,来自扬声器的语音信号在声学上耦合到扬声器电话或免提蜂窝电话的麦克风中,其在远程信号源处被听到作为返​​回回声。回声由回声源的回声消除器通过上图中建模的系统抑制。假设信道具有由Z变换表示的采样数据脉冲响应:

96bce870f0ef891671de52d05d4e671f.png

回声消除器是一个长度为50个样本的抽头延迟滤波器。首先,我们将所需信号s(t)设为零,并用白噪声训练消除滤波器。作为概要,图1中的信号是:

语音信号:s(t)

回声:R(T)

声道:h(t)

声道输出= r(t)* h(t)(卷积)

麦克风输入:s(t)+ r(t)* h(t),所需信号加声学通道回声

回声消除器:h ^(t)

所需信号:y(t)目标是使声学通道与我们的回声消除器匹配,以便我们可以反转声学通道响应并仅在麦克风输入(t)处创建所需信号。所以让我们看一下Matlab代码中的内容:

clear all;

clf;

close all;

%acoustic channel frequency response

num = [1 0 0 0.5 0 .1];

den = [1 0 0 0 0 0];

[Hc,Wc] = freqz(num,den);

%---BUILD FM SWEEP---%

fs = 2*pi;

tmax = 10000;

f1=0;

f2 = .5;

tsweep = 0:499;

slope = (f2-f1)/1000;

F = slope.*(mod(tsweep,500));

t = 0:1:tmax;

fm = cos(2*pi*slope*t);

F = slope.*(mod(tsweep,500));

fm2 = cos(2*pi*(F).*tsweep);

fm2c = repmat(fm2,20,1);

fm2 = reshape(fm2c',1,10000 );

figure

plot([0:999],fm2(2001:3000))

%subplot(212)

%plot([-512:511]*1/(2*pi), 20*log10(abs(fft(fm2(1:500), 1024))))

grid on

%End building of FM sweep

trainlen = tmax;

%training signal

r_t = 1*rand(1,tmax);

%desired signal

s_t = 0;

%signal through channel

rt_ht = filter(num,den,r_t);

%signal through channel + desired

mic_in = s_t + rt_ht;

%LMS algorithm of echo canceller

reg1=zeros(1,50);

wts = (zeros(1,50));

mu = .07;

for n = 1:trainlen

wts_sv = wts;

reg1 = [r_t(n) reg1(1:49)];

err = mic_in(n) - reg1*(wts');

y(n) = err;

wts = wts + mu*(reg1*(err'));

end

%plots

figure

subplot(211)

plot(1:length(y), (y))

hold on

plot(1:10000, zeros(1,10000), 'color', 'r', 'linewidth', 2, 'MarkerSize', 2)

hold off

axis([ -.5 10000 -1 1.1])

grid on

title('Steady State (time response) Desired Signal = 0, trained with white noise')

subplot(212)

plot(1:length(y), 20*log10(abs(y)))

grid on

title('Log Magnitude Training Curve, trained with white noise')

[Hf,Wf] = freqz(wts_sv);

figure

subplot(211)

plot(Wc/pi, 20*log10(abs(Hc)))

grid on

title('Frequency Response of Channel')

subplot(212)

plot(Wf/pi, 20*log10(abs(Hf)),'color','r')

title('Frequency Response of Adaptive Canceller, trained with white noise')

grid on

在代码中,我们首先将声学通道响应添加到Hc和Wc变量中。然后我们构建一个FM扫描训练信号,用于训练回声消除器的第二部分。然后我们定义信号r_t,s_t,Ort_ht和mic_in以反映图1.现在出现了自适应消除器的大部分:我们用简单的迭代最小均方法训练它。

err=mic_in(n)−reg1∗wts′

然后更新权重

wts=wts+μ∗(reg1∗err′)

权重更新的推导是一个冗长的解释,我将不会在本文中介绍,但将很快发布一个单独的解释。 但是,更新减少到当前权重加上寄存器内容的μ倍乘以误差的转置。 让这一直到收敛,我们看到我们的算法在训练白噪声时找到最终的权重集,以达到所需的0信号。

f0788949ab4f85ddca30511462f18a89.png

我们可以看到回声消除器响应几乎完全收敛于声道的频率响应。

0ad5ca1338f2ef1296aee1bc708f3bac.png

本文关于在没有FM信号的情况下训练它的效果请打开下面链接进行查看:

https://www.eetoday.com/application/consume/201904/73000.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值