2010-09-03 14 views
1

J'ai actuellement un tableau plein de données qui, d'après ce que je crois est l'amplitude de mon fichier wave. Il est actuellement à un niveau bas -32768 et à un niveau élevé 32767.Calcul de la fréquence à partir de l'amplitude et le bitrate

J'ai également le SampleRate qui était 16,000hz.

Ma compréhension du son n'est pas très bonne; Est-ce que quelqu'un sait de cela comment je peux calculer la fréquence?

Aide grandement appréciée,

Monkeyguy.

Répondre

4

Qu'est-ce que vous voulez faire exactement? La méthode dépendra entièrement de ce que vous espérez réaliser. Avez-vous un signal contenant une seule sinusoïde, par exemple un détecteur provenant d'un équipement mécanique? Ou plus probablement, voulez-vous jouer/chanter dans un microphone et transcrire la musique?

Dans les deux cas, la FFT sera votre première escale. Dans le premier cas, cela peut être à peu près tout ce dont vous avez besoin, car les FFT sont bonnes pour les sinusoïdes à l'état d'équilibre. Dans ce dernier cas, vous avez une très longue route devant vous pour obtenir des résultats utiles. La reconnaissance de hauteur est un problème difficile, et le simple fait de lancer certaines FFT ne vous mènera pas loin. Vous aurez besoin d'avoir une bonne base dans le traitement du signal numérique et aussi les caractéristiques des signaux musicaux, et alors probablement votre meilleur pari est d'utiliser une méthode basée sur l'autocorrélation.

Voir ma réponse précédente sur un sujet connexe pour certains liens qui peuvent être utiles: Algorithms for determining the key of an audio sample

+0

J'essaie de voir si je peux trouver la note en cours de lecture alors quand je gratte une guitare, je peux trouver la fréquence et voir à quelle distance il est, – monkeyguy

+1

+1 pour DSP, difficulté de reconnaissance de hauteur et «lancer des FFT ne vous mènera pas très loin» - donnerait plus si je le pouvais! – walkytalky

+0

@monkeyguy: donc un accordeur de guitare essentiellement? Donc dans ce cas, les FFT ne sont pas susceptibles d'aider parce que la résolution ne sera pas assez précise. Donc, je voudrais examiner certaines des méthodes classiques de détection de hauteur telles que l'autocorrélation. –

2

C'est exactement ce dont je me souviens de la physique, et je ne suis certainement pas un expert en musique.

Sauf s'il s'agit d'un enregistrement d'une tonalité constante, il n'a probablement pas une seule fréquence. Chaque tonalité a une fréquence différente, ce qui explique pourquoi ils ont un son différent. Il y a généralement une relation entre la fréquence (non wav) et la longueur d'onde d'une onde, mais aucune dont je connais l'amplitude. Votre SampleRate est similaire à une fréquence, mesuré en Hz, mais il ne vous indique que la précision de l'enregistrement, plutôt que la fréquence réelle des sons enregistrés.

+0

Sonne bien pour moi. –

+0

Bravo pour l'info! – monkeyguy

3

Dans la plupart des cas, un fichier audio n'a pas de fréquence unique. A son dans lequel l'onde sonore a une fréquence unique, est (typiquement) une tonalité sinusoïdale pure, et ressemble à ceci:

http://www.wolframalpha.com/input/?i=sound+440+Hz&a=*MC.~-_*PlaySoundTone-&a=*FS-_**DopplerShift.fo-.*DopplerShift.vs-.*DopplerShift.c--&f3=10+m/s&f=DopplerShift.vs_10+m/s&f4=340.3+m/s&f=DopplerShift.c_340.3+m/s&a=*FVarOpt.1-_***DopplerShift.fo-.*DopplerShift.fs--.***DopplerShift.DopplerRatio---.*--&a=*FVarOpt.2-_**-.***DopplerShift.vo--.**DopplerShift.vw---.**DopplerShift.fo-.*DopplerShift.fs--- 

Ceci est une onde sinusoïdale pure de 440 Hz. (Il n'a pas été possible d'établir un lien correct en raison des limitations de MarkDown.)

Un son général, tel qu'un enregistrement (de la parole, de la musique ou simplement du bruit urbain), consiste en (un nombre infini de) des combinaisons de telles ondes sinusoïdales, superposées. Autrement dit, si vous deviez dessiner le graphique de la pression en fonction du temps (à un point donné dans l'espace) de l'onde, ou (plus ou moins) de la position de la membrane du locuteur en fonction du temps, donc ne pas être a pure sine wave, mais quelque chose de beaucoup plus compliqué. (En effet, comment toute l'information d'une symphonie de Beethoven peut-elle être représentée par une onde sinusoïdale simple, entièrement déterminée par sa seule fréquence?)

