echo matlab,Echo Cancelation

Echo Cancelation

A speech recording includes an echo caused by reflection off a wall. Use autocorrelation to filter it out.

In the recording, a person says the word MATLAB®. Load the data and the sample rate, Fs=7418Hz.

load mtlb

% To hear, type soundsc(mtlb,Fs)

Model the echo by adding to the recording a copy of the signal delayed by Δ samples and attenuated by a known factor α: y(n)=x(n)+αx(n-Δ). Specify a time lag of 0.23 s and an attenuation factor of 0.5.

timelag = 0.23;

delta = round(Fs*timelag);

alpha = 0.5;

orig = [mtlb;zeros(delta,1)];

echo = [zeros(delta,1);mtlb]*alpha;

mtEcho = orig + echo;

Plot the original, the echo, and the resulting signal.

t = (0:length(mtEcho)-1)/Fs;

subplot(2,1,1)

plot(t,[orig echo])

legend('Original','Echo')

subplot(2,1,2)

plot(t,mtEcho)

legend('Total')

xlabel('Time (s)')

1bb12d22203df02a83832172a6859af7.png

% To hear, type soundsc(mtEcho,Fs)

Compute an unbiased estimate of the signal autocorrelation. Select and plot the section that corresponds to lags greater than zero.

[Rmm,lags] = xcorr(mtEcho,'unbiased');

Rmm = Rmm(lags>0);

lags = lags(lags>0);

figure

plot(lags/Fs,Rmm)

xlabel('Lag (s)')

75c8b90c90e9f307a9dba658ffa96124.png

The autocorrelation has a sharp peak at the lag at which the echo arrives. Cancel the echo by filtering the signal through an IIR system whose output, w, obeys w(n)+αw(n-Δ)=y(n).

[~,dl] = findpeaks(Rmm,lags,'MinPeakHeight',0.22);

mtNew = filter(1,[1 zeros(1,dl-1) alpha],mtEcho);

Plot the filtered signal and compare to the original.

subplot(2,1,1)

plot(t,orig)

legend('Original')

subplot(2,1,2)

plot(t,mtNew)

legend('Filtered')

xlabel('Time (s)')

80d6f7f3cd5a72033bd74c18c9678b6e.png

% To hear, type soundsc(mtNew,Fs)

See Also

Functions

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值