Main Content

La traduzione di questa pagina non è aggiornata. Fai clic qui per vedere l'ultima versione in inglese.

Sollevamento

Questo esempio mostra come utilizzare il sollevamento su un segnale monodimensionale.

Creare un segnale monodimensionale che sia costante a tratti su 2 campioni. Aggiungere il rumore N(0,0.12) al segnale.

x = [1 1 2 2 -3.5 -3.5 4.3 4.3 6 6 -4.5 -4.5 2.2 2.2 -1.5 -1.5];
x = repmat(x,1,64);
rng default
x = x+ 0.1*randn(size(x));

Tracciare il segnale e ingrandire i primi 100 campioni per visualizzare la correlazione nei campioni vicini.

plot(x)
xlim([0 100])
title('Signal')
xlabel('Index')
ylabel('Amplitude')

Figure contains an axes object. The axes object with title Signal, xlabel Index, ylabel Amplitude contains an object of type line.

Utilizzare la wavelet pigra per ottenere i componenti polifase pari e dispari del segnale. Tracciare i coefficienti di dettaglio (wavelet) in D e osservare che questa trasformata non ha dissociato il segnale. I coefficienti wavelet assomigliano molto al segnale.

LS = liftingScheme;
[A,D] = lwt(x,'LiftingScheme',LS,'Level',1);
plot(D{1})
xlim([0 100])
title('Detail Coefficients')
xlabel('Index')
ylabel('Amplitude')

Figure contains an axes object. The axes object with title Detail Coefficients, xlabel Index, ylabel Amplitude contains an object of type line.

Aggiungere una fase di sollevamento predittiva che sottragga il coefficiente con indice pari dal coefficiente con indice dispari un campione successivo, x(2n+1)-x(2n).

ElemLiftStep = liftingStep('Type','predict','Coefficients',-1,'MaxOrder',0);
LSnew = addlift(LS,ElemLiftStep);

Poiché il segnale è costante a tratti su campioni consecutivi con rumore additivo, la nuova fase predittiva dovrebbe dare come risultato coefficienti wavelet di valore assoluto piccolo. In questo caso, la trasformata wavelet dissocia i dati. Quanto sopra può essere verificato trovando i coefficienti di approssimazione e di dettaglio con la nuova fase predittiva.

[A,D] = lwt(x,'liftingScheme',LSnew,'Level',1);

Se si tracciano i coefficienti di dettaglio (wavelet), si noterà che i coefficienti wavelet non assomigliano più al segnale originale.

plot(D{1})
xlim([0 100])
title('Detail Coefficients')
xlabel('Index')
ylabel('Amplitude')

Figure contains an axes object. The axes object with title Detail Coefficients, xlabel Index, ylabel Amplitude contains an object of type line.

I coefficienti di approssimazione A della trasformata precedente costituiscono il componente polifase pari del segnale. Pertanto, i coefficienti sono influenzati da aliasing. Utilizzare una fase di aggiornamento del sollevamento per aggiornare i coefficienti di approssimazione e ridurre l’aliasing. La fase di aggiornamento sostituisce i coefficienti di approssimazione con x(2n)+1/2(x(2n+1)-x(2n)), che è uguale alla media di x(2n) e x(2n+1). La media è un filtro passa-basso che aiuta a ridurre l’aliasing.

ElemLiftStep = liftingStep('Type','update','Coefficients',1/2,'MaxOrder',0);
LSnew = addlift(LSnew,ElemLiftStep);

Utilizzare il nuovo schema di sollevamento per ottenere la trasformata wavelet del segnale in ingresso. I coefficienti di approssimazione assomigliano a una versione uniforme del segnale originale.

[A,D] = lwt(x,'liftingScheme',LSnew,'Level',1);
plot(A)
xlim([0 100])

Figure contains an axes object. The axes object contains an object of type line.

Creare un nuovo schema di sollevamento utilizzando le stesse fasi di sollevamento di LSnew. Applicare i fattori di demoltiplicazione per garantire una ricostruzione perfetta. Ottenere i coefficienti di approssimazione e di wavelet utilizzando lo schema di sollevamento e ricostruire il segnale utilizzando ilwt. Verificare la perfetta ricostruzione.

scaleFactors = [sqrt(2) sqrt(2)/2];
ElemLiftStep1 = liftingStep('Type','predict','Coefficients',-1,'MaxOrder',0);
ElemLiftStep2 = liftingStep('Type','update','Coefficients',1/2,'MaxOrder',0);
LSscale = liftingScheme('LiftingSteps',[ElemLiftStep1;ElemLiftStep2], ...
    'NormalizationFactors',scaleFactors);
[A,D] = lwt(x,'liftingScheme',LSscale,'Level',1);
xrecon = ilwt(A,D,'liftingScheme',LSscale);
max(abs(x(:)-xrecon(:)))
ans = 1.7764e-15

La wavelet progettata nell’esempio precedente ha rimosso efficacemente un polinomio di ordine zero (costante). Se il comportamento del segnale è rappresentato meglio da un polinomio di ordine superiore, è possibile progettare una wavelet duplice con il numero appropriato di momenti di fuga per dissociare il segnale.

Utilizzare lo schema di sollevamento per progettare una wavelet con due momenti di fuga. Una wavelet duplice con due momenti di fuga dissocia un segnale con un comportamento locale approssimato da un polinomio del primo ordine. Creare un segnale caratterizzato dal comportamento polinomiale del primo ordine con rumore additivo N(0,0.252).

y = [1 0 0 4 0 0 -1 0 0 2 0 0 7 0 0 -4 0 0 1 0 0 -3];
x1 = 1:(21/1024):22-(21/1024);
y1 = interp1(1:22,y,x1,'linear');
rng default
y1 = y1+0.25*randn(size(y1));
plot(x1,y1)
xlim([1 22])

Figure contains an axes object. The axes object contains an object of type line.

In questo caso, i coefficienti wavelet dovrebbero rimuovere un polinomio del primo ordine. Se il valore del segnale a un indice dispari x(2n+1) è ben approssimato da un polinomio del primo ordine adattato ai valori circostanti, 1/2(x(2n)+x(2n+2)) dovrebbe fornire un buon adattamento per x(2n+1). In altre parole, x(2n+1) dovrebbe essere il punto medio tra x(2n) e x(2n+2).

Ne consegue che x(2n+1)-1/2(x(2n)+x(2n+2)) dovrebbe dissociare il segnale.

Creare un nuovo schema di sollevamento con la fase di sollevamento predittiva che modella l’equazione precedente.

ElemLiftStep = liftingStep('Type','predict','Coefficients',[-1/2 -1/2],'MaxOrder',1);
LS = liftingScheme('LiftingSteps',ElemLiftStep,'NormalizationFactors',1);

Utilizzare lo schema di sollevamento per ottenere i coefficienti di approssimazione e di dettaglio, quindi tracciare il risultato.

[A,D] = lwt(y1,'LiftingScheme',LS,'Level',1);
subplot(2,1,1)
plot(A)
xlim([1 512])
title('Approximation Coefficients')
subplot(2,1,2)
plot(D{1})
xlim([1 512])
title('Detail Coefficients')

Figure contains 2 axes objects. Axes object 1 with title Approximation Coefficients contains an object of type line. Axes object 2 with title Detail Coefficients contains an object of type line.

Si noti che i coefficienti wavelet sembrano contenere solo rumore, mentre i coefficienti di approssimazione rappresentano una versione a rumore ridotto del segnale originale. Poiché la trasformata precedente utilizza esclusivamente il componente polifase pari per i coefficienti di approssimazione, è possibile ridurre l’aliasing aggiungendo una fase di aggiornamento.

Creare un nuovo schema di sollevamento costituito dalla fase predittiva precedente e dalla nuova fase di aggiornamento che riduce l’aliasing. Normalizzare lo schema di sollevamento per produrre un banco filtri di ricostruzione perfetto. Ottenere la trasformata wavelet discreta con il nuovo schema di sollevamento e tracciare i risultati.

scaleFactors = [sqrt(2) sqrt(2)/2];
ElemLiftStep1 = liftingStep('Type','predict','Coefficients',[-1/2 -1/2],'MaxOrder',1);
ElemLiftStep2 = liftingStep('Type','update','Coefficients',[1/4 1/4],'MaxOrder',0);
LSnew = liftingScheme('LiftingSteps',[ElemLiftStep1;ElemLiftStep2], ...
    'NormalizationFactors',scaleFactors);
[A,D] = lwt(y1,'liftingScheme',LSnew,'Level',1);
subplot(2,1,1)
plot(A)
xlim([1 512])
title('Approximation Coefficients')
subplot(2,1,2)
plot(D{1})
xlim([1 512])
title('Detail Coefficients')

Figure contains 2 axes objects. Axes object 1 with title Approximation Coefficients contains an object of type line. Axes object 2 with title Detail Coefficients contains an object of type line.

Dimostrare che è stato progettato un banco filtri di ricostruzione perfetto.

y2 = ilwt(A,D,'liftingScheme',LSnew);
max(abs(y2(:)-y1(:)))
ans = 1.7764e-15

Vedi anche

|

Argomenti complementari