La fréquence d'échantillonnage d'un enregistrement numérique est simplement le nombre de échantillons par seconde de l'onde sonore. En effet, une onde sonore physique a une amplitude p (t) à chaque instant, donc, parce qu'il y a un nombre infini de t entre 0 s et 10 s (disons), théoriquement, pour sauver l'audio, nous aurions besoin d'un nombre infini d'octets (chaque échantillon nécessite un nombre fixe d'octets - par exemple, un enregistrement de 16 bits utilise 16 bits, ou 2 octets, par échantillon - bien sûr, plus le "nombre de bits" est élevé, plus la qualité est élevée ; pour un son de 16 bits, nous avons 2 niveaux de = 65536 à choisir lorsque vous spécifiez un seul échantillon). En pratique, un son est échantillonné, de sorte que l'amplitude p (t) n'est sauvegardée qu'à intervalles fixes. Par exemple, un CD audio typique a une fréquence d'échantillonnage de 44,1 kHz; c'est-à-dire qu'un échantillon est sauvegardé tous les 22,7 μs. Par conséquent, une onde sinusoïdale pure de n'importe quelle fréquence, ou n'importe quel enregistrement, pourrait être stockée sur un ordinateur en utilisant n'importe quelle fréquence d'échantillonnage, la qualité de l'enregistrement étant déterminée par le taux d'échantillonnage. [Note technique: Bien sûr, il existe une limite inférieure (dans un certain sens) au taux d'échantillonnage. C'est ce qu'on appelle le Nyquist rate.]

Pour déterminer la fréquence moyenne du son à tout moment, vous pouvez utiliser certaines techniques avancées de Fourier analysis, mais ce n'est pas entièrement trivial.

+2

Merci beaucoup pour l'entrée! Donc, pour mon exemple, il enregistre 16 000 échantillons par seconde (ce que j'ai). J'ai une entrée venant du microphone qui enregistre, je ne suis pas sûr de savoir comment trouver la fréquence moyenne (pour déterminer quelle note joue actuellement cette seconde). Je vais jeter un coup d'œil à cette FFT. – monkeyguy

+0

@monkeyguy: Je viens d'ajouter plus de détails à la réponse. –

2

En tant que supplément rapide aux deux autres réponses, si vous sont essayer de mesurer les fréquences dans le fichier audio lui-même, vous aurez besoin de regarder dans le Fast Fourier Transform (FFT), qui est un algorithme utilisé pour déterminer la force des fréquences dans un ensemble de données échantillonné.

+0

Merci pour l'info Je vais vérifier – monkeyguy

0

Il est vrai qu'un enregistrement audio ne sera pas une seule fréquence, vous pouvez trouver la fréquence fondamentale assez facilement. Commencez au début de votre échantillon et tracez-le. vous cherchez la valeur absolue la plus élevée, et dans une vague avec plusieurs fréquences, vous ne saurez pas ce que c'est jusqu'à ce que vous soyez de retour à zéro. Rappelez-vous la valeur la plus haute ou la plus basse que vous avez vue jusqu'ici. Maintenant, trace en avant, espérons-le dans la direction opposée. Vous recherchez le prochain pic ou creux de valeur absolue similaire à celui que vous avez trouvé, en utilisant la même méthode que précédemment. Découvrez combien d'échantillons il y a entre vos deux valeurs absolues les plus élevées. Divisez votre fréquence d'échantillonnage par ce nombre (mieux vaut ne pas être nul), puis divisez par 2. C'est la fréquence la plus basse, ou fondamentale, de votre enregistrement à ce stade.

Vous pouvez également générer une fonction sinusoïdale qui représente une forme d'onde synthétique à une fréquence donnée et soustraire les valeurs instantanées de cette forme d'onde de votre échantillon. Trouvez la différence dans les amplitudes racine-moyenne-carré des échantillons avant et après. Cette différence est une approximation grossière de l'amplitude du signal à cette fréquence. Répétez ce processus en doublant la fréquence à chaque fois. Vous pouvez l'utiliser pour créer un spectre d'égalisation de base.

+0

Il est peu probable que l'intervalle pic-à-pic simple donne de bons résultats à moins que la fréquence fondamentale ne soit très distincte. Une erreur de mesure dans les échantillons est plutôt susceptible de conduire à un repliement. Une transformée de Fourier devrait être beaucoup plus robuste. – walkytalky

+0

... Si vous voulez faire une transformée de Fourier. Comme une autre affiche l'a dit, ce n'est pas tout à fait trivial de le faire. – KeithS

+0

Les solutions vraies mais triviales aux problèmes non triviaux ont tendance à être insatisfaisantes. Et même si la FFT n'est pas triviale, elle est très bien étudiée et largement disponible. – walkytalky