Krystian Babioch AiR sem

Krystian Babioch AiR sem. 5

P odstawy Cyfrowego Przetwarzania Sygnałów

Uzyskane wykresy:

















M -file:

SygnalEKG = importdata('ekg0.mat'); %Import danych z pliku

[WymiarX, WymiarY] = size(SygnalEKG); %Odczyt wymiarów macierzy

CzestProb = 250; %Deklaracja czestotliwosci probkowania

OkresProb=1/CzestProb; %Obliczenie okresu probkowania

Czas=(0:OkresProb:WymiarX/CzestProb-OkresProb)'; %Obliczenie wartosci wektora czasu


%Zadanie 1.


figure; %Deklaracja nowego obszaru kreslenia

plot(Czas, SygnalEKG); %Rysowanie przebiegu czasowego podanego sygnału

axis([-Inf ,5 ,-Inf ,Inf]); %Ustawienie limitów osi

grid on; %Włączenie siatki na wykresie

title('Przebieg czasowy oryginalnego sygnału EKG') %Nadanie nazwy wykresu

legend('Sygnal EKG'); %Ustawienie etykiet legendy


SygnalEKGFourier=fft(SygnalEKG, CzestProb); %Dokonanie transformaty Fouriera na sygnale

SygnalGWM=abs(SygnalEKGFourier).^2./CzestProb; %Obliczenie wartości GWM

CzestNyquista = CzestProb/2; %Obliczenie częstotliwości Nyquista


figure; %Deklaracja nowego obszaru kreslenia

semilogy((0:CzestNyquista-1), SygnalGWM(1:CzestNyquista)); %Rysowanie gęstości widmowej mocy sygnału EKG

grid on; %Włączenie siatki na wykresie

title('Gęstość widmowa mocy oryginalnego sygnału EKG') %Nadanie nazwy wykresu

legend('Sygnal EKG'); %Ustawienie etykiet legendy


%Zadanie 2.


CzestZakl = 50; %Częstotliwość zakłócenia

CzestProbZakl = 250; %Częstotliwości z jaką jest próbkowane zakłócenie

OkresZakl = 1/CzestProbZakl; %Okres próbkowania zakłócenia

w = 2*pi*CzestZakl; %Obliczenie omegi zakłócenia

FiltrZerujacyLicznik = [1 -2*cos(w*OkresZakl) 1]; %Współczynniki licznika filtra zerującego

FiltrZerujacyMianownik = 1; %Współczynniki mianownika filtra zerującego

fvtool(FiltrZerujacyLicznik, FiltrZerujacyMianownik); %Rysowanie charakterystyk filtra zerującego


SygnalEKGPoFiltrZer = filter(FiltrZerujacyLicznik, FiltrZerujacyMianownik, SygnalEKG); %Filtracja sygnału filtrem zerującym


figure; %Deklaracja nowego obszaru kreslenia

plot(Czas, SygnalEKG, 'g'); %Rysowanie przebiegu czasowego oryginalnego sygnału

hold on; %Dalsze rysowanie na tym samym obszerze kreślenia

plot(Czas, SygnalEKGPoFiltrZer, 'r'); %Rysowanie przebiegu czasowego przefiltrowanego sygnału

axis([-Inf ,5 ,-Inf ,Inf]); %Ustawienie limitów osi

grid on; %Włączenie siatki na wykresie

title('Prównanie przebiegó czasowych po przefiltrowaniu filtrem zerującym oraz przed')%Nadanie nazwy wykresu

legend('Sygnal EKG', 'Filtr Zerujacy'); %Ustawienie etykiet legendy


SygnalEKGPoFiltrZerFourier=fft(SygnalEKGPoFiltrZer,CzestProb); %Transformata Fouriera na przefiltrowanym sygnale

PoZerGWM=abs(SygnalEKGPoFiltrZerFourier).^2./CzestProb; %Obliczenie wartości GWM dla przefiltrowanego sygnału

CzestNyqZakl = CzestProbZakl/2; %Obliczenie częstotliwości Nyquista zakłócenia


figure; %Deklaracja nowego obszaru kreslenia

semilogy((0:CzestNyquista-1), SygnalGWM(1:CzestNyquista), 'Color', 'g'); %Rysowanie gęstości widmowej mocy sygnału EKG

