Bonjour,
J'aimerais vos lumières sur la défintion d'une enveloppe d'un signal discret.
J'ai un signal sismique, échantillonné à Fs=125Hz. J'aimerais avoir son enveloppe.
Généralement et dans la FAQ de ce site on la défini par les valeurs absolus (si nombre imaginaire) de la transformée de Hilbert:
Dans mon cas cela donne donc ceci (+zoom), en bleu le signal et en rouge l'enveloppe :
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 clear all close all load('TestSignal') %%%%%%%%%% ESSAI 1 ENVELOPPE %%%%%%%%%% % - Enveloppe de Hilbert signal1 =abs (hilbert(signal)) ; figure subplot(211) plot(time,signal) hold on plot(time,signal1,'r','linewidth',2); y=ylim; line([1 1000;1 1000],repmat(y(:),1,numel([1 1000])),'color','y','linestyle','--') xlim([time(1) time(end)]) xlabel('time') ylabel('amplitude (m/s)') title('Enveloppe de Hilbert') subplot(212) plot(time(1:1000),signal(1:1000)) hold on plot(time(1:1000),signal1(1:1000),'r','linewidth',2); xlim([time(1) time(1000)]) xlabel('time') ylabel('amplitude (m/s)') title('ZOOM')
On remarque que c'est assez illisible, voir incohérent étant donné que l'enveloppe est censé passer par les max des amplitudes et qu'ici (voir zoom), il ne fait pas ça du tout.
Donc j'ai trouvé une autre méthode :
qui donne, pour différentes valeurs de filtre passe-bas:
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 %%%%%%%%%% ESSAI 2 ENVELOPPE %%%%%%%%%% % - retirer la valeur moyenne du signal (elle devrait être nulle mais la mesure peut introduire un biais) % - élever le signal au carré % - multiplier par deux % - appliquer un filtre passe pas (avec une fréquence max inférieure aux fréquences sonores enregistrées) % - prendre la racine carrée du résultat signal2=signal-mean(signal) ; signal2 = 2*(signal2.^2); filtre=[0.01 0.025 0.5 1 2 5]; for ii=1:6 Wn = 2*[filtre(ii)]/ Fs; [b,a] = butter(2,Wn,'low') ; signal3(:,ii) = filtfilt(b,a,signal2); end signal3 = sqrt(signal3); figure for ii = 1:6 subplot(2,3,ii); plot(time,signal); hold on; plot(time, signal3(:,ii),'r','linewidth',2); xlim([time(1) time(end)]) text(0.02,0.95,['Filtre Passe Bas: ',num2str(filtre(ii)),'Hz'],'Units','normalized','HorizontalAlignment','left',... 'VerticalAlignment','top','BackgroundColor','k','FontWeight','bold','color','w'); xlabel('time') ylabel('amplitude (m/s)') end
Mes questions sont:
- Dans ce cas, quelles fréquences de filtre choisir? à l'oeil? y'a t il des règles ?
- Y'a t il une autre méthode pour avoir l'enveloppe d'une signal tel que celui-ci ?
- J'aimerais tracer l'énergie du signal dans le domaine temporel. Peut il être mesuré en prenant simplement le carré d'une enveloppe?
Merci pour vos réponses.
PS: signal en pièce jointe
Partager