Je calcule la FFT à partir de l'entrée microphone. Je remarque que les fréquences plus basses semblent toujours avoir plus de puissance (dB plus élevé) que les fréquences plus élevées.
- J'ai coupé les données en trames de 24576 octets (4096 * 6).
- Appliquer la fenêtre Hamming:
input[i] *= (0.54d - 0.46d*(double) Math.Cos((2d*Math.PI*i)/fs));
- Exécutez-le via FFTW
Process1D()
. - Convertir à partir de nombres complexes:
output[i] = 10.0 * Math.Log10((fout[i * 2] * fout[i * 2]) + (fout[i * 2 + 1] * fout[i * 2 + 1]));
- Moyenne de 6 valeurs pour obtenir une FFT complète de 4096 octets.
- Peignez une jolie image (couleurs mappées sur une palette).
La moyenne (pt. 5) est effectuée pour réduire le bruit FFT.
Comme l'image montre à la fois le son et le micro éteints, il y a plus d'énergie (et plus de bruit) dans les basses fréquences. Cela indique que c'est plus qu'un problème micro / sub.
Mes questions:
1. Est-ce prévu? Pourquoi?
2. Une manière standard de résoudre ce problème? On dirait presque que la magie Math.Tan () pourrait la soulever là où elle appartient.
Mon objectif est de pouvoir identifier les 5 meilleures fréquences sans que les basses fréquences gagnent par défaut.
Réponses:
Oui, c'est très attendu. Ce que vous voyez est un spectre " rose ", c'est-à-dire une énergie constante par largeur de bande relative, par rapport à " blanc " qui est une énergie constante par largeur de bande absolue. Pour les signaux roses, l'énergie entre 1 et 2 kHz est la même que celle de 2 à 4 kHz (chacune représente un doublement de la bande passante ou une "octave".
La plupart des signaux audio naturels (parole, musique, films, etc.) ont un spectre rose. De plus, la plupart des bruits de fond acoustiques (bruit de microphone, bruit de CVC, fluctuations de la pression atmosphérique, fond générique) ont tendance à être roses ou encore plus asymétriques vers les basses fréquences.
Les systèmes auditifs humains fonctionnent également de cette façon. Dans l'oreille interne, les signaux audio sont décomposés en bandes de largeur de bande relative constante (appelées "bandes critiques") qui sont à peu près les mêmes qu'un spectre de troisième octave.
La meilleure façon d'examiner les données du spectre audio est de les représenter sur une échelle de fréquence logarithmique.
la source
À l'étape 2, la formule doit être
input[i] *= (0.54d - 0.46d*(double) Math.Cos((2d*Math.PI*i)/N));
, oùN
est le nombre d'échantillons dans le tampon, dans votre cas24576
.Aux étapes 4 et 5, je ferais la moyenne bin-sage sur les valeurs de magnitude au carré, pas sur les valeurs dB. Disons que vous avez les grandeurs au carré
[4,6]
. Leur moyenne est5
,10*log10(5) ~= 6.99
. La moyenne de10*log10(4)
et10*log10(6)
est6.90
.Le premier problème pourrait être la cause du biais vers les basses fréquences, car cela entraînera une fuite spectrale, et les basses fréquences obtiendront plus de contamination de la ligne DC (ce qui est inévitablement une mauvaise estimation). Le deuxième problème ne fera probablement pas de différence sur les basses fréquences, mais je pense que cela se rapproche de l'intention de votre mesure.
la source
fout[i * 2] * fout[i * 2]) + (fout[i * 2 + 1] * fout[i * 2 + 1]
Le bruit 1 / f se produit dans de nombreux systèmes physiques, biologiques et économiques. Certains chercheurs le décrivent comme étant omniprésent.
Bruit rose (à gauche) et bruit blanc (à droite) sur un spectrogramme FFT avec axe vertical de fréquence linéaire (sur un analyseur de spectre audio ou similaire typique, le bruit rose serait plat, pas en pente descendante et le bruit blanc augmenterait)
la source
Beaucoup de sons naturels ont des harmoniques , donc il y aura des fréquences fondamentales plus basses et ensuite moins d'énergie dans des multiples plus élevés du fondamental. Il peut y avoir un biais DC qui signifierait beaucoup d'énergie à l'extrême gauche. Une autre influence est votre fonction de fenêtrage qui déforme la réponse en fréquence.
Vous pouvez gérer la polarisation CC en utilisant un filtre passe-haut. Une implémentation simple consiste à soustraire la moyenne à long terme de chaque échantillon (EDIT: ou encore plus simple, éliminer les fréquences inférieures, par exemple <50 Hz de votre résultat FFT). Vous pouvez également expérimenter différentes fonctions de fenêtre. assurez-vous (comme le souligne @mtrw) que vous appliquez correctement la fenêtre. Toute autre non-linéarité de la réponse peut être corrigée en mesurant une entrée idéale et en se normalisant sur cette courbe.
la source