hold on; %Dalsze rysowanie na tym samym obszerze kreślenia

semilogy((0:CzestNyqZakl-1), PoZerGWM(1:CzestNyqZakl), 'Color', 'r'); %Rysowanie gęstości widmowej mocy sygnału EKG po filtracji filtrem zerującym

grid on; %Włączenie siatki na wykresie

title('Prównanie gęstości widmowej mocy po przefiltrowaniu filtrem zerującym oraz przed')%Nadanie nazwy wykresu

legend('Sygnal EKG', 'Filtr Zerujacy'); %Ustawienie etykiet legendy


%Zadanie 4.


a1=0.7; %Dobierany współczynnik 1

a2=0.5; %Dobierany współczynnik 2

a3=0.9; %Dobierany współczynnik 3


FiltrWyglLicznik1 = 1-a1; %Współczynniki licznika filtra zerującego 1

FiltrWyglMianownik1 = [1 -a1]; %Współczynniki mianownika filtra zerującego 1

FiltrWyglLicznik2 = 1-a2; %Współczynniki licznika filtra zerującego 2

FiltrWyglMianownik2 = [1 -a2]; %Współczynniki mianownika filtra zerującego 2

FiltrWyglLicznik3 = 1-a3; %Współczynniki licznika filtra zerującego 3

FiltrWyglMianownik3 = [1 -a3]; %Współczynniki mianownika filtra zerującego 3


PoWygl1 = filter(FiltrWyglLicznik1, FiltrWyglMianownik1, SygnalEKGPoFiltrZer);%Sygnał po wygładzeniu podanym filtrem 1

PoWygl2 = filter(FiltrWyglLicznik2, FiltrWyglMianownik2, SygnalEKGPoFiltrZer);%Sygnał po wygładzeniu podanym filtrem 2

PoWygl3 = filter(FiltrWyglLicznik3, FiltrWyglMianownik3, SygnalEKGPoFiltrZer);%Sygnał po wygładzeniu podanym filtrem 3


figure; %Deklaracja nowego obszaru kreslenia

plot(Czas, SygnalEKGPoFiltrZer, 'y'); %Rysowanie przebiegu czasowego przefiltrowanego sygnału

hold on; %Dalsze rysowanie na tym samym obszerze kreślenia

plot(Czas, PoWygl1, 'g'); %Rysowanie przebiegu czasowego wygładzonego sygnału 1

hold on; %Dalsze rysowanie na tym samym obszerze kreślenia

plot(Czas, PoWygl2, 'r'); %Rysowanie przebiegu czasowego wygładzonego sygnału 2

hold on; %Dalsze rysowanie na tym samym obszerze kreślenia

plot(Czas, PoWygl3, 'b'); %Rysowanie przebiegu czasowego wygładzonego sygnału 3

axis([-Inf ,5 ,-Inf ,Inf]); %Ustawienie limitów osi

grid on; %Włączenie siatki na wykresie

title('Porównanie przebiegów czasowych sygnału po filtrze zerującym i po wygładzeniu dla różnych parametrów a')%Nadanie nazwy wykresu

legend('Filtr Zerujacy', 'Wygładzenie dla a=0.7', 'Wygładzenie dla a=0.5', 'Wygładzenie dla a=0.9');%Ustawienie etykiet legendy


PoWyglFourier=fft(PoWygl2,CzestProb); %Transformata Fouriera sygnału po wygładzeniu

PoWyglGWM=abs(PoWyglFourier).^2./CzestProb; %Gęstość widmowa mocy po wygładzeniu

CzestNyq = CzestProb/2; %Obliczenie częstotliwości nyquista


figure; %Deklaracja nowego obszaru kreslenia

semilogy((0:CzestNyqZakl-1), PoZerGWM(1:CzestNyqZakl), 'Color', 'g'); %Rysowanie gęstości widmowej mocy sygnału EKG po filtracji filtrem zerującym

hold on; %Dalsze rysowanie na tym samym obszerze kreślenia

semilogy((0:CzestNyq-1), PoWyglGWM(1:CzestNyq), 'Color', 'r'); %Rysowanie gęstości widmowej mocy sygnału wygładzonego

grid on; %Włączenie siatki na wykresie

title('Porównanie gęstości widmowych mocy oryginalnego sygnału i po wygładzeniu')%Nadanie nazwy wykresu

