How do I remove background noise from a sound wave?

71 ビュー (過去 30 日間)
David Koenig
David Koenig 2013 年 11 月 17 日
回答済み: pravin m 2019 年 11 月 5 日
I have a sound wave y(1:441000) gathered using a microphone and I have background n(1:441000) also gathered by the microphone. I have tried removing the background noise using a script something like:
Y=fft(y);
N=fft(n);
Yclean=Y-N;
yClean=ifft(Yclean);
However, yClean is not correct and is backwards in time. Do you have any suggestions?
Thanks,
Dave

採用された回答

Pedro Villena
Pedro Villena 2013 年 11 月 18 日
Create and Implement LMS Adaptive Filter to remove the filtered noise from desired signal
mtlb_noisy = y;
noise = n;
% Define Adaptive Filter Parameters
filterLength = 32;
weights = zeros(1,filterLength);
step_size = 0.004;
% Initialize Filter's Operational inputs
output = zeros(1,length(mtlb_noisy));
err = zeros(1,length(mtlb_noisy));
input = zeros(1,filterLength);
% For Loop to run through the data and filter out noise
for n = 1: length(mtlb_noisy),
%Get input vector to filter
for k= 1:filterLength
if ((n-k)>0)
input(k) = noise(n-k+1);
end
end
output(n) = weights * input'; %Output of Adaptive Filter
err(n) = mtlb_noisy(n) - output(n); %Error Computation
weights = weights + step_size * err(n) * input; %Weights Updating
end
yClean = err;
  1 件のコメント
Tahira Batool
Tahira Batool 2017 年 4 月 30 日
And what if one does not have a separate noisy signal to be removed from an original signal ,then how can we remove background noise from a signal?

サインインしてコメントする。

その他の回答 (3 件)

Umair Nadeem
Umair Nadeem 2013 年 11 月 18 日
It would be easier if you could upload the noisy signal too. Save the variable y which supposedly has the noisy signal in a .mat file using save command and attach it with your post. Some frequency analysis could be done if the signal is available.
Also try to provide info about the signal frequency (if known), and the sampling frequency which you used to sample the data.

pinreddy chaitanya
pinreddy chaitanya 2018 年 10 月 22 日
編集済み: Walter Roberson 2018 年 10 月 22 日
weights = weights + step_size * err(n) * input; %Weights Updating
what is the use of this line
  1 件のコメント
Albin Lindmark
Albin Lindmark 2019 年 7 月 8 日
It is to update the weights of the adaptive filter.

サインインしてコメントする。


pravin m
pravin m 2019 年 11 月 5 日
mtlb_noisy = y;
noise = n;
% Define Adaptive Filter Parameters
filterLength = 32;
weights = zeros(1,filterLength);
step_size = 0.004;
% Initialize Filter's Operational inputs
output = zeros(1,length(mtlb_noisy));
err = zeros(1,length(mtlb_noisy));
input = zeros(1,filterLength);
% For Loop to run through the data and filter out noise
for n = 1: length(mtlb_noisy),
%Get input vector to filter
for k= 1:filterLength
if ((n-k)>0)
input(k) = noise(n-k+1);
end
end
output(n) = weights * input'; %Output of Adaptive Filter
err(n) = mtlb_noisy(n) - output(n); %Error Computation
weights = weights + step_size * err(n) * input; %Weights Updating
end
yClean = err;

カテゴリ

Help Center および File ExchangeSignal Generation and Preprocessing についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!

Translated by