Puis-je obtenir de l'aide sur la façon de faire passer l'axe des fréquences d'une fréquence négative à une fréquence positive (en Hertz), ce sera l'axe des x dans un résultat FFT, mais avec une FFT de longueur paire ou FFT de longueur impaire. J'ai du mal à le faire dans MATLAB. (Supposons que vous connaissiez la fréquence d'échantillonnage f_s).
frequency-spectrum
frequency
TheGrapeBeyond
la source
la source
Réponses:
Une approche consiste simplement à calculer le vecteur de fréquence pour la sortie DFT non décalée (c'est-à-dire ce que vous obtiendriez directement de la
fft()
fonction de MATLAB , sans faire defftshift()
), puis remapper les fréquences qui correspondent aux emplacements sur le côté négatif de l'axe. Exemple:La réponse fournie par learnvst devrait également fonctionner; c'est juste une autre façon de penser à ce sujet qui ne nécessite aucun boîtier spécial pour les tailles DFT paires / impaires.
la source
Vous pouvez créer un spectre de fréquences positif tout simplement (où
fs
est le taux d'échantillonnage etNFFT
le nombre de cases fft). Dans l'implémentation Matlab de l'algorithme FFT, le premier élément est toujours le composant DC, d'où la raison pour laquelle le tableau part de zéro. Cela est vrai pour les valeurs paires et impaires de NFFT.Si vous devez envelopper le spectre de fréquences, vous devez prendre en compte si vous avez un NFFT impaire. Il doit toujours y avoir un composant DC , donc. .
Remarquez comment le calcul de l'axe de fréquence positif est identique à celui ci-dessus, mais le terme décalé FFT change pour s'adapter aux longueurs FFT paires ou impaires.
Ces extraits de code ont été extraits d'une longue réponse publiée sur SO (que vous pourriez trouver intéressante) trouvée ici: /programming/9694297/matlab-fft-xaxis-limits-messing-up-and-fftshift/ 9699983 # 9699983
la source