2017-01-01 113 views
0

我正在做一個降噪濾波技術的實驗。我在數據集中的樣本是音頻文件(.wav),因此我具有:原始錄製音頻文件,並將它們與噪聲混合,因此我得到混合(噪聲信號),我通過濾波算法傳遞這些噪聲信號,是經濾波或降噪的音頻信號。音頻.wav文件的SNR以及評估濾波技術的客觀度量

所以我總共有以下幾點:

  1. 原始音頻文件(無噪音)
  2. 噪音(即需要被添加到原始信號)
  3. 混合(嘈雜文件)
  4. 過濾(降噪)

我需要得到多少分貝的過濾器可以減少。我認爲信噪比是一種可以給出有關濾波算法性能的指標,以及在濾波之前和濾波之後的比較。

所以好心沒有任何人知道:

  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); 

只得到過濾後的噪音。當然,您需要考慮過濾器引入的延遲;你可以通過給你的初始信號加一個延遲來做到這一點。