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 adaptif


Sujet :

Signal

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Filtre adaptif
    Bonjour,

    Je dois filtrer un signal reçu par mon prof. Ce signal est composé d'un code morse (binaire) et d'un bruit blanc. Vu que j'ai aussi à ma disposition le signal non bruité, j'ai pensé à utiliser un filtre adaptatif pour faire mon filtrage. Après avoir fais un tour sur Mathworks afin de connaitre la syntaxe j'ai écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ha = adaptfilt.se(40,0.0001); % L'ordre et le pas ont été pris arbitrairement
    [sortie,ecart] = filter(ha,Sig_bruite,Sig_original);
    Puis je trace la sortie et j'ai :

    Nom : y1.jpg
Affichages : 380
Taille : 33,5 Ko

    Je trace l’écart et j'ai :

    Nom : e1.jpg
Affichages : 366
Taille : 46,4 Ko

    On voit clairement que l’écart et la sortie sont inversés. J'ai donc essayé de les inverser dans mon code de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [ecart,sortie] = filter(ha,Sig_bruite,Sig_original);
    Je retrouve exactement la même chose. La cause de ce petit problème est donc plus profonde. Pouvez vous me l'expliquer svp ?

    Merci d'avance

  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
    Je crois que vous confondez la modulation (bip bip biiiiip) et le code de base binaire (zéro un). La modulation est en général une porteuse sinusoïdale interrompue. Pour filtrer le bruit, un simple pass-bande centré sur la fréquence de la porteuse suffit. Vous avez à votre disposition toute l'artillerie des IIR, mais le filtre optimal (qui maximise le rapport signal/bruit) est une convolution avec lui-même. Une fois débruité, vous pourrez procéder à la démodulation. Un second filtrage sera sans doute nécessaire pour retrouver de beaux crénaux, faciles à seuiller sans rebonds.

    Essayez pour commencer l'IIR passe-bande décrit ici : http://www.dspguide.com/ch19/3.htm

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function [b,a] = dsp_bandpass (BW,f,fs)
    	R = 1 - 3*BW;
    	K = (1 - 2*R*cos(2*pi*f) +R*R)	/ (2 - 2*cos(2*pi*f));
     
    	a0 = 1 - K;
    	a1 = 2 * (K-R) * cos(2*pi*f);
    	a2 =  R*R - K;
    	b1 = 2 * R * cos(2*pi*f);
    	b2 = - R*R;
     
    	b = [a0 a1 a2];
    	a = [1 -b1 -b2];
    endfunction
    Notez bien que f et BW sont la fréquence et la largeur de bande normalisées (f/f échant). Il vous faut une estimation de la fréquence porteuse f, qui peut s'obtenir par analyse spectrale (on va espérer qu'elle ne varie pas). Faites varier BW pour réduire le bruit à un niveau acceptable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [b,a] = dsp_bandpass (BW,f,fs);
    sortie = filter (b, a, entree);
    Exemple:
    Nom : sinus_bruite.png