legend('Filtr Zerujacy', 'Wygładzenie dla a=0.5'); %Ustawienie etykiet legendy


%Zadanie 6.

CzasKor=((-WymiarX/CzestProb+OkresProb):OkresProb:WymiarX/CzestProb-OkresProb)';%Obliczenie czasu autokorelacji

AutokorEKG = xcorr(SygnalEKG); %Autokorelacja oryginalnego sygnału EKG

AutokorZer = xcorr(SygnalEKGPoFiltrZer); %Autokorelacja sygnału EKG po filtracji filtrem zerującym

AutokorWygl = xcorr(PoWygl2); %Autokorelacja sygnału EKG po filtracji filtrem wygładzającym


figure; %Deklaracja nowego obszaru kreslenia

plot(CzasKor, AutokorEKG, 'g'); %Rysowanie wykresu autokorelacji oryginalnego sygnału

hold on; %Dalsze rysowanie na tym samym obszerze kreślenia

plot(CzasKor, AutokorZer), 'r'; %Rysowanie wykresu autokorelacji sygnału po filtracji filtrem zerującym

hold on; %Dalsze rysowanie na tym samym obszerze kreślenia

plot(CzasKor, AutokorWygl), 'b'; %Rysowanie wykresu autokorelacji sygnału po filtracji filtrem wygładzającym

grid on; %Włączenie siatki na wykresie

title('Porównanie przebiegów czasowych autokorelacji poszczególnych sygnałów')%Nadanie nazwy wykresu

legend('EKG', 'Filtr Zerujący', 'Wygładzenie'); %Ustawienie etykiet legendy


%Zadanie 7.


SygnalEKGBezOffsetu = SygnalEKG - mean(SygnalEKG); %Sygnał EKG bez offsetu

PoZerBezOffsetu = filter(FiltrZerujacyLicznik, FiltrZerujacyMianownik, SygnalEKGBezOffsetu);%Filtracja sygnału bez offsetu filtrem zerującym

PoWyglBezOffsetu = filter(FiltrWyglLicznik2, FiltrWyglMianownik2, SygnalEKGBezOffsetu);%Filtracja sygnału bez offsetu filtrem wygładzającym


PoprAutokorEKG = xcorr(SygnalEKGBezOffsetu); %Autokorelacja sygnału EKG bez offsetu

PoprAutokorZer = xcorr(PoZerBezOffsetu); %Autokorelacja sygnału EKG bez offsetu po filtracji filtrem zerującym

PoprAutokorWygl = xcorr(PoWyglBezOffsetu); %Autokorelacja sygnału EKG bez offsetu po filtracji filtrem wygładzającym


figure; %Deklaracja nowego obszaru kreslenia

plot(CzasKor, PoprAutokorEKG, 'g'); %Rysowanie wykresu autokorelacji sygnału bez offsetu

hold on; %Dalsze rysowanie na tym samym obszerze kreślenia

plot(CzasKor, PoprAutokorZer), 'r'; %Rysowanie wykresu autokorelacji sygnału bez offsetu po filtracji filtrem zerującym

hold on; %Dalsze rysowanie na tym samym obszerze kreślenia

plot(CzasKor, PoprAutokorWygl), 'b'; %Rysowanie wykresu autokorelacji sygnału bez offsetu po filtracji filtrem wygładzającym

grid on; %Włączenie siatki na wykresie

title('Porównanie przebiegów czasowych autokorelacji poszczególnych sygnałów bez offsetu')%Nadanie nazwy wykresu

legend('EKG', 'Filtr Zerujący', 'Wygładzenie'); %Ustawienie etykiet legendy


figure; %Dalsze rysowanie na tym samym obszerze kreślenia

plot(CzasKor, PoprAutokorWygl), 'b'; %Rysowanie wykresu autokorelacji sygnału bez offsetu po filtracji filtrem wygładzającym

grid on; %Włączenie siatki na wykresie

axis([-2.5 , 2.5,-Inf ,Inf]); %Ustawienie limitów osi

title('Porównanie przebiegów czasowych autokorelacji poszczególnych sygnałów bez offsetu (Przybliżenie)')%Nadanie nazwy wykresu

legend('Wygładzenie'); %Ustawienie etykiet legendy



%Zadanie 5*.


