Déterminer la fréquence à partir des données de signal dans MATLAB
J'ai des données à partir d'un capteur et j'ai besoin de trouver la bonne fréquence. Il ressemble à fft()
semble être la voie à suivre, mais le MATLAB docs montrer comment obtenir un graphique des fréquences, je ne sais pas quoi faire à partir de là.
Voici ce que mon apparence des données:
source d'informationauteur edc1591
Vous devez vous connecter pour publier un commentaire.
Une voie est en effet d'utiliser une fft. Depuis la fft vous donne la représentation fréquentielle du signal, vous voulez chercher le maximum, et depuis la fft est un signal complexe, vous aurez envie de prendre la valeur absolue de la première. L'indice correspond à la fréquence normalisée avec un maximum d'énergie. Enfin, si votre signal a un décalage, comme c'est le cas de celui que vous montrez, vous voulez vous débarrasser de décalage, avant de prendre la fft, de sorte que vous n'obtenez pas un max à l'origine représente la composante DC.
Tout ce que j'ai décrit mettre en ligne serait:
où indexMax est l'indice où max fft valeur peut être trouvé.
Remarque: pour obtenir de indexMax à la fréquence réelle de l'intérêt, vous aurez besoin de connaître la longueur L de la fft (de même que la longueur de votre signal), et la fréquence d'échantillonnage Fs. La fréquence du signal sera alors:
Sinon, plus rapide et moins bien aussi en fonction du signal que vous avez, prendre l'autocorrélation du signal:
et de trouver la première maximale survenant après le point central de l'autocorrélation. (L'autocorrélation sera symétrique avec son maximum dans le milieu.) En constatant que maximum, vous pouvez trouver le premier endroit où le signal décalé ressemble plus ou moins semblable à lui-même. I. e. vous trouverez la période de votre signal. Puisque le signal déplacé par un multiple de sa période ressemblera toujours à lui-même, vous devez vous assurer que le maximum que vous trouverez en effet correspond à la période du signal et non pas l'un de ses multiples.
À cause du bruit dans le signal, le maximum absolu pourrait très bien se produire à un multiple de votre période au lieu de la période d'elle-même. Afin de rendre compte du bruit, vous devez prendre le max absolue de l'autocorrélation (autocorrélation(longueur(autocorrélation)/2+1), et ensuite de trouver l'endroit où l'autocorrélation est plus grande que, par exemple, 95% de la valeur maximale pour la première fois dans la seconde moitié du signal. 95%, 99%, ou un autre nombre dépendrait de la façon dont beaucoup de bruit corrompt votre signal.
Mise à JOUR: je me rends compte que je suppose que vous vouliez dire par "fréquence" de votre signal de la hauteur ou de la base d'harmoniques de fréquence avec le plus d'énergie, mais vous voulez regarder. Si, selon la fréquence que vous avez voulu dire la représentation fréquentielle du signal, puis à une première approximation, vous voulez juste parcelle de l'abs de la FFT pour avoir une idée de l'endroit où l'énergie est:
Si vous voulez comprendre pourquoi il y a un abs, ou ce que les informations que vous sont en train de perdre en ne représentant pas la phase de la fft, vous voudrez peut-être lire un peu plus sur la DFT transformer pour comprendre exactement ce que vous obtenez.
Je pense qu'il devrait être
Le premier élément de l'abs(fft(x)) est le courant continu (DC), ou de biais, ou moyen de signal, ou de X0. Nous comptons à partir du deuxième élément (X1).
S'il vous plaît laissez-moi savoir si je me trompe. Merci.