IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Signal Discussion :

Filtre sans retard


Sujet :

Signal

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Filtre sans retard
    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 :

    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é.
    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é.
    (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.

  2. #2
    Membre régulier
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Juillet 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur d'études

    Informations forums :
    Inscription : Juillet 2014
    Messages : 46
    Points : 111
    Points
    111
    Par défaut
    Si temps = linspace(1.5,1.7,10000), alors fréquence d'échantillonnage fs = 1000 / (1.7 - 1.5) = 50000.
    La fonction butter attend une fréquence normalisée donc : [B,A] = butter(4,f_coupure/fs);

    Zoomez sur la fft avec axis pour voir les lobes à 10 et 30Hz dans votre spectre de 25000Hz. En descendant la fréquence d'échantillonnage, largement trop grande pour travailler à ces fréquences, vous améliorerez la résolution spectrale (tout en diminuant les besoins en calcul si ça doit être implémenté en temps-réel).

    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
    19
    20
    21
    22
    temps = linspace(1.5,1.7,10000);
    Nombre_mesures = length(temps);
     
    f0 = 10;
    f1 = 50;
    f_coupure = 30;
    fs = 10000 / (1.7 - 1.5);
     
    input = 2*sin(2*pi*f0*temps)+sin(2*pi*f1*temps);
    [B,A] = butter(4,f_coupure/fs);
    output = -filter(B,A,input);
     
    figure(1); clf;
    subplot(2,1,1); plot(input, 'b');
    subplot(2,1,2); plot(output, 'r');
     
    fft_input = fft(input);
    fft_output = fft(output);
     
    figure(2); clf;
    subplot(2,1,1); plot(abs(fft_input),'b'); axis ([0,50]);
    subplot(2,1,2); plot(abs(fft_output),'r'); axis ([0,50]);
    Il n'existe pas de filtre sans retard, pour la bonne raison qu'ils ont tous une mémoire, et que le sortie n'est connue que lorsque le signal a parcouru toute la longueur de la mémoire. Si on a besoin de compenser ce retard, il suffit de retarder les autres signaux.

    Il existe par contre des filtre à déphasage linéaire. Leur déphasage est proportionnel à la fréquence, ils sont à utiliser lorsque les caractéristiques de phase sont importantes. Ce sont uniquement des filtres du type "réponse finie" (FIR, Finite Impulse Response). Butter n'est pas un FIR mais un IIR (Infinite Impulse Response) ou filtre récursif, et n'est pas à phase linéaire. Voyez la fonction MATLAB fir et associées.

Discussions similaires

  1. [XL-2003] Filtres sans doublons et Combobox // VBA
    Par jonleboss44 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 21/05/2014, 13h11
  2. [XL-2003] Créer un bouton filtre sans doublon avec cellule protégée
    Par sevy1 dans le forum Excel
    Réponses: 12
    Dernier message: 11/01/2012, 19h34
  3. [XL-2003] Selectionner le résultat d'un filtre, sans le titre
    Par apnw7931 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/02/2011, 22h55
  4. [XL-2003] Filtre sans doublon
    Par will-1981 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/01/2010, 13h10
  5. Filtre sans doublons dans ComboBox
    Par Smox78 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/07/2008, 09h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo