WOJSKOWA AKADEMIA TECHNICZNA
Cyfrowe przetwarzanie sygnałów
Sprawozdanie z laboratorium nr 6
IMIĘ : Mateusz
NAZWISKO : Suchocki
GRUPA : I8G1S1
Treść zadania
a) dźwięk:
Wyznacz transformatę DCT sygnału dźwiękowego. Przedstaw w jednym oknie graficznym: przebieg czasowy sygnału dźwiękowego oraz transformatę.
Wykonaj operację na transformacie DCT sygnału dźwiękowego, polegającą na usunięciu z niej pewnej liczby współczynników od początku transformaty. Następnie wykonaj transformatę odwrotną, odsłuchaj dźwięk, porównaj z oryginałem. Powyższe czynności wykonaj usuwając z transformaty końcowe współczynniki.
Czynności z zadań powyższych dla transformaty Haara.
Funkcje: dct(), idct(), abs(), haar()*, ihaar()*.
b) obraz:
Wczytaj obraz z odcieniami szarości z pliku wyznacz jego transformatę Haara. Wyświetl obraz oraz transformatę w formie obrazu.
Wykonaj operację na transformacie Haara obrazu polegającą na usunięciu (wyzerowaniu) z niej elementów poprzez wymnożenie jej elementów przez elementy macierzy :
Następnie wykonaj transformatę odwrotną i wyświetl obraz. Porównaj z oryginałem.
Powyższe czynności wykonaj dla macierzy:
Zadania powyższe powtórz dla transformaty DCT. Porównaj wyniki z wynikami uzyskanymi dla transformaty Fouriera.
Dla transformaty Haara i DCT dokonaj rekonstrukcji obrazu element po elemencie transformaty (wyświetlając sumę dotychczas odwróconych jej elementów).
Funkcje: dct2(), idct2(), haar2()*, ihaar2()*.
Rozwiązania poszczególnych podpunktów:
Dźwięk
Transformata DCT
Pierwszym etapem zadania było wczytanie ścieżki dźwiękowej z pliku ‘’.wav”. Do wczytania sygnału należało posłużyć się funkcja wavread(). Chcąc odsłuchać wczytaną ścieżkę dźwiękową należało posłużyć się funkcja sound().
[v,fs]=wavread('01c.wav'); %wczytanie ścieżki dźwiękowej
Kolejno wyznaczona została transformata dct oraz widmo amplitudowe transformaty:
transformata_dct=dct(v); %transformata dct
W_amplitudowe=abs(transformata_dct); %wyznaczenie widmaamplitudowego dct
Przed wyświetleniem wyników należało wyskalować osie:
dlugosc=length(v);
skal_T=0:1/fs:(dlugosc-1)/fs; %opis osi w sekundach
skal_F=0:(fs/length(transformata_dct)):(fs*length(transformata_dct)-1)/(length(transformata_dct)); %opis osi w Hz
Przedstawienie otrzymanych wyników na wykresach realizowane jest przy pomocny następujących linijek kodu:
figure(1);
subplot(3,2,1);
plot(skal_T,v);
title('przebieg czasowy sygnału');
subplot(3,2,2);
plot(skal_F,W_amplitudowe);
title('widmo amplitudowe transformaty dct');
Otrzymane wykresy:
Rys1. Przebieg czasowy sygnału i moduł transformaty dct
Kolejnym etapem było dokonanie filtracji górno i dolno przepustowej
Filtr górno przepustowy
Filtracja polegała na stworzeniu filtra zerującego n początkowych próbek z transformaty dct. Poniższy kod realizuje podane założenie poprzez stworzenie pomocniczego wektora i przemnożeniu go następnie przez wektor transformaty:
%filtr górnoprzepustowy
m=(3/10)*dlugosc; %wyznaczenie długości do wyzerowania
vektor_pomocniczy=ones(dlugosc,1); %wektor pomocniczy do wyznaczenia filtru HP
vektor_pomocniczy(1:m)=0; %wyzerowanie wektora w danym przedziale
transformata_dct1=transformata_dct.*vektor_pomocniczy; %przemnożenie wektora pomocniczego z dct
idct1=real(idct(transformata_dct1)); %odwrotna transformata dct
Przedstawienie otrzymanych wyników na wykresach realizowane jest przy pomocny następujących linijek kodu:
subplot(3,2,3);
plot(skal_T,idct1);
title('przebieg czasowy po filtracji górno przepustowej');
xlabel('T');
subplot(3,2,4);
plot(skal_F,abs(transformata_dct1));
title('widmo amplitudowe po filtracji górno przepustowej');
xlabel('Fs');
Otrzymane wyniki:
Rys2. Przebieg czasowy po filtracji górno przepustowej i moduł transformaty dct po filtracji
Filtr dolno przepustowy
Analogicznie jak w przypadku filtracji górno przepustowej różnica jest w tym ,że zerowane jest n próbek z końca transformaty.
%filtr dolnoprzepustowy
vektor_pomocniczy1=ones(dlugosc,1); %wektor pomocniczy do wyznaczenia filtru LP
vektor_pomocniczy1(m:dlugosc)=0; %wyzerowanie wektora w danym przedziale
transformata_dct2=transformata_dct.*vektor_pomocniczy1;%przemnożenie wektora pomocniczego z transformata dct
idct2=real(idct(transformata_dct2)); %odwrotna transformata dct
Przedstawienie otrzymanych wyników na wykresach realizowane jest przy pomocny następujących linijek kodu:
subplot(3,2,5);
plot(skal_T,idct2);
title('przebieg czasowy po filtracji dolno przepustowej');
xlabel('T');
subplot(3,2,6);
plot(skal_F,abs(transformata_dct2));
title('widmo amplitudowe po filtracji dolno przepustowej');
xlabel('Fs');
sound(idct1);
Otrzymane wyniki:
Rys3. Przebieg czasowy po filtracji dolno przepustowej i moduł transformaty dct po filtracji
Porównanie sygnału oryginalnego z sygnałami kolejno po filtracji górno przepustowej i filtracji dolno przepustowej
Rys4.
Jak widać na rys4 przebieg czasowy sygnału przed filtracja różni się od sygnałów po filtracji zarówno dolno i górno przepustowej. Odsłuchując te dźwięki można dostrzec różnice w porównaniu do ścieżki oryginalnej. Po filtracji górno przepustowej dźwięk jest obniżony również jak widać na wykresie sygnał jest stosunkowo słabszy czyli dźwięk jest cichszy . Po filtracji dolno przepustowej dźwięk również wydaje się być obniżony.
Transformata Haara
Ze względu na złożoność obliczeniową transformaty haara zmniejszyłem wektor wczytanego dźwięku o połowę co się wiąże również z koniecznością wyskalowania na nowo wykresów.
Wyznaczenie transformaty haara i widma amplitudowego:
figure(2);
dlugosc=length(v)*1/2;
vektor=v(1:dlugosc);
transformata_haar = haar(vektor);
Wyskalowanie wykresu:
skal_T = 0:1/fs:(length(vektor)-1)/fs;
skal_F = 0:fs/length(transformata_haar):fs*(length(transformata_haar)-1)/length(transformata_haar);
Przedstawienie otrzymanych wyników na wykresach realizowane jest przy pomocny następujących linijek kodu:
subplot(3,2,1);
plot(skal_T,vektor);
title('przebieg czasowy dzwięku');
subplot(3,2,2);
plot(skal_F,abs(transformata_haar));
title('widmo amplitudowe transformaty haar');
Otrzymane wyniki:
Rys5. Przebieg czasowy dźwięku i moduł transformaty haara
Filtracja górno przepustowa
Wyznaczenie pomocniczego wektora(filtra) a następnie pomnożenie transformaty haara przez uzyskany filtr:
%filtr górnoprzepustowy
dlugosc=length(transformata_haar);
m=(1/5)*dlugosc; %wyznaczenie długości do wyzerowania
vektor_pomocniczy2=ones(length(transformata_haar),1); %wektor pomocniczy do wyznaczenia filtru HP
vektor_pomocniczy2(1:m)=0; %wyzerowanie wektora w danym przedziale
disp(length(vektor_pomocniczy2));
disp(length(transformata_haar));
transformata_haar1=transformata_haar.*vektor_pomocniczy2; %przemnożenie wektora pomocniczego z dft
ihaar1=real(ihaar(transformata_haar)); %odwrotna transformata Haara
Kolejne skalowanie ze względu na wydłużenie sie sygnału po odwróceniu transformaty haara
skal_T=0:1/fs:(length(transformata_haar)-1)/fs;
Przedstawienie otrzymanych wyników na wykresach realizowane jest przy pomocny następujących linijek kodu:
subplot(3,2,3);
plot(skal_T,ihaar1);
title('przebieg czasowy po filtracji górno przepustowej');
subplot(3,2,4);
plot(skal_F,abs(transformata_haar1));
title('widmo amplitudowe po filtracji górno przepustowej');
Otrzymane wyniki:
Rys6.przebieg czasowy po filtracji górno przepustowej i moduł transformaty haara po filtracji
Filtracja dolno przepustowa
Wyznaczenie pomocniczego wektora(filtra) a następnie pomnożenie transformaty haara przez uzyskany filtr:
%filtr dolnoprzepustowy
vektor_pomocniczy3=ones(length(transformata_haar),1); %wektor pomocniczy do wyznaczenia filtru LP
vektor_pomocniczy3(m:dlugosc)=0; %wyzerowanie wektora w danym przedziale
transformata_haar2=transformata_haar.*vektor_pomocniczy3;%przemnożenie wektora pomocniczego z dct
%transformata_dct1 -nowa transformata po filtracji %LP
ihaar2=real(ihaar(transformata_haar2)); %odwrotna transformata haara
Przedstawienie otrzymanych wyników na wykresach realizowane jest przy pomocny następujących linijek kodu:
subplot(3,2,5);
plot(skal_T,ihaar2);
title('przebieg czasowy po filtracji dolno przepustowej');
subplot(3,2,6);
plot(skal_F,abs(transformata_haar2));
title('widmo amplitudowe po filtracji dolno przepustowej');
Otrzymane wyniki:
Rys7.przebieg czasowy po filtracji dolno przepustowej i moduł transformaty haara po filtracji
Porównanie sygnału oryginalnego z sygnałami kolejno po filtracji górno przepustowej i filtracji dolno przepustowej
Rys8.
Jak widać na rys8 przebieg czasowy sygnału przed filtracja różni się od sygnałów po filtracji zarówno dolno i górno przepustowej. Odsłuchując te dźwięki można dostrzec różnice w porównaniu do ścieżki oryginalnej. Sygnał po filtracji górno przepustowej wydaje się być zaszumiony natomiast po filtracji dolno przepustowej dźwięk jest zniekształcony.
Obraz
Transformata dct
Wczytanie obrazu wykonanie transformaty dct i jej modułu:
%wczytanie obrazu do zmiennych
[x,map]=imread('samochod.bmp');
transformata_dct=dct2(x);
modul=abs(transformata_dct)
Przedstawienie otrzymanych wyników realizowane jest przy pomocy następujących linijek kodu:
figure(1);
subplot(2,1,1);
imshow(x);
title('obraz samochod');
subplot(2,1,2);
imshow(uint8(modul));
title('widmo amplitudowe obrazu po transformacie dct');
Otrzymane obrazy:
Rys9.obraz samochod.bmp i moduł transformaty dct
Filtr górno przepustowy
Kod przedstawia realizację filtracji:
%filtr górno przepustowy
figure(2);
n=25; %wilekść wyzerowania macierzy transforamty
f_g_p=ones(size(transformata_dct));
f_g_p(1:n,1:n)=0;
obraz=uint8(idct2(transformata_dct.*f_g_p));
Przedstawienie otrzymanych wyników realizowane jest przy pomocy następujących linijek subplot(2,2,1);
imshow(obraz);
title('obraz po filtracji górno przepustowej');
subplot(2,2,2);
imshow(uint8(abs(transformata_dct.*f_g_p)));
title('widmo amplitudowe po filtrze gorno przepustowym');
Filtr górno przepustowy
Kod przedstawia realizację filtracji:
%filt dolno przepustowy
f_d_p=zeros(size(transformata_dct));
f_d_p(1:n,1:n)=1;
obraz=uint8(idct2(transformata_dct.*f_d_p));
Przedstawienie otrzymanych wyników realizowane jest przy pomocy następujących linijek subplot(2,2,3);
image(obraz);
title('obraz po filtracji dolno przepustowej');
subplot(2,2,4);
image(uint8(abs(transformata_dct.*f_d_p)));
title('widmo amplitudowe po filtracji dolno przepustowje');
Otrzymane obrazy:
Po filtracji górno przepustowej (obraz górny prawy róg) otrzymaliśmy krawędzie. Obraz krawędzi jest płynny nie widać odznaczających się pikseli. Natomiast po filtracji dolno przepustowej (obraz dolny prawy róg) obraz jest rozmazany. Widoczne są poszczególne piksele, wzrok szybko się męczy patrząc na taki obraz.
Transformata haara
Obliczanie transformaty haara i jej modułu oraz wyświetlenie uzyskanych wyników:
%trnasformata haar
transformata_haar=haar2(x);
modul=abs(transformata_haar);
figure(3);
subplot(2,1,1);
imshow(x);
title('obraz samochod');
transformata_haar=haar2(x);
subplot(2,1,2);
imshow(uint8(modul));
title('widmo amplitudowe obrazu po transformacie haar');
Otrzymane wyniki:
Filtr dolno przepustowy
Kod przedstawia realizację filtracji
n=100; %wilekość wyzerowania macierzy transformaty
%filtracja dolno przepustowa
figure(4);
f_d_p1=zeros(size(transformata_haar));
f_d_p1(1:n,1:n)=1;
obraz=uint8(ihaar2(transformata_haar.*f_d_p1));
colormap(map);
Przedstawienie otrzymanych wyników realizowane jest przy pomocy następujących linijek subplot(2,2,1);
imshow(obraz);
title('obraz po filtracji dolno przepustowej');
subplot(2,2,2);
imshow(uint8(abs(transformata_haar.*f_d_p1)));
title('widmo amplitudowe po transformacie haar');
Filtr górno przepustowy
Kod przedstawia realizację filtracji
n=100;
%filtracja górno przepustowa
f_g_p1=ones(size(transformata_haar));
f_g_p1(1:n,1:n)=0;
obraz=uint8(ihaar2(transformata_haar.*f_g_p1));
colormap(map);
Przedstawienie otrzymanych wyników realizowane jest przy pomocy następujących linijek subplot(2,2,3);
imshow(obraz);
title('obraz po filtracjo górno przepustowej');
subplot(2,2,4);
imshow(uint8(abs(transformata_haar.*f_g_p1)));
title('widmo amplitudowe po transformacie haar');
otrzymane wyniki:
Dla filtru dolno przepustowego wyraźnie widać piksele, obraz nie jest rozmyty widać „szczegóły” w postaci krawędzi pikseli dzięki temu nie męczy on tak wzroku jak w przypadku filtru dolno przepustowego dla transformaty dct. Dla filtru górno przepustowego otrzymaliśmy krawędzie, lecz w porównaniu z filtracja górno przepustowa dla transformaty dct obraz jest mniej „ciągły”.