K1 = 2; %Rząd średniej ruchomej 1

K2 = 10; %Rząd średniej ruchomej 2

K3 = 20; %Rząd średniej ruchomej 3


PoSredniejRuchomej1 = filter(ones(1,K1)/K1, 1, PoWygl2); %Filtracja sygnału przy pomocy średniej ruchomej 1

PoSredniejRuchomej2 = filter(ones(1,K2)/K2, 1, PoWygl2); %Filtracja sygnału przy pomocy średniej ruchomej 2

PoSredniejRuchomej3 = filter(ones(1,K3)/K3, 1, PoWygl2); %Filtracja sygnału przy pomocy średniej ruchomej 3


figure; %Deklaracja nowego obszaru kreslenia

plot(Czas, PoSredniejRuchomej1, 'g'); %Rysowanie przebiegu czasowego sygnału przefiltrowanego przy pomocy średniej ruchomej 1

hold on; %Dalsze rysowanie na tym samym obszerze kreślenia

plot(Czas, PoSredniejRuchomej2, 'r'); %Rysowanie przebiegu czasowego sygnału przefiltrowanego przy pomocy średniej ruchomej 2

hold on; %Dalsze rysowanie na tym samym obszerze kreślenia

plot(Czas, PoSredniejRuchomej3, 'b'); %Rysowanie przebiegu czasowego sygnału przefiltrowanego przy pomocy średniej ruchomej 3

hold on; %Dalsze rysowanie na tym samym obszerze kreślenia

plot(Czas, PoWygl2, 'y'); %Rysowanie przebiegu czasowego sygnału wygładzonego

grid on; %Włączenie siatki na wykresie

axis([-Inf , 5,-Inf ,Inf]); %Ustawienie limitów osi

title('Porównanie przebiegów czasowych przed i po filtracji średnią ruchomą dla różnych wartości K')%Nadanie nazwy wykresu

legend('Średnia ruchoma dla K=2', 'Średnia ruchoma dla K=10', 'Średnia ruchoma dla K=20');%Ustawienie etykiet legendy


PoSredniejRuchomejFourier=fft(PoSredniejRuchomej2, CzestProb); %Transformata Fouriera sygnału po filtracji średnią ruchomą

PoSredniejRuchomejGWM=abs(PoSredniejRuchomejFourier).^2./CzestProb; %Obliczanie GWM

CzestNyquist = CzestProb/2; %Obliczenie częstotliwości nyquista


figure; %Deklaracja nowego obszaru kreslenia

semilogy((0:CzestNyquist-1), PoSredniejRuchomejGWM(1:CzestNyquist), 'Color', 'g');%Rysowanie gęstości widmowej mocy sygnału przefiltrowanego średnią ruchomą

hold on; %Dalsze rysowanie na tym samym obszerze kreślenia

semilogy((0:CzestNyquist-1), PoWyglGWM(1:CzestNyquist), 'Color', 'r'); %Rysowanie gęstości widmowej mocy sygnału wygładzonego

grid on; %Włączenie siatki na wykresie

title('Porównanie gęstości widmowych mocy przed i po filtracji średnią ruchomą')%Nadanie nazwy wykresu

legend('Średnia ruchoma dla K=10', 'Wygladzony'); %Ustawienie etykiet legendy


PoBandpass = filter(bandpass, PoWygl2); %Filtracja zaprojektowanym filtrem pasmowoprzepustowym

fvtool(bandpass); %Charakterystyki filtra pasmowoprzepustowego


figure; %Deklaracja nowego obszaru kreslenia

plot(Czas, PoBandpass, 'g'); %Rysowanie przebiegu czasowego sygnału przefiltrowanego przy zaprojektowanego w FDATool filtra pasmowoprzepustowego

hold on; %Dalsze rysowanie na tym samym obszerze kreślenia

plot(Czas, PoWygl2, 'r'); %Rysowanie przebiegu czasowego sygnału wygladzonego

grid on; %Włączenie siatki na wykresie

axis([8 , 16,-Inf ,Inf]); %Ustawienie limitów osi

title('Porównanie przebiegów czasowych przed i po filtracji filtrem pasmowoprzepustowym')%Nadanie nazwy wykresu

legend('Filtr Pasmowoprzepustowy', 'Wygładzony'); %Ustawienie etykiet legendy


PoBandpassFourier=fft(PoBandpass, CzestProb); %Transformata Fouriera sygnału po filtracji filtrem pasmowoprzepustowym

PoBandpassGWM=abs(PoBandpassFourier).^2./CzestProb; %Obliczanie GWM


figure; %Deklaracja nowego obszaru kreslenia

semilogy((0:CzestNyquist-1), PoBandpassGWM(1:CzestNyquist), 'Color', 'g'); %Rysowanie gęstości widmowej mocy sygnału przefiltrowanego filtrem pasmowoprzepustowym

hold on; %Dalsze rysowanie na tym samym obszerze kreślenia

semilogy((0:CzestNyquist-1), PoWyglGWM(1:CzestNyquist), 'Color', 'r'); %Rysowanie gęstości widmowej mocy sygnału wygładzonego

grid on; %Włączenie siatki na wykresie

title('Porównanie gęstości widmowych mocy przed i po filtracji filtrem pasmowoprzepustowym')%Nadanie nazwy wykresu

legend('Bandpass', 'Wygladzony'); %Ustawienie etykiet legendy




Wnioski:

Na podstawie przebiegu czasowego możemy stwierdzić, że zastosowanie średniej ruchomej za skutkowało wygładzeniem sygnału oraz zwiększeniem pików widocznych w oryginalnym sygnale.

Dokonałem porównania na jednym wykresie odpowiedzi czasowych z wykorzystaniem 3 różnych rzędów średniej ruchomej i piki są tym bardziej wzmacniane im większy jest rząd K.

Filtr pasmowo-przepustowy został zaprojektowany w środowisku FDATool tak aby przepuszczał częstotliwości z przedziału 0.5Hz do 40Hz gdyż to właśnie w tym paśmie znajduję się interesujący nas sygnał. Po jego zastosowaniu przebieg czasowy uległ przesunięciu lecz nie ma to większego wpływu na odczyt interesujących nas danych, ponieważ nieważne jest położenie pików w czasie, lecz ich wzajemna odległość na podstawie, której obliczamy puls. Filtr został utworzony poprzez wybranie poniższych opcji:

Fs = 250; % Sampling Frequency


Fstop1 = 0.2; % First Stopband Frequency

Fpass1 = 0.6; % First Passband Frequency

Fpass2 = 36; % Second Passband Frequency

Fstop2 = 40; % Second Stopband Frequency

Dstop1 = 0.001; % First Stopband Attenuation

Dpass = 0.057501127785; % Passband Ripple

Dstop2 = 0.001; % Second Stopband Attenuation


Wybrany przezemnie model to Filtr FIR, Window, Kaiser


Wyszukiwarka

Podobne podstrony:
Calkowanie numeryczne, WIP AIR, SEM 1, TEINF, TEINF, Teinf projekty
MIKRO2, Mikroprocesory AiR sem.V
Przyżądy Optoelektroniczne, AiR Sem IV gr I Sekcja
Pytania na MAMET, WIP AIR, SEM 1, MATIN, MATIN, kolokwia, kolos 1
projekt 3 i 4 - sroda 8-10 i 10-12, WIP AIR, SEM 1, TEINF, TEINF, Teinf projekty
pytania na mamet (5), WIP AIR, SEM 1, MATIN, MATIN, kolokwia, kolos 1
Kol 2, WIP AIR, SEM 1, MATIN, MATIN, kolokwia, kolos 2
Uskom, WIP AIR, SEM 1, USKOM, USKOM, Uskom 2014
mamet ściąga, WIP AIR, SEM 1, MATIN, MATIN, kolokwia, kolos 1
Calkowanie numeryczne, WIP AIR, SEM 1, TEINF, TEINF, Teinf projekty
Egz AiR, sem letni 2013 informacja
Polimery-IM sem.V-zagadnienia na zaliczenie, Studia, AiR, SEMESTR II, TSiIW
Pytania01 AiR 2013, Mechanika i Budowa Maszyn sem II, automatyka
2014 2015 Napędy i sterowania HiP AiR sII sem 1
spis lab I sem 2010
Zastosowanie SEM
Mała chirurgia II Sem IV MOD
skórne niepożądane odczyny polekowe, 2 czesci 9 sem
Sem 1

więcej podobnych podstron