Des fréquences plus basses plus fortes en FFT?

15

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.

  1. J'ai coupé les données en trames de 24576 octets (4096 * 6).
  2. Appliquer la fenêtre Hamming: input[i] *= (0.54d - 0.46d*(double) Math.Cos((2d*Math.PI*i)/fs));
  3. Exécutez-le via FFTW Process1D().
  4. 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]));
  5. Moyenne de 6 valeurs pour obtenir une FFT complète de 4096 octets.
  6. 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.

FFT

Tedd Hansen
la source
Veuillez d'abord essayer la bonne fenêtre de Hamming pour voir si un fragment de fenêtre cassé est à l'origine de ce bruit de basse fréquence.
hotpaw2
@Tedd Hansen, comment avez-vous fini par "identifier les 5 meilleures fréquences sans fréquences inférieures" - les 5 meilleures à partir des bandes pondérées de 1/3 d'octave ??
denis

Réponses:

12

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.

Hilmar
la source
L'affirmation selon laquelle "les signaux audio naturels ont un spectre semblable à celui du rose", ne tient pas compte de l'échelle de temps. Sur une longue période (~ 10 secondes), je suis d'accord, et certainement sur plusieurs minutes, cette affirmation a tendance à être vraie. Mais les spectres ici sont calculés sur 0,55 s. Si l'entrée est par exemple de la musique, je m'attendrais à une structure beaucoup plus tonale.
mtrw
2
la "tonalité" affecte davantage la structure fine du spectre. La forme générale (en termes d'énergie par octave) sera toujours principalement rose pour la musique, à moins que ce soit quelque chose comme "solo pour triangle et cymbale crash"
Hilmar
1
@mtrw: Une onde carrée est certainement une tonalité, mais les harmoniques haute fréquence tombent toujours à un taux 1 / f.
endolith
8

À l'étape 2, la formule doit être input[i] *= (0.54d - 0.46d*(double) Math.Cos((2d*Math.PI*i)/N));, où Nest le nombre d'échantillons dans le tampon, dans votre cas 24576.

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 est 5, 10*log10(5) ~= 6.99. La moyenne de 10*log10(4)et 10*log10(6)est 6.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.

mtrw
la source
fout[i * 2] * fout[i * 2]) + (fout[i * 2 + 1] * fout[i * 2 + 1]46dixJournaldix(5)(dixJournaldix(4)+dixJournaldix(6))/2
Dans votre explication ci-dessus, je pense que vous voulez une largeur de fenêtre (N) de 4096, car c'est la largeur de la FFT appliquée. Cette fenêtre devrait être appliquée aux 4096 échantillons transformés avant chaque fft.
Jacob
@Jacob - l'OP calcule la FFT de 6 * 4096 points, puis fait la moyenne de 6 cases adjacentes pour réduire à 4096 points.
mtrw
5

Le bruit 1 / f se produit dans de nombreux systèmes physiques, biologiques et économiques. Certains chercheurs le décrivent comme étant omniprésent.

bruits roses et blancs

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)

Alexey Frunze
la source
6
Le bruit de gauche est définitivement rose mais celui de droite est un peu orange :-)
S'il est vrai que le bruit 1 / f est omniprésent, un frontal analogique bien conçu pour l'audio a généralement de faibles niveaux de bruit 1 / f au-dessus, disons 10 Hz. Le bruit blanc domine dans les bandes d'intérêt.
mtrw
4

Est-ce attendu? Pourquoi?

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.

Une façon standard de résoudre ce problème? On dirait presque que la magie Math.Tan () pourrait la soulever là où elle appartient.

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.

Guy Sirton
la source
La fonction de fenêtrage ne devrait pas affecter la réponse en fréquence, n'est-ce pas?
endolith
@endolith: Oui, vous multipliez vos données par la fonction de fenêtrage et la fonction combinée a une réponse différente. Lisez l'article Wikipédia lié qui en discute plus en détail. La réalité du traitement des échantillons du monde réel est qu'il y a généralement une fenêtre (par exemple un rectangle) et vous ne pouvez qu'approximer la réponse en fréquence du signal source (infini) à cause de cela.
Guy Sirton
Peut-être que nous pensons différemment à la "réponse en fréquence". Si un signal est stationnaire et que vous lui appliquez une fonction de fenêtre, le spectre doit avoir les mêmes amplitudes aux mêmes fréquences, quelle que soit la fonction de fenêtre que vous utilisez, ne différant que par un facteur d'échelle qui affecte toutes les fréquences de manière égale. La largeur de chaque pointe de fréquence sera différente, mais la hauteur des pointes sera la même les unes par rapport aux autres. La fonction de fenêtrage n'agit pas comme un filtre qui atténue certaines fréquences plus que d'autres.
endolith
@endolith: Imaginez une onde sinusoïdale infinie, maintenant multipliée par une fenêtre cos ^ 2. Vous aurez toujours un composant à la fréquence d'origine mais son amplitude sera "désactivée" et vous aurez de nouveaux composants de fréquence provenant de la fenêtre. Voir le premier paragraphe ici: en.wikipedia.org/wiki/Spectral_leakage
Guy Sirton
Oui, mais l'amplitude "off" sera la même quelle que soit la fréquence de l'onde sinusoïdale infinie, non?
endolith