Я делаю эксперименты по технике фильтрации для снижения шума. Мои образцы в наборе данных - это аудиофайлы (.wav), поэтому у меня есть: оригинальные звуковые файлы для записи, и я смешиваю их с шумом, поэтому я получаю смешанные (шумные сигналы), передаю эти шумные сигналы через алгоритм фильтрации, выходы фильтруются или шумоподавляются аудиосигналы.SNR для аудио файлов .wav и объективных мер для оценки методов фильтрации
Таким образом, в общей сложности у меня есть следующие:
- оригинальных звуковых файлов (без шума)
- шума (которые должны быть добавлены к исходным сигналам)
- смешанные (Шумные файлы)
- Отфильтрованный (уменьшенный шум)
Мне нужно получить, сколько дБ фильтр может уменьшить. Я думаю о SNR как мера, которая могла бы дать такое представление об эффективности алгоритма фильтрации и сравнении перед фильтрацией и после фильтрации.
Так любезно ли кто-нибудь знает:
- ли SNR хорошая объективная мера для оценки эффективности алгоритма и измерения усиления?
- Есть ли другие подходящие объективные меры, которые могут использоваться в в этом случае?
- Какая ситуация, если в полевой записи уже есть шум, и мне не нужно добавлять шум? (Шум в моем случае ветер)
Вот простой 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'])