comment calculer le SNR du signal bruyant?


14

J'ai du mal à comprendre comment le faire pratiquement

J'ai un fichier wav qui contient de la parole pure et un autre fichier ave qui ne contient que le bruit de fond (peut être diverses choses, comme du bruit blanc, du bruit de foule, un enregistrement de vent soufflant, etc.). Ce ne sont que de la parole ou du bruit. Je suppose donc que je peux obtenir une valeur SNR d'eux par simple division des échantillons correspondants (ou la moyenne d'une trame d'échantillons) dans les deux fichiers. Je les combine ensuite en audace pour obtenir un fichier vocal bruyant. Je suppose que ce fichier aura toujours le même SNR.

Maintenant, je passe ce fichier via mon programme de réduction du bruit et j'obtiens un autre fichier en conséquence. Comment calculer le SNR de ce fichier "bruit réduit"?

--- ÉDITER ---

question de suivi postée ICI

Réponses:


8

La définition courante du SNR est la puissance du signal utile divisée par la puissance du bruit. Supposons que vous ayez obtenu le signal souhaité et le signal de bruit sous forme de tableaux, le calcul du SNR dans Matlab avant la réduction du bruit peut être fait comme ceci:

snr_before = mean( signal .^ 2 ) / mean( noise .^ 2 );
snr_before_db = 10 * log10( snr_before ) % in dB

Après réduction du bruit, le bruit résiduel peut être calculé comme la différence entre le signal souhaité et le signal réel. Le calcul du SNR est alors simple:

residual_noise = signal - noise_reduced_signal; 
snr_after = mean( signal .^ 2 ) / mean( residual_noise .^ 2 ); 
snr_after_db = 10 * log10( snr_after )

1
signal et noise_reduced_signal doivent être alignés dans le temps dans votre cas.
dspGuru

@dspGuru C'est vrai, j'ai supposé que l'algorithme de réduction du bruit n'introduisait pas de retard.
Deve

@DspGuru et Dev: Dans ces endroits, au lieu de prendre la var et la moyenne de l'ensemble du signal, que se passe-t-il si je spécifie une partie du signal qui contient définitivement de la parole? Par exemple, remplacez signal par signal (start_speech: end_speech) dans Matlab, car mon signal est de 5 secondes avec une pause entre les mots
user13267

@ user13267 De quel signal? Avant ou après la réduction du bruit? Généralement, plus le signal analysé est long, meilleure sera votre estimation du SNR.
Deve

les deux. Ce que je veux dire, c'est que mon échantillon sonore a quelqu'un qui prononce une courte phrase, donc quand je l'ouvre avec audace, je peux voir les formes d'onde de haute intensité et de faible intensité (présence de mots et silence entre les mots, je pense). Je veux donc simplement sélectionner les échantillons qui contiennent des mots et ne pas inclure ceux qui contiennent du silence.
user13267

3

Côté entrée:

  1. Calculer DB1 = 10 * log10 (var (noiseSignal))
  2. Calculer DB2 = 10 * log10 (var (cleanSpeechSignal))

Le SNR est = DB2 - DB1

Côté sortie:

  1. Envoyez le signal vocal clair à travers votre algo de suppression de bruit. Désignons la sortie Y1.
  2. Envoyez le signal vocal bruyant via votre algo de suppression de bruit. Notons cette sortie Y2.
  3. Calculez Z = Y2 - Y1
  4. noiseNoiseDB = 10 * log10 (var (Z))
  5. speechDB = 10 * log10 (var (Y1))
  6. SNR = speechDB - résiduelNoiseDB

Est-il vraiment nécessaire de faire passer le signal de parole propre à travers l'algorithme de réduction du bruit? Le signal de parole ne devrait-il pas être le même avant et après l'algorithme de réduction du bruit afin d'avoir un point de référence commun?
user13267

Cela dépend totalement de votre algorithme. Très probablement, la sortie ne correspondra pas à l'entrée propre, en raison du retard et du filtrage.
dspGuru

La sortie (lorsque la parole est propre à travers l'algorithme de réduction du bruit) ne correspond pas en effet à l'entrée, mais je suis sûr que l'algorithme n'introduit aucun retard. Veuillez vérifier ma question de suivi (le lien a été modifié dans cette question). Il a les formes d'onde d'un discours net avant (en haut de la figure) la réduction du bruit et après (en bas de la figure) la réduction du bruit. Il n'y a pas de retard mais il y a une très forte amplification et une partie du discours a été filtrée.
user13267
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.