Android 2.3 Visualizer - Problème de compréhension getFft ()
Première fois ici, donc désolé par avance pour les massacrés de mise en forme.
Donc je suis complètement nouvelle DSP j'ai donc une très bonne compréhension générale de la transformée de Fourier. Je suis en train de construire un outil de visualisation de l'app pour Android SDK 9, qui comprend un outil de Visualisation de la classe android.médias.audiofx.Visualizer
http://developer.android.com/reference/android/media/audiofx/Visualizer.html
La javadoc de la méthode getFft(), qui est ce que je suis en utilisant états:
"Retourne la fréquence de capture de
en cours de lecture du contenu audio. L'
capture est un 8-bits de l'ampleur de la FFT. Note
que la taille de la FFT est la moitié de
la capture spécifiée à la taille, mais à la fois
côtés du spectre sont retournés
ce qui donne un nombre d'octets égal à
la taille de capture."
Tout d'abord, que signifie "des deux côtés du spectre"? Comment cette sortie différents à partir d'un standard de la FFT?
Voici quelques exemple de sortie du tableau d'octets, getFft() a été donné 124 points à garder les choses simples et j'ai attrapé la première 31 bacs. Voici les grandeurs de la première 31 bacs:
{123, -2, -23, -3, 6, -16, 15, -10, -8, -12, 9, -9, 17, -6, -18, -22, -8, 4, -5, -2, 10, -3, -11, 3, -4, -11, -8, 15, 16, 11, -12, 12}
De l'aide ou des explications serait grandement apprécié!
Edit: Donc après avoir regarder un tas de graphiques, il ressemble à une partie de mon problème est que Google ne précise pas à quelle unité est utilisée. Presque toutes les autres mesures sont effectuées en mHz, serait-il juste de supposer que la TTF sortie est également en mHz? Est-il un endroit où je peux voir le code source de l'outil de Visualisation de la classe donc je peux peut-être comprendre ce que l'enfer qui se passe réellement sous le capot?
Je suis allé de l'avant et a saisi la totalité de la production de getFft()
93, -2, -28, -16, -21, 19, 44, -16, 3, 16, -9, -4, 0, -2, 21, 16, -3, 1, 2, 4, -3, 5, 5, 10, 6, 4, -9, 7, -2, -1, 2, 11, -1, 5, -8, -2, -1, 4, -5, 5, 1, 3, -6, -1, -5, 0, 0, 0, -3, 5, -4, -6, -2, -2, -1, 2, -3, 0, 1, -3, -4, -3, 1, 1, 0, -2, -1, -1, 0, -5, 0, 4, -1, 1, 1, -1, 1, -1, -3, 2, 1, 2, -2, 1, 0, -1, -2, 2, -3, 4, -2, -2, 0, 1, -4, 0, -4, 2, -1, 0, -3, -1, -1, -1, -5, 2, -2, -2, 0, -3, -2, 1, -5, -2, 0, 0, 0, -2, -2, -1, -1, -1, -2, 0, 3, -3, -1, 0
Donc, si je comprends bien, ma sortie ici devrait être de-N de 0 à N. -N 0 devrait ressembler 0 à N. Mais quand je regarde ces amplitudes, je ne vois pas de données miroir. Google semble indiquer que la sortie doit être de 0 à N seulement sur les deux côtés du spectre. Je devrais donc être en mesure de prendre les données à partir (de sortie.longueur-1)/2 à la sortie.longueur-1. Le négatif amplitudes sont plus rapides que la fréquence d'échantillonnage et le positif amplitudes sont en mouvement plus lent que le taux d'échantillonnage. Ai-je comprends bien?
source d'informationauteur ebolyen
Vous devez vous connecter pour publier un commentaire.
La fréquence de la FFT échantillon de sortie k est donnée par:
où
Fs
est la fréquence d'échantillonnage de la série chronologique d'entréeN
est le nombre d'échantillons utilisés pour calculer la FFTLes deux côtés du spectre se réfère à la positif et négatif de fréquences dans la sortie de la FFT. La FFT forces de la fréquence de sortie à être périodique avec une période de Fs. Si vous regardez la FFT de sortie, il couvre les fréquences de 0 à Fs. Il est souvent avantageux pour afficher les fréquences dans la gamme de -0.5*Fs à 0,5*Fs plutôt que par le passage de la FFT de sortie de 0,5 a*Fs -> Fs de -0.5*Fs -> 0 depuis qu'ils sont égaux en raison de la périodicité.
Pour les valeurs réelles des signaux, comme celles que vous avez dans le traitement audio, le signal de sortie de fréquence sera une image miroir de l'positifs fréquences. De ce fait, souvent d'un seul côté du spectre est utilisé lors de l'analyse réelle des signaux.
Un autre point important est la signification de 0,5*Fs qui est connu comme le La Fréquence De Nyquist. Un signal ne peut que représenter avec précision les fréquences jusqu'à la fréquence de Nyquist et rien au dessus, il sera alias (plié), de retour sur le spectre causer de distorsion.
Alors, vraiment tout ce dont vous devez vous inquiéter pour la visualisation sont la FFT sortie des échantillons correspondant à la gamme de fréquences de 0 à Fs/2 car ceux-ci sont le sens des échantillons pour un réel signal avec une fréquence d'échantillonnage Fs.
Dans le cas où il peut aider n'importe qui, j'ai créé un outil de Visualisation qui prend la sortie de l'MediaPlayer et affiche une visualisation. Il fonctionne avec les deux normal d'onde et la FFT de données:
https://github.com/felixpalmer/android-visualizer
Il inclut le code pour la conversion de la sortie de getFft() en quelque chose de visuellement significative.