élargir la bande de fréq FFT matlab

Fermé
Le Trouveur Messages postés 12 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 9 septembre 2008 - 10 mai 2008 à 11:42
 izi - 25 mai 2011 à 15:24
Bonjour,

j'ai réalisé des acquisitions sur mon pc à partir d'un oscillo avec le logiciel labview, et maintenant je voudrai traite ce signal.

avec matlab je voudrai voir le spectre de fourier pour observer la distribution fréquentielle du signal (j'ai donc deux vecteurs, un correspondant à l'amplitude, l'autre au temps correspondant, que j ai "loadé" dans un tableau).

j'ai vu dans l'aide une facon d'utiliser la fft, mon code est donc de ce type ci (c est le code de l aide matlab):


%%%%%%%%%%%%%%%%%%%%
t = 0:0.001:0.6;
x = sin(2*pi*50*t)+sin(2*pi*120*t)

y = x + 2*randn(size(t));

Y = fft(y,512);

Pyy = Y.* conj(Y) / 512;

f = 1000*(0:256)/512;

plot(f,Pyy(1:257))

%%%%%%%%%%%%%%%%%%%%

le souci vient du fait que la largeur de la fenetre de la fft va de 0 à 500 Hz, et je voudrai aller jusque 120 000 Hz environ.
j ai essayé d'augmenter f en multipliant par 10 000 ou en prenant de 0 à 1024 points mais je remarque que cela ne change pas le spectre mais uniquement la valeur de l'abscisse (fréquence).

comment faire pour avoir un spectre de 0 à 120 kHz? merci d'avance.

3 réponses

damlegone32 Messages postés 74 Date d'inscription lundi 11 septembre 2006 Statut Membre Dernière intervention 31 mai 2011 29
10 mai 2008 à 15:37
Salut,

Si tu as fais un peu de traitement du signal tu dois savoir que le spectre d'un signal échantillonné et répété tous les Fe/2 où Fe est la fréquence d'échantillonnage du signal. Donc connaitre la transformé de fourrier entre 0 et Fe suffit pour connaitre tous le spectre. De plus comme le signal de ton exemple est réel il suffit juste de le tracé ente 0 et Fe/2. Voila pourquoi on ne prend que les 257 premiers points.

Si dans l'exemple tu veux tracé le spectre jusqu'à 120 khz il suffit d'augmenter la fréquence d'échantillonnage à 240 khz:
t = 0:1/(240e3):0.6;
puis f = 240e3*(0:256)/512; le reste c'est pareil.
Pour avoir une fft plus précise tu peut augmenter le pas de calcul prendre 1024 ou 2048 a la place de 512. Tous en modifiant la suite en conséquence.

Voilou. en espérant t'avoir éclairé.
A+
0
Le Trouveur Messages postés 12 Date d'inscription vendredi 18 avril 2008 Statut Membre Dernière intervention 9 septembre 2008 2
11 mai 2008 à 19:26
bonjour,

merci pour ces précisions, j'ai essayé de mettre la fréquence d'échantillonnage à 120 kHz, mais je remarque que les raies sont décalées et n apparaissent plus à la même fréquence..

pour le cas qui m'intéresse c est un peu différent:

mon but est de voir les différentes fréquences des signaux qui compose le signal de base acquis sur mon pc, et je m'aperçois que les courbes ne sont pas ce que j'attends. peut être que je m y prends mal et que je ne cherche pas au bon endroit, voici mon code:

--------------------
load 50p2.m; % tableau des données (enregistré par labview sur le pc: 2 colonnes, 10000 lignes)
t=X50p2(1:10000,1); % les 10000 valeurs de la première colonne correspondent au temps, qui ne sert pas dans mon code d'ailleurs, c'est peut être une erreur.
s=X50p2(1:10000,2); % les 10000 valeurs de la deuxième colonne sont les valeurs de l'amplitude correspondante

Y = fft(s,512); % transformée de fourier de l'amplitude sur 512 points

Pyy = Y.* conj(Y) / 512; % élimine la partie complexe

f = 120000*(0:511) / 511; % fréquence allant de 0 à 120 kHz


plot(f,Pyy(1:512))
----------------------------------
ce graphe n'est pas ce que j attends, d ailleurs il ne présente aucun spectre. ou rien de discernable, à part un pic à 0.

peut être faut il aborder la chose autrement pour pratiquer la fft d un signal qui est stocké dans un tableau?
ou peut être ai je fait une erreur?

merci d avance
0
c urgent


merci d'avance
0
damlegone32 Messages postés 74 Date d'inscription lundi 11 septembre 2006 Statut Membre Dernière intervention 31 mai 2011 29
11 mai 2008 à 22:16
Salut,

Est-tu bien sur que ta fréquence d'échantillonnage c'est 120 kHz ?
Tu peux faire Fe =1 /(t(2) - t(1)) pour vérifier
Puis tu prends comme vecteur f : f = Fe * (0:511)/512;

De plus si tu veut que ton spectre soit correct il faut que la fréquence maximale de ton signal de base soit inférieure à Fe/2 (pour respecter le th. de Shannon). Est-ce bien le cas ? Sinon tu as un repliement de spectre.

Sinon je vois pas d'où peut venir le problème. Pour avoir déjà pratiqué ce type de calcul de fft sur des données acquise par labview normalement ça marche. Reste a voir si par hasard ton signal n'est pas noyé dans un fort bruit auquel cas le spectre le serait également. N'hésite pas également à augmenter le nombre de point de calcul de la fft.

De plus un pic en f=0 s'explique par un signal a moyenne non-nulle. Si tu fait mean(s) ça sera différent de 0.

A+
0
passionfm Messages postés 1 Date d'inscription mercredi 20 mai 2009 Statut Membre Dernière intervention 20 mai 2009
20 mai 2009 à 15:31
bonjour
avez vous trouve votre bonheur ?
pour ma part je suis actif dans ce domaine.....
car je suis en quete de realiser mon spectre a 60 Khz....voir 88khz +/-
pour visualiser mon signale mpx sortant de mon tuner fm
actellement je parviens a afficher de 0 a 46 khz lineairement sur mon pc
depuis la semaine passee ,
je decode egalement l RDS par mon pc....sans interface/boitier de decodage ...
autrement dit, je prend le data directement dans le tuner et l envoie par le port serie aux pc

actuellement de 0 a 20 khz sur les bande de couleur
et sur les logo RDS l image RDS
voir mon site http://www.passionfm.be
0