Sprawozdanie

Cyfrowe Przetwarzanie sygnałów

Marek Pętlak

I6G1N1

Laboratorium 3

1.Opis zadania

● Wyznaczyć transformatę DFT z definicji oraz postaci macierzowej.

● Wyświetlić przebieg czasowy oraz widma sygnału dźwiękowego na wykresie;

● Wykonać zadaną operację typu filtracyjnego na widmie sygnału dźwiękowego;

● Zmienić częstotliwości próbkowania sygnału dźwiękowego z wykorzystaniem DFT

2.Rozwiązanie

Pierwszym etapem zadanie było wczytanie pliku którego przebieg miał zostać wyświetlony. Do tego celu posłużyło polecenie wavread. Do odsłuchania dźwięku służy polecenie sound

[u,fs]=wavread('Marek');

%sound(u,fs);

L=length(u);

czas= 0:1/fs:L/fs-1/fs;

subplot(7,1,1),plot(czas,u);

U=fft(u);

L1=0:fs/L:fs/L*(L-1);

subplot(7,1,2), plot(L1,abs(U));

Do zmiennej L przypisujemy długość pliku która zostanie wykorzystana do wyliczenia osi czasu. Jeśli chcemy wyświetlić nasz plik należy użyć polecenia plot lub subplot jeśli chcemy uzyskać kilka wykresów w jednym oknie. Do wyświetlenia widma niezbędna jest jeszcze jedna wartość która w tym przypadku (częstotliwość próbkowania) została zapisana do zmiennej L1.

Następnie należało przeprowadzić filtrację dźwięku za pomocą filtra górno - i dolnoprzepustowego.

fc=1100;

i = 1;

U1=U;

%górnoprzepustowy

U1(1:fc)=0+i*0;

U1(L-fc:L)=0+i*0;

%dolnoprzepustowy

U1(L/2-fc:L/2+fc)=0+i*0;

subplot(7,1,4),plot(L1, abs(U1));

u1 = real(ifft(U1));

subplot(7,1,3),plot(czas, u1);

sound(u1,fs);

Następnie należało zmienić częstotliwość próbkowania dźwięku

fs=fs/3;

L1=0:fs/L:fs/L*(L-1);

subplot(7,1,5),plot(L1,abs(U1));

fs=21000;

L1=0:fs/L:fs/L*(L-1);

subplot(7,1,6),plot(L1,abs(U1));

fs=44100;

L1=0:fs/L:fs/L*(L-1);

subplot(7,1,7),plot(L1,abs(U1));

sound(u1,fs);

Można tego dokonać poprzez ręczną zamianę parametry fs i ponowne wyliczenie osi częstotliwości.

3.Kod

clc;

[u,fs]=wavread('Marek');

%sound(u,fs);

L=length(u);

czas= 0:1/fs:L/fs-1/fs;

subplot(7,1,1),plot(czas,u);

U=fft(u);

L1=0:fs/L:fs/L*(L-1);

subplot(7,1,2), plot(L1,abs(U));

fc=1100; i = 1; U1=U;

U1(1:fc)=0+i*0;

U1(L-fc:L)=0+i*0;

U1(L/2-fc:L/2+fc)=0+i*0;

subplot(7,1,4),plot(L1, abs(U1));

u1 = real(ifft(U1));

subplot(7,1,3),plot(czas, u1);

fs=fs/3;

L1=0:fs/L:fs/L*(L-1);

subplot(7,1,5),plot(L1,abs(U1));

fs=21000;

L1=0:fs/L:fs/L*(L-1);

subplot(7,1,6),plot(L1,abs(U1));

fs=44100;

L1=0:fs/L:fs/L*(L-1);

subplot(7,1,7),plot(L1,abs(U1));

Laboratorium 4

1.Opis zadania

● Wyświetlić obraz oraz jego widma w postaci obrazu, wykonać operację odbicia widma(fftshift);

● Wykonać zadane operacje typu filtracyjnego na widmie obrazu, sprawdzić skutków tej operacji;

● Zmienić rozdzielczości obrazu z wykorzystaniem DFT .

2.Rozwiązanie

Pierwszy etap działania polegał na wczytaniu zdjęcia które miałoby zostać poddane filtracji. Do tego celu służy polecenie imread
imread.

Aby wyświetlić obraz ustalamy colormape z jaką ma być wyświetlony a następnie za pomoca polecenia image wyświetlamy wczytany obraz.

0x08 graphic

[x,map]=imread('Lisa','bmp')

figure(1);

colormap(map);

image(x);

X = fft2(double (x));

figure(2);

absX=abs(X);

absX(1,1)=0;

absX=(absX).^(1/4);

absX=256*absX/max(max(absX));

image(absX);

colormap(map);

Żeby wyświetlić widmo należy wywołać funkcję „fft2”.

W celu rozjaśnienia widma należy wykonać kilkakrotnie polecenie absX, którego efektem będzie rozjaśnienie pikseli.

Następną należało przeprowadzić filtrację w wyniku której w widmie obrazu pozostawały tylko narożników.

0x08 graphic

[w,k]=size(X);

A=zeros(w,k);

A(w-17:w,k-17:k)=1;

A(1:17,k-17:k)=1;

A(1:17,1:17)=1;

A(w-17:w,1:17)=1;

X=X.*A;

x1=ifft2(X);

figure(3)

colormap(map);

image(abs(x1));

Aby to osiągnąć pobieramy rozdzielczość wczytanego zdjęcia i tworzymy macierz o takich samych wymiarach i wypełniamy ją zerami. Następnie w narożnikach macierzy tworzymy kwadraty o wymiarze 17x17 i taką macierze wymnażamy przez widmo obrazu.

Wykorzystując odwrotną DFT odtwarzamy zdjęcie i wyświetlamy je.

Otrzymane w ten sposób zdjęcie jest nieostre ze względu na pozostawienie samych rogów widma.

Przeprowadzenie filtracji odwrotnej polegającej na usunięciu samych narożników spowodowałoby, że uzyskalibyśmy sam kontur obrazu.

3.Kod

clc;

[x,map]=imread('Lisa','bmp')

figure(1);

colormap(map);

image(x);

X = fft2(double (x));

figure(2);

absX=abs(X);

absX(1,1)=0;

absX=(absX).^(1/4);

absX=256*absX/max(max(absX));

image(absX);

colormap(map);

[w,k]=size(X);

A=zeros(w,k);

A(w-17:w,k-17:k)=1;

A(1:17,k-17:k)=1;

A(1:17,1:17)=1;

A(w-17:w,1:17)=1;

X=X.*A;

x1=ifft2(X);

figure(3)

colormap(map);

image(abs(x1));