Affichages : 380
Taille : 17,3 KoNom : sinus_filtre.png
Affichages : 365
Taille : 17,2 Ko

    N'hésitez pas à recadrer si je me suis planté dans la compréhension du problème.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    jyber, je crois que vous avez omis un detail, le bruit est un bruit blanc, donc un filtre passe bande n'est pas efficace. De plus on est pas dans un cas de modulation, vu que il s'agit simplement d'un bruit ajouté à un signal. Mon prof l'a fait en additionnant deux vecteurs, un contenant le signal et l'autre contenant le bruit.

    Et ma question n'est pas de savoir comment faire mon filtrage mais de comprende pourquoi l'ecart et la sortie sont inversés.

    PS : Avant de poster ici j'ai commencé par faire un filtre passe bande centré sur la fréquence du signal et je ne trouve rien d'exploitable, voila pourquoi j'ai fait des recherches et je suis tombé sur le filtrage adaptif qui me convient.

  4. #4
    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
    Citation Envoyé par aruna67 Voir le message
    le bruit est un bruit blanc, donc un filtre passe bande n'est pas efficace.
    Ah bon?

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    clear all; fig=1;
     
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % dsp_bandpass                  %
    % dspguide chapter 19, page 326 %
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    function [b,a] = dsp_bandpass (BW,f,fs)
    	R = 1 - 3*BW;
    	K = (1 - 2*R*cos(2*pi*f) +R*R)	/ (2 - 2*cos(2*pi*f));
     
    	a0 = 1 - K;
    	a1 = 2 * (K-R) * cos(2*pi*f);
    	a2 =  R*R - K;
    	b1 = 2 * R * cos(2*pi*f);
    	b2 = - R*R;
     
    	b = [a0 a1 a2];
    	a = [1 -b1 -b2];
    endfunction
     
     
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % Modulation/bruitage/filtrage	%
    % / démodulation de code Morse	%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    morse = [ 0 1 0 1 0 1 1 1 0 0 ];
     
    fs = 5000;		% Fréquence échantillonnage
    fc = 1000/fs;		% Fréquence porteuse 1000Hz
    dot = 0.1;		% Durée du point (secondes)
     
    morse = repmat (morse,dot*fs,1);
    morse = reshape (morse, 1, prod (size(morse)));
     
    figure (fig++, 'name', 'code emis');
    plot (morse); ylim ([-1,2]);
     
     
    % Modulation
     
    duree = (length(morse)-1)/fs;
    time = 0:1/fs:duree;
     
    porteuse = sin(2*pi*fc*fs*time);
    signal = porteuse .* morse;
     
    wavwrite(signal, fs, 'signal.wav');
    figure (fig++, 'name', 'signal');
    plot (signal); ylim ([-3,3]);
     
    % Bruitage
     
    bruit = 1.0;	% Amplitude du bruit
     
    signal = signal + bruit*wgn(1,size(signal,2),1);
     
    wavwrite(signal, fs, 'signal+bruit.wav');
    figure (fig++, 'name', 'signal + bruit');
    plot (signal); ylim ([-3,3]);
     
    % Filtrage
     
    BW = 20/fs;		% Largeur de bande
     
    [b,a] = dsp_bandpass (BW,fc,fs);
    filtrage = filter (b, a, signal);
     
    wavwrite(filtrage, fs, 'filtrage.wav');
    figure (fig++, 'name', 'filtrage');
    plot (filtrage); ylim ([-3,3]);
     
    % Démodulation
     
    demod = abs( hilbert (filtrage) );
    demod = tsmovavg (demod,'s',100,2);
    demod = demod > 0.5;
     
    figure (fig++, 'name', 'code recu');
    plot (demod); ylim ([-1,2]);
    Edit: Code OCTAVE, pouvant nécessiter des adaptations pour MATLAB.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci pour cette démonstration. Il me manquait donc l'étape de démodulation, il faudrait que je potasse cette partie qu'on a pas faite en cours encore.

    J'ai une autre question concernant le filtrage adaptif, connaissez-vous des cas d'utilisation de cette méthode de filtrage ? Je me pose la question car pour faire ce filtrage on a besoin de connaitre le signal non bruité, ce qui fait que je ne vois pas son utilité.

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    J'ai commencé à bosser la modulation et la demodulation et j'ai vu qu'on peut faire de la modulation d'amplitude, de phase ou de fréquence. En ayant le signal bruité, comment peut on déterminer le type de modulation qui a été utilisé ?

  7. #7
    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
    Citation Envoyé par aruna67 Voir le message
    En ayant le signal bruité, comment peut on déterminer le type de modulation qui a été utilisé ?
    Vue la diversité des modulations, il n'y a pas de règle générale. Mais des indices. Plus elles sont lentes et plus elles sont faciles à deviner. L'oreille reconnaît le piaulement des modems, et celui des radio-télétypes. Par contre, une modulation ADSL ou radio DRM est quasi-impossibles à deviner si on ne les a pas rencontrées auparavant. L'analyse spectrale peut aider, mais surtout des suppositions sur leur origine qui permet de se douter des technologies employées. Les radio-amateurs ont un catalogue de modulations exotiques. Le spatial en a un autre. Et l'informatique encore un autre.

Discussions similaires

  1. Algorithme d'un filtre ?
    Par Vince78 dans le forum Algorithmes et structures de données
    Réponses: 17
    Dernier message: 04/09/2002, 15h54
  2. recherche filtre flou gaussien
    Par gimlithedwarf dans le forum Langage
    Réponses: 4
    Dernier message: 01/08/2002, 22h32
  3. TADOTable et filtre
    Par GaL dans le forum C++Builder
    Réponses: 16
    Dernier message: 02/07/2002, 16h52
  4. Filtre passe Bande
    Par Mau dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 28/06/2002, 17h03
  5. Probleme de filtre dans bdd
    Par scorpiwolf dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/06/2002, 10h43

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