How to remove echo from wav file

5 views (last 30 days)
Lukas Gavornik
Lukas Gavornik on 10 May 2015
Commented: Seton Schroeder on 5 Feb 2018
Hello there,
I have a .wav file in the link below, where is a human voice and echo in the background. I want the echo removed. Is there anyone who can tell us how to do it in MATLAB? Thanks for your help.
  1 Comment
Seton Schroeder
Seton Schroeder on 5 Feb 2018
There have been many papers in the last 20 years that have tried to solve this problem; and there have been many different approaches. None that I have evaluated are that good. I've heard that the most promising algorithm for this is the MINT method, although it requires a great deal of data processing and processing may take from many seconds to many minutes.

Sign in to comment.

Answers (2)

Walter Roberson
Walter Roberson on 10 May 2015
This is not something I have studied, so I can only make a bit of a suggestion after looking around.
It looks to me as if maybe you could use Complex cepstral analysis requesting at least two outputs, to find the echo delay (I presume here that the echo delay is fixed and not the result of bouncing off of multiple surfaces.) And possibly if you use the three-output version to get nd and xhat, you could pass those into icceps() and that might possibly remove the delay.

Joseph Cheng
Joseph Cheng on 10 May 2015
I've also haven't studied that but i remember coming across a mathworks example in the past. I couldn't find the exact link but this example for 2015 seems to cover the same material.
  1 Comment
Walter Roberson
Walter Roberson on 10 May 2015
If I read that example correctly, it relies on two input signals, one containing what has recently come out of the speaker delivered from the far end, and the other what has been picked up by the local microphone, consisting of new speech together with an echo from what was played in the speaker. It is thus not directly relevant to the user's case in that the user only has the combined signal of new sound plus echo of existing sound. The user thus has to analyze each part to determine whether an echo of an earlier bit is present and if so filter it out while retaining whatever new is going on. That would make the first order of business to estimate the delay, such as by some cross-correlation. Once the delay is known a filter can be constructed to remove it.

Sign in to comment.

Categories

Find more on Simulation, Tuning, and Visualization in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!