Bonjour à tous !
J'ai deux petits problèmes sur Matlab que je ne parviens pas à résoudre (par manque d'expérience en traitement numérique du signal...).
J'ai un fichier de données : 5 secondes de simulation à 50 kHz, soit 250 000 points de mesures.
1er problème :
Je souhaite filtrer ce signal pour éliminer les plus basses fréquences (inférieures à 100Hz) et les hautes fréquences (supérieures à 5kHz). Je dois toutefois éviter d'introduire un déphasage entre le signal filtré et le signal brut, car cela pénaliserait mes analyses à venir.
J'ai essayé d'utiliser les commandes butter et filter, ce qui introduit toutefois un déphasage. J'ai bien remarqué que smooth permettait de lisser correctement le signal sans le déphaser, mais ça n'a pas d'effet sur les basses fréquences.
Il y a beaucoup de commandes disponibles pour le traitement du signal, et j'ai trouvé des gens utilisant un peu toutes ces commandes. Mais laquelle devrais-je utiliser pour obtenir un filtrage de type passe-bande sans retard svp ?
2ème problème :
Par ailleurs, je souhaite tracer le spectre en fréquence du signal avant et après filtrage pour visualiser l'action du filtre numérique.
J'ai essayé sur un exemple basique (somme de deux sinusoïdes), pour lequel je fais ceci :
En sortie, j'ai des pics de fréquence à 3 Hz, 11 Hz, 9991 Hz et 9999 Hz, et ce pour le signal brut et le signal filtré.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 temps = linspace(1.5,1.7,10000); % Je prends des bornes et un nombre de points quelconques. Nombre_mesures = length(temps); f0 = 10; f1 = 50; % Définition des fréquences utilisées dans les signaux. f_coupure = 30; input = 2*sin(2*pi*f0*temps)+sin(2*pi*f1*temps); % Signal d'entrée, est la somme de 2 sinusoïdes. [B,A] = butter(4,f_coupure/Nombre_mesures); % Définition d'un filtre passe-bas d'ordre 4. output = filter(B,A,input); % Filtrage du signal. fft_input = fft(input); fft_output = abs(fft(output)); plot(abs(fft_input),'b') % Tracé du spectre du signal brut. hold on plot(abs(fft_output),'r') % Tracé du spectre du signal filtré.
(Désolé, je ne peux pas charger de photos car ma connexion est très mauvaise là où je suis... )
Je ne comprends pas d'où viennent ces pics (je devrais avoir des pics à 10Hz et 50Hz pour l'entrée, et seulement 10Hz pour la sortie). Pouvez-vous m'éclairer à ce sujet svp ?
Merci d'avance à ceux qui prendront le temps de me répondre ! Ce serait très gentil de votre part !
Robin.
Partager