Professional Documents
Culture Documents
Kalatzis DSP Lecture - 3 2018 - 19
Kalatzis DSP Lecture - 3 2018 - 19
Kalatzis DSP Lecture - 3 2018 - 19
-3-
Φίλτρα συνέλιξης
στο πεδίο του χρόνου
Γιάννης Καλατζής
2019
Φίλτρα συνέλιξης στο πεδίο του χρόνου - Ι . Καλατζής 2019
1. ΠΕΡΙΕΧΟΜΕΝΟ ΕΝΟΣ ΣΗΜΑΤΟΣ
Σε μια πρώτη θεώρηση, ένα σήμα αποτελείται από:
- μια γενική μορφή (αργές μεταβολές, χαμηλές συχνότητες),
- τις λεπτομέρειες (γρήγορες μεταβολές, υψηλές συχνότητες).
% Signal
N=100; n=[0:N-1];
A=1; f=2;
x1=A*sin(2*pi*f*n/N); % Sine
x2=(rand(1,N)-0.5)/4; % Noise
x3=x1+x2; % Signal
% Plots
hold on;
plot(n,x1,'r:');
plot(n,x2,'b');
plot(n,x3,'k');
axis([0 N -1.2 1.2]);
‹#›
Φιλτράρισμα συχνοτήτων
Τα φίλτρα διέλευσης χαμηλών συχνοτήτων (βαθυπερατά, low-pass)
Φίλτρα συνέλιξης στο πεδίο του χρόνου - Ι . Καλατζής 2019
Χαμηλές
Σήμα συχνότητες
Low-pass
High-pass
Υψηλές
συχνότητες
‹#›
Φίλτρα συνέλιξης στο πεδίο του χρόνου - Ι . Καλατζής 2019
2. ΕΞΟΜΑΛΥΝΣΗ
Ένας τρόπος εξομάλυνσης των γρήγορων αυξομειώσεων σε ένα σήμα
είναι η αντικατάσταση κάθε τιμής του σήματος με το μέσο όρο αυτής
με τις γειτονικές της. Η μέθοδος αυτή λέγεται εξομάλυνση (smoothing).
𝑥 𝑛 − 1 + 𝑥 𝑛 + 𝑥[𝑛 + 1]
𝑦𝑛 =
3
ή
1 1 1
𝑦 𝑛 = 𝑥 𝑛 − 1 + 𝑥 𝑛 + 𝑥[𝑛 + 1]
3 3 3
% Signal
x = [0 3 6 3 6 9 6 9 3 6];
n = [0:length(x)-1];
% Smoothing by averaging
y(1) = (0+x(1)+x(2))/3;
for i=2:length(x)-1
y(i)=(x(i-1)+x(i)+x(i+1))/3;
end
y(10) = (x(9)+x(10)+0)/3;
% Plots
hold on;
plot(n,x,'bo-');
plot(n,y,'r*-');
grid on;
‹#›
Εξομάλυνση με χρήση συνέλιξης
Παρατηρώντας την προηγούμενη σχέση παρατηρούμε ότι ο
1 1 1
Φίλτρα συνέλιξης στο πεδίο του χρόνου - Ι . Καλατζής 2019
μετασχηματισμός 𝑥 𝑛 → 𝑦 𝑛 = 3 𝑥 𝑛 − 1 + 3 𝑥 𝑛 + 3 𝑥 𝑛 + 1
μπορεί να πραγματοποιηθεί με τη βοήθεια συνέλιξης του x με ένα
σήμα με την παρακάτω κρουστική απόκριση (φίλτρο εξομάλυνσης):
1 1 1
ℎ𝑆𝑚𝑜𝑜𝑡ℎ = , , = 1,1,1 /3
3 3 3
% Signal
x = [0 3 6 3 6 9 6 9 3 6];
nx = [0:length(x)-1];
% Smoothing filter
h = [1 1 1]/3;
% Smoothing by convolution
y = conv(x,h,'same');
ny = [0:length(y)-1];
% Plots
hold on;
plot(nx,x,'bo-');
plot(nx,y,'r*-');
grid on;``
% Signal
Nx=100; nx=[0:Nx-1];
A=1; f=2;
x1=A*sin(2*pi*f*nx/Nx); % Sine wave
x2=(rand(1,Nx)-0.5)/4; % Noise
x=x1+x2; % Signal
plot(nx,x1,'r:'); hold on;
plot(nx,x2,'b'); plot(nx,x,'k');
% Filter
h = [1 1 1]; h = h/sum(h); % Low-pass filter
Nh =length(h); nh = [0:Nh-1];
subplot(2,2,1); hold on;
plot(nx,x1,'k'); plot(nx,x2,'k');
plot(nx,x,'b');
subplot(2,2,2); stem(nh,h,'ro-');
% Filtering by convolution
y = conv(x,h,'same');
Ny = length(y); ny = [0:Ny-1];
subplot(2,2,[3 4]);
plot(nx,x,'b'); hold on;
‹#› stem([-Nh+nh+1:nh],fliplr(h),'r.-');
plot(ny,y,'r');
H εξομάλυνση ως βαθυπερατό φίλτρο
Η εξομάλυνση ελαττώνει τις ταχείες αυξομειώσεις του σήματος, χωρίς
Φίλτρα συνέλιξης στο πεδίο του χρόνου - Ι . Καλατζής 2019
1, 2, 1 /4 τριγωνικό 3 σημείων
‹#›
Φίλτρα συνέλιξης στο πεδίο του χρόνου - Ι . Καλατζής 2019
3. ΥΨΙΠΕΡΑΤΟ ΦΙΛΤΡΑΡΙΣΜΑ
Υψιπερατό φιλτράρισμα σε ένα σήμα μπορεί να πραγματοποιηθεί με αφαίρεση
του εξομαλυμένου σήματος από το αρχικό. Με τον τρόπο αυτό, αφαιρούνται οι
χαμηλές συχνότητες από το αρχικό σήμα και απομένουν οι υψηλές:
ℎ𝐻𝑖𝑔ℎ = 𝛿 − ℎ𝐿𝑜𝑤
Η συνάρτηση δ στην περίπτωση αυτή σχηματίζεται με τη μονάδα στο κέντρο και
μηδέν στις υπόλοιπες τιμές.
% Signal
x = [0 3 6 3 6 9 6 9 3 6];
n = [0:length(x)-1];
% Filters
hL = [1 1 1]/3; % Low
hH = [0 1 0] - hL; % High
% Filtering
yL = conv(x,hL,'same'); % Low
yH = conv(x,hH,'same'); % High
% Plots
hold on;
plot(n,x,'bo-');
plot(n,yL,'g*-');
plot(n,yH,'r*-');
grid on;
% Signal
Nx=100; nx=[0:Nx-1];
A=1; f=2;
x1=A*sin(2*pi*f*nx/Nx); % Sine wave
x2=(rand(1,Nx)-0.5)/4; % Noise
x=x1+x2; % Signal`
plot(nx,x1,'r:'); hold on;
plot(nx,x2,'b'); plot(nx,x,'k');
% Filter
hL = [1 1 1]; hL = hL/sum(hL); % Low
h = [0 1 0] - hL; % High
Nh =length(h); nh = [0:Nh-1];
subplot(2,2,1); hold on;
plot(nx,x1,'k'); plot(nx,x2,'k');
plot(nx,x,'b');
subplot(2,2,2); stem(nh,h,'ro-');
% High-pass filtering
y = conv(x,h,'same');
Ny = length(y); ny = [0:Ny-1];
subplot(2,2,[3 4]);
plot(nx,x,'b'); hold on;
‹#› stem([-Nh+nh+1:nh],fliplr(h),'r.-');
plot(ny,y,'r');
Υψιπερατά φίλτρα
Αν εφαρμοστεί η προηγούμενη διαδικασία (hHigh = δ – hLow) στα βαθυπερατά
Φίλτρα συνέλιξης στο πεδίο του χρόνου - Ι . Καλατζής 2019
φίλτρα που προαναφέρθηκαν, προκύπτουν τα εξής υψιπερατά φίλτρα:
{-1, 2, -1}/3
{-1, 2, -1}/4
hHigh = {-1, -2, 6, -2, -1}/9
{-1, -4, 10, -4, -1}/16
{-1, -4, -8, 26, -8, -4, -1}/36
{-1, -4, -9, -14, 56, -14, -9, -4, -1}/73
Οι συντελεστές των υψιπερατών φίλτρων:
- Έχουν θετική τιμή στο κέντρο & αρνητικές τιμές εκατέρωθεν.
- Οι τιμές τους έχουν άθροισμα ίσο με το μηδέν.
Αυτό έχει ως αποτέλεσμα τα υψιπερατά φίλτρα να μηδενίζουν τη συνεχή συνιστώσα (DC)
ενός σήματος (αναμενόμενο, καθώς το DC έχει τη χαμηλότερη δυνατή συχνότητα, μηδέν).
Απόδειξη: Έστω x = {k, k, k, k, k} ένα σταθερό σήμα (DC) (ή η σταθερή συνιστώσα ενός
σήματος) και h = {a, b, c} ένα υψιπερατό φίλτρο. Το φιλτράρισμα του x με το h είναι:
y[n] = x[n-1]·h[0] + x[n]·h[1] + x[n+1]·h[2] = k·a + k·b + k·c = k·(a+b+c).
‹#› Όμως, a+b+c=0 (άθροισμα τιμών υψιπερατού φίλτρου), άρα k·(a+b+c) = 0, άρα y[n] = 0.
4. ΟΞΥΝΣΗ
Όξυνση (sharpening) ενός σήματος είναι η ενίσχυση των λεπτομερειών
Φίλτρα συνέλιξης στο πεδίο του χρόνου - Ι . Καλατζής 2019
hSharp = δ + hHigh
Παράδειγμα: Έστω το υψιπερατό φίλτρο hHigh = {-1, 2, -1}/4.
Τότε, το αντίστοιχο φίλτρο όξυνσης κατασκευάζεται ως εξής:
% Signal
x = [0 3 6 3 6 9 6 9 3 6];
n = [0:length(x)-1];
% Filters
hH = [-1 2 -1]/3; % High
hS = [0 1 0] + hH; % Sharpen
% Filtering
yH = conv(x,hH,'same'); % Hi
yS = conv(x,hS,'same'); % Sh
% Plots
hold on;
plot(n,x,'bo-');
plot(n,yH,'g*-');
plot(n,yS,'r*-');
grid on;
Παρατηρούμε ότι η γενική μορφή του σήματος έχει οξυνθεί, με αύξηση της
αντίθεσης (οι μεγαλύτερες τιμές αυξήθηκαν, ενώ οι μικρότερες ελαττώθηκαν).
‹#› Εφαρμογή: Ανάδειξη λεπτομερειών σε θολές εικόνες.
Παράδειγμα όξυνσης σε περιβάλλον
ύπαρξης θορύβου
Παράδειγμα υψιπερατού φιλτραρίσματος με το φίλτρο h = {-1,5,-1}/3
Φίλτρα συνέλιξης στο πεδίο του χρόνου - Ι . Καλατζής 2019
% Signal
Nx=100; nx=[0:Nx-1];
A=1; f=2;
x1=A*sin(2*pi*f*nx/Nx); % Sine wave
x2=(rand(1,Nx)-0.5)/4; % Noise
x=x1+x2; % Signal
plot(nx,x1,'r:'); hold on;
plot(nx,x2,'b'); plot(nx,x,'k');
% Filters
hL = [1 1 1]; hL = hL/sum(hL); % Low
hH = [0 1 0] - hL; % High
h = [0 1 0] + hH; % Sharpen
Nh =length(h); nh = [0:Nh-1];
subplot(2,2,1); hold on;
plot(nx,x1,'k'); plot(nx,x2,'k');
plot(nx,x,'b');
subplot(2,2,2); stem(nh,h,'ro-');
% Filtering
y = conv(x,h,'same');
Ny = length(y); ny = [0:Ny-1];
subplot(2,2,[3 4]); plot(nx,x,'b'); hold on;
‹#› stem([-Nh+nh+1:nh],fliplr(h),'r.-');
plot(ny,y,'r');
Παράδειγμα όξυνσης για ανάδειξη
λεπτομερειών σε ομοιογενές περιβάλλον
Φίλτρα συνέλιξης στο πεδίο του χρόνου - Ι . Καλατζής 2019
χρησιμοποιούνται σε
αλγορίθμους εύρεσης του
καρδιακού ρυθμού. Βασικό
στοιχείο των αλγορίθμων
αυτών είναι η αυτόματη
ανίχνευση του συμπλόκου
QRS, η οποία υποβοηθείται
με τη διέλευση του
ηλεκτροκαρδιογραφικού
σήματος από φίλτρο
ανίχνευσης ακμών.
%
ecg = load('ecg.txt');
n = [401:1400]; x = ecg(n);
Η ενίσχυση των ακμών γίνεται με την άθροιση των ακμών, όπως αυτές
ανιχνεύθηκαν με τη διαδικασία ανίχνευσης ακμών, στο αρχικό σήμα:
hEnh = δ + hDiff
Παράδειγμα: Έστω το φίλτρο ανίχνευσης ακμών hDiff = {1, -1}.
Τότε, το αντίστοιχο φίλτρο ενίσχυσης ακμών κατασκευάζεται ως εξής:
‹#› Εφαρμογή: Ανάδειξη ορίων δομών (π.χ. οργάνων του σώματος) σε εικόνες.
Φίλτρα ενίσχυσης ακμών
Φίλτρα συνέλιξης στο πεδίο του χρόνου - Ι . Καλατζής 2019
‹#›
‹#›
Φίλτρα συνέλιξης στο πεδίο του χρόνου - Ι . Καλατζής 2019
ΠΙΝΑΚΕΣ
8. ΣΥΓΚΕΝΤΡΩΤΙΚΟΙ
ΦΙΛΤΡΑ ΣΥΝΕΛΙΞΗΣ
ΣΤΟ ΠΕΔΙΟ ΤΟΥ ΧΡΟΝΟΥ
Φίλτρα συνέλιξης στο πεδίο του χρόνου - Ι . Καλατζής 2019
Εξομάλυνσης
hLo = {1 1 1}/3
(Βαθυπερατό)
‹#›
‹#›
Φίλτρα συνέλιξης στο πεδίο του χρόνου - Ι . Καλατζής 2019
ΣΤΟ ΠΕΔΙΟ ΤΟΥ ΧΡΟΝΟΥ
ΦΙΛΤΡΑΡΙΣΜΑ ΜΕΣΩ ΣΥΝΕΛΙΞΗΣ
ΕΦΑΡΜΟΓΕΣ ΦΙΛΤΡΩΝ ΣΥΝΕΛΙΞΗΣ
ΣΤΟ ΠΕΔΙΟ ΤΟΥ ΧΡΟΝΟΥ
Φίλτρα συνέλιξης στο πεδίο του χρόνου - Ι . Καλατζής 2019
Εξομάλυνσης
Ελάττωση
(Βαθυπερατό)
θορύβου
π.χ. hLow = [1,1,1]/3
Υψιπερατό Καταστολή
= δ - hLow συνεχούς (DC)
π.χ. hHigh = [-1,2,-1]/3 συνιστώσας
Όξυνσης Ανάδειξη
= δ + hHigh λεπτομερειών
π.χ. hSharp = [-1,5,-1]/3 θολής εικόνας
Ανίχνευσης ακμών
Τμηματοποίηση
(Διαφόρισης)
εικόνων
π.χ. hDiff = [1,-1]