élargir la bande de fréq FFT matlab
Le Trouveur
Messages postés
12
Date d'inscription
Statut
Membre
Dernière intervention
-
izi -
izi -
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.
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.
A voir également:
- élargir la bande de fréq FFT matlab
- Extraire bande son d'une video - Guide
- Bande déroulante excel - Guide
- Comment enlever la bande tcl tv ✓ - Forum Téléviseurs
- Bande 4g france - Guide
- Bande noire verticale au milieu de l'écran tv - Forum Téléviseurs
3 réponses
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+
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+
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+
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+
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
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
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
merci d'avance