Mediaanisuodatus Matlabilla toteutettuna

Matlab-skripti, joka suodattaa häiriöisen kanttiaallon mediaani- ja alipäästösuodatuksella ja piirtää tuloksista kuvaajat (kuva sivun lopussa skriptin jälkeen).

% Tyhjennetään Matlabin työtila eli käytännössä
% poistetaan vanhat muuttujat tilaa viemästä
clear

% Mediaanisuodatuksen ja keskiarvoistamalla
% alipäästösuodatuksen ikkunan pituus on 101 näytettä
windowSize=101;

% Suodatetaan malliksi yksi 1000 näytteen
% pituinen jakso häiriöistä kanttiaaltoa
sampleLength=1000;

% Muodostetaan häiriö satunnaislukuna
hairio=rand(1,sampleLength);

% Muodostetaan kanttiaallon jakson ensimmäinen
% puolikas ja lisätään siihen samalla häiriö
for I=1:sampleLength/2
    x(I)=-2+hairio(I);
end

% Muodostetaan kanttiaallon jakson toinen
% puolikas ja lisätään siihenkin samalla häiriö
for I=sampleLength/2+1:sampleLength
    x(I)=2+hairio(I);
end

% Mediaanisuodatetaan signaali käyttäen alussa
% määriteltyä ikkunan pituutta
xm=medfilt1(x,windowSize);

% Keskiarvosuodatetaan signaali käyttäen alussa
% määriteltyä ikkunan pituutta
xlp=filter(ones(1,windowSize)/windowSize,1,x);

% Määritellään piirtoikkuna pitämään vanhat
% plottaukset näkyvissä uusien kanssa
hold on

% Piirretään alkuperäinen, mediaanisuodatettu,
ja alipäästösuodatettu signaali
plot(x)
plot(xm,'+red')
plot(xlp,'black')

% Piirretään asteikko
grid

% Vapautetaan piirtoikkuna tyhjennettäväksi
hold off

Alkuperäinen signaali

Mediaanisuodatettu signaali

Keskiarvoistamalla alipäästösuodatettu signaali