Transformée de Fourier logarithmique (LFT) sur signal audio

9

J'essaie d'analyser les musiques le plus précisément possible. Bien sûr, j'ai essayé la FFT, mais j'ai eu quelques problèmes.

J'ai trouvé que les basses fréquences ont une résolution très basse par rapport à l'ouïe humaine. J'ai essayé la FFT très longtemps pour résoudre ce problème, mais même en analysant avec 8192 échantillons / s à une fréquence d'échantillonnage de 44100 Hz (signifie un manque de résolution temporelle), je n'ai pas obtenu une résolution suffisante sur les basses fréquences.

J'ai trouvé qu'il y avait peu de solutions.

Tout d'abord, une interpolation quadratique sur les bacs FFT.
Mais cela ne semble pas être un moyen parfait. Les problèmes de cette méthode sont les suivants:

1. «Si je veux déterminer les fréquences entre les compartiments de fréquence, quels trois compartiments dois-je sélectionner pour effectuer une interpolation?
2. «Même si je le fais, il n'y a aucune information supplémentaire réelle sur le résultat. Je sais que les interpolations sont une sorte de méthode délicate.

Deuxièmement, extraire chaque bacs freq avec la fréquence souhaitée, afin que je puisse extraire les bacs de manière logarithmique.
Mais ont un problème critique de coût de calcul: (peut-être plus) N ^ 2.

Troisièmement, LFT (Logarithmic Fourier Transform).
Cela nécessite des échantillons espacés logarithmiquement et me donne le résultat exactement ce que je recherche avec une vitesse incroyablement rapide; /programming/1120422/is-there-an-fft-that-uses-a-logarithmic-division-of-frequency

Mais je n'ai aucune idée de cet algorithme. J'ai essayé de comprendre le document et de le mettre en œuvre, mais c'était impossible à cause du manque de mes compétences en anglais et en mathématiques.

J'ai donc besoin d'une aide pour la mise en œuvre de LFT.

Laie
la source

Réponses:

8

La solution la plus simple et la plus pragmatique consiste à utiliser une FFT normale d'une taille suffisamment grande pour obtenir la résolution requise à la fréquence d'intérêt la plus basse. Par exemple, si vous voulez une résolution de 1 Hz à la fréquence d'intérêt la plus basse, vous aurez besoin d'une fenêtre FFT d'une seconde, c'est-à-dire que la taille de la FFT devra être égale à la fréquence d'échantillonnage, par exemple 44100.

Notez que même si vous pouviez implémenter une FFT logarithmique, elle serait toujours liée par les lois de la physique (théorie de l'information) et vous auriez toujours besoin d'une fenêtre d'échantillonnage de longueur similaire - tout ce que vous gagneriez serait la commodité (ne pas avoir à agréger les bacs de sortie ) au détriment de la performance.

Paul R
la source
C'est étrange. Je sais qu'il n'y a théoriquement plus de données. Si j'utilise une FFT de grande taille, il est vrai qu'elle n'est pas en mesure d'analyser des ensembles d'instruments de musique très rapides. Et il est également vrai que je ne suis pas en mesure d'obtenir une résolution plus élevée sur les basses fréquences. Mais qu'en est-il du système auditif humain? Comment ce système obtient-il une résolution plus élevée en temps et en fréquences?
3
Peut-être devriez-vous envisager une approche hiérarchique, où vous décimer chaque octave successive par un facteur de 2, afin que vous puissiez utiliser des fenêtres temporelles courtes à des fréquences plus élevées et des fenêtres temporelles plus longues à des fréquences plus basses? Ce serait quelque peu analogue à une banque de filtres auditifs, où la bande passante augmente avec la fréquence.
Paul R
Excellente approche. Goertzel longue durée sur les basses fréquences, goertzel courte durée sur les hautes fréquences? Logique. Mais cela nécessitera un grand coût de calcul.
C'est probablement plus efficace que de faire une grande FFT, même si c'est plus complexe. Par exemple, pour une hiérarchie de 4 octaves, vous voudrez peut-être 4 FFT à 2048 points et 3 filtres passe-bas pour un sous-échantillonnage x2. La résolution de la FFT la plus faible sera aussi bonne qu'une FFT à 16384 points au taux d'échantillonnage complet, mais comme la FFT est O (n log n), le coût de calcul total sera beaucoup plus faible.
Paul R
aha, FFT 2048, down sample x2, FFT 2048, down sample x2 .... que j'ai à la fois une résolution de temps et de fréquence, avec des coûts bien inférieurs à 16384 FFT. Génial. Et tout à l'heure, j'ai une autre solution: sur un échantillon de 16384, goertzel à chaque fois par 32. Ainsi, avec l'accumulation, je peux extraire les fréquences basses et hautes à moindre coût. Merci beaucoup. :)
0

Si l'analyse que vous souhaitez effectuer nécessite la fréquence des signaux dans chaque casier, vous pouvez utiliser la transformée de Fourier à court terme pour y parvenir.

Chaque bin de la FFT donne un nombre complexe représentant la composante réelle et imaginaire - ou après un peu de phase de manipulation et d'amplitude.

Comme la fréquence = dPhi / dt, (Phi == phase), en prenant des groupes correspondants de paires de spectres STFT consécutifs, vous pouvez calculer la fréquence.

DSP Dimension a un bon article sur le processus.

Marko
la source
On dirait que j'envisage un autre problème plus complexe. Je peux utiliser la FFT, mais pour l'analyse du signal audio, cela ne convient pas.
3
Regardez la version "Q constante" de la transformée de Fourier à court terme. Cette disposition du STFT fournit une résolution de fréquence qui s'ajuste logarithmiquement pour répondre aux exigences de différentes gammes de fréquences.
user2718
J'y jetterais un œil. Je pensais que ce n'était qu'une simple opération de transformation de banque de filtres appliquée au résultat fft.
Laie