2017-01-01 6 views
0

Я делаю эксперименты по технике фильтрации для снижения шума. Мои образцы в наборе данных - это аудиофайлы (.wav), поэтому у меня есть: оригинальные звуковые файлы для записи, и я смешиваю их с шумом, поэтому я получаю смешанные (шумные сигналы), передаю эти шумные сигналы через алгоритм фильтрации, выходы фильтруются или шумоподавляются аудиосигналы.SNR для аудио файлов .wav и объективных мер для оценки методов фильтрации

Таким образом, в общей сложности у меня есть следующие:

  1. оригинальных звуковых файлов (без шума)
  2. шума (которые должны быть добавлены к исходным сигналам)
  3. смешанные (Шумные файлы)
  4. Отфильтрованный (уменьшенный шум)

Мне нужно получить, сколько дБ фильтр может уменьшить. Я думаю о SNR как мера, которая могла бы дать такое представление об эффективности алгоритма фильтрации и сравнении перед фильтрацией и после фильтрации.

Так любезно ли кто-нибудь знает:

  1. ли SNR хорошая объективная мера для оценки эффективности алгоритма и измерения усиления?
  2. Есть ли другие подходящие объективные меры, которые могут использоваться в в этом случае?
  3. Какая ситуация, если в полевой записи уже есть шум, и мне не нужно добавлять шум? (Шум в моем случае ветер)

Вот простой MATLAB код, который я написал для вычисления SNR:

[signal]=audioread('Original.wav'); 
[noise]=audioread('Noise.wav'); 
[noise_reduced_signal]=audioread('Filtered.wav'); 
[noisysignal]=audioread('Noisy.wav'); 

snr_before = mean(signal.^ 2)/mean(noise .^ 2); 
snr_before_db = 10 * log10(snr_before) % in dB 
%===================================================================% 
% After noise reduction, the residual noise can be calculated as the difference 
% of the wanted signal and the actual signal. Calculation of SNR is then straightforward: 
%===================================================================% 
snr_after = mean(signal .^ 2)/mean(noise_reduced_signal .^ 2); 
snr_after_db = 10 * log10(snr_after) % in dB 
Diff = snr_after_db - snr_before_db; 
disp(['Diff = ' num2str(Diff) ' dB']) 

ответ

0

отношения сигнал-шум является хорошим показателем качества, если вы заинтересованы в доля шума, который у вас есть в вашем сигнале. Итак, если вы хотите сказать, что вы удаляете шум из сигнала, тогда это хороший выбор. Другим показателем достоинства будет свободный от побочных эффектов динамический диапазон, указывающий расстояние между вашим сигналом и самым сильным ядром частоты ложного сигнала (шума). Я думаю, что вместо

snr_after = mean(signal .^ 2)/mean(noise_reduced_signal .^ 2); 

вы можете

snr_after = mean(signal .^ 2)/mean((noise_reduced_signal - signal_delayed).^ 2); 

получить только отфильтрованный шум. Конечно, вам нужно учитывать задержку, введенную вашим фильтром; и вы можете сделать это, добавив задержку к вашему первоначальному сигналу.

 Смежные вопросы

  • Нет связанных вопросов^_^