SPRAWOZDANIE Z ĆWICZENIA LABORATORYJNEGO NR 3, WAT, SEMESTR V, Cfrowe przetwarzanie sygnałów, Cps, od borysa, cwiczenie3, cwiczenie3


SPRAWOZDANIE Z ĆWICZENIA LABORATORYJNEGO NR 3

Wykonał: Wojciech Węgrecki

Grupa: I9G2S1Treść zadania:

3.1

Wykonaj operację na widmie sygnału dźwiękowego polegającą na usunięciu (wyzerowaniu) z niego harmonicznych odpowiadających przedziałowi częstotliwości <fc,fs-fc> (filtr dolnoprzepustowy). Następnie wykonaj transformatę odwrotną, odsłuchaj dźwięk, porównaj z oryginałem również wyświetlając przebieg czasowy oryginału i sygnału przetworzonego.

Powyższe czynności wykonaj usuwając z widma elementy <0,fc>v<fs-fc,fs> (filtr górnoprzepustowy). Porównaj wyniki obydwu operacji.

Korzystając z DFT zwiększ częstotliwość próbkowania sygnału. W tym celu dokonaj odsunięcia drugiej połowy widma tak, aby ostatni prążek znalazł się na pozycji nowej częstotliwości próbkowania. Powstałą lukę wypełnij zerami. Wykonaj transformatę odwrotną. Zweryfikuj otrzymane wyniki (np. poprzez wyświetlenie sygnałów sprzed i po operacji różnymi kolorami symboli na jednym wykresie.

Korzystając z DFT zmniejsz częstotliwość próbkowania sygnału postępując analogicznie jak wyżej.

Wykonanie zadania:

Aby przejść do wykonywania zasadniczej treści zadania w MATLABie należało najpierw wczytać dźwięk, później wykonać dyskretną transformatę Fouriera (DFT) a następnie zdefiniować wartości, które podczas rysowania wykresów będą służyły jako oś x - czas i częstotliwość oraz przyjąć wartość fc(w moim przypadku 5000 Hz). Dodatkowo wyznaczyłem długość dźwięku za pomocą funkcji length. Wszystkie te operacje zostały wykonane za pomocą następującego kodu:

[dzwiek,fs,nbit]=wavread('dzwiek.wav'); %wczytanie dźwięku

dzwiek=dzwiek(:,1);

widmo=fft(dzwiek); %transformata fouriera dzwieku

L=length(dzwiek); %dlugosc dzwieku

f=0:fs/L:(L-1)*fs/L; %częstotliwość dźwięku (wykorzystywana do skalowania osi x)

czas=0:1/fs:(L-1)/fs; %obliczenie czasu trwania sygnalu (wykorzystywany do skalowania osi x)

fc=5000; % ustalona wartosc po ktorej zerujemy

3.1

W tym zadaniu należało stworzyć filtr dolnoprzepustowy, tzn. wyzerować harmoniczne odpowiadające przedziałowi <fc,fs-fc>. Następnie należało wykonać transformatę odwrotną, odsłuchać dźwięk i porównać z oryginałem wyświetlając przebieg czasowy oryginału i sygnału przetworzonego. Dodatkowo wyświetliłem widmo sygnału przed i po przefiltrowaniu (rys. 1).

Wszystko to osiągnąłem za pomocą kodu:

%filtr dolnoprzepustowy

widmo_dolno=widmo; % zmienna pomocnicza

for i=fc:1:(length(widmo_dolno)-fc)

widmo_dolno(i)=0; % wyzerowanie wartosci

end;

potrans=ifft(widmo_dolno); %wykonanie transformaty odwrotnej

wavplay(real(potrans),fs); %odtworzenie dźwięku

figure(2) %rysowanie czterech wykresów

subplot(4,1,1) ;

plot(czas,dzwiek);

grid on

title('Oryginalny sygnał');

subplot(4,1,2);

plot(czas,potrans)

title('Sygnał po przefiltrowaniu')

grid on

subplot(4,1,3)

stem(f, abs(widmo))

grid on

title('Widmo oryginał');

subplot(4,1,4);

stem(f,abs(widmo_dolno))

title('Filtr Dolnoprzepustowy');

grid on

wavwrite(real(potrans), 'filtr_dolny'); % zapisanie pliku po transformacie i filtrze dolnoprzepustowym

0x01 graphic

rys.1 Porównanie oryginalnego sygnału, sygnału po przepuszczeniu przez filtr dolnoprzepustowy, widma oryginalnego sygnału i widma po filtracji

3.2

W tym zadaniu należało stworzyć filtr górnoprzepustowy, tzn. wyzerować harmoniczne odpowiadające przedziałowi <0,fc>∪<fs-fc,fs> Następnie należało wykonać transformatę odwrotną, odsłuchać dźwięk i porównać z oryginałem wyświetlając przebieg czasowy oryginału i sygnału przetworzonego. Dodatkowo wyświetliłem widmo sygnału przed i po przefiltrowaniu (rys. 2).

Wszystko to osiągnąłem za pomocą kodu:

% filtr górnoprzepustowy

widmo_gorno=widmo; %zmienna pomocnicza

for i=1:1:fc % wyzerowanie wartosci od 0 do fc

widmo_gorno(i)=0;

end;

for i=length(widmo_gorno)-fc:1:length(widmo_gorno) % zerowanie wartosci od fs - fc do fs

widmo_gorno(i)=0;

end;

potrans2=ifft(widmo_gorno); %transformata odwrotna

wavplay(real(potrans2),fs); %odtworzenie dźwięku

figure(1) %wyswietlenie czterech wykresow

subplot(4,1,1) ;

plot(czas,dzwiek); %oryginalny sygnał

title('oryginalny sygnal');

grid on

subplot(4,1,2)

plot(czas,potrans2); % sygnał po przefiltrowaniu

grid on

title('Sygnał po przefiltrowaniu')

subplot(4,1,3) ;

stem(f,abs(widmo)); % widmo oryginal

grid on

title('Widmo oryginał');

subplot(4,1,4);

stem(f,abs(widmo_gorno))

title('Filtr Górnoprzepustowy'); %widmo po przefiltrowaniu

grid on

wavwrite(real(potrans2), 'filtr_gorny'); %zapisanie pliku po transformacie odwrotnej i filtrze górnoprzepustowym

0x01 graphic

rys.2 Porównanie oryginalnego sygnału, sygnału po przepuszczeniu przez filtr górnoprzepustowy, widma oryginalnego sygnału i widma po filtracji

Porównując dźwięki po obu filtracjach to dźwięk po filtracji górnoprzepustowej jest cichszy i mniej wyraźny. Można zrozumieć treść obu nagrań, ale jakość tego nie jest najlepsza. Dodatkowo sprawiają wrażenie jakby były w zwolnionym tempie. Głos w nagraniu po filtracji dolnoprzepustowej jest niższy i głośniejszy.

3.3

Zadanie polegało na tym, aby korzystając z DFT zwiększyć częstotliwość próbkowania sygnału. W tym celu należało dokonać odsunięcia drugiej połowy widma tak, aby ostatni prążek znalazł się na pozycji nowej częstotliwości próbkowania. Powstałą lukę wypełniłem zerami. Następnie wykonałem transformatę odwrotną i zweryfikowałem otrzymane wyniki poprzez wyświetlenie sygnałów sprzed i po operacji różnymi kolorami na jednym wykresie(rys. 3).

Kod tego zadania:

widmo=fft(s); %widmo oryginalnego sygnalu

widmo_zw=widmo; %widmo pomocnicze do wyciecia

L=length(widmo); % dlugosci widma oryginalnego

czas_u=L/fs; % czas utowru

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

%##################################################

% zwiększanie czestotliwosci

for i=1:1:floor(0.5*L) % przepisanie nowego widma do polowy

widmo_zw(i)=widmo(i);

end;

for i=floor(0.5*L):1:floor(L)% od polowy wypelnienei zerami

widmo_zw(i)=0;

end;

j=floor(L);

for i=floor(0.5*L):1:L % przepisanie reszty widma

widmo_zw(j)=widmo(i);

j=j+1;

end;

L2=length(widmo_zw); % dlugosc utworu po zwiekszeniu czestotliwosci

f2=floor(L2/czas_u); %obliczenie czestotliwosci utworu po zwiekszeniu

krok1=0:fs/L:(L-1)*fs/L; % krok rysowania pierwszego widma

krok2=0:f2/L2:(L2-1)*f2/L2; % krok rysowania drugiego widma

czas2=0:1/f2:(L2-1)/f2; % krok rysowania drugiego sygnału

czas_utworu2=L2*(1/f2); % czas utworu po zmianie częstotliwości

figure(2) % narysowanie oryginalnego sygnalu z nalozonym na nie sygnalem po zmianie czestotliwosci

plot(czas,s);

grid on;

hold on;

plot(czas2,ifft(widmo_zw),'r');

title('sygnał oryginalny(kolor niebieski), sygnał po zwiekszeniu(kolor czerwony)');

0x01 graphic

rys. 3 Sygnał przed i po operacji zwiększenia częstotliwości próbkowania. Sygnał oryginalny jest narysowany kolorem niebieskim, a po zmianie kolorem czerwonym

3.4

Zadanie polegało na tym, aby korzystając z DFT zmniejszyć częstotliwość próbkowania sygnału. W tym celu usunąłem co drugi prążek widma. Następnie wykonałem transformatę odwrotną i zweryfikowałem otrzymane wyniki poprzez wyświetlenie sygnałów sprzed i po operacji różnymi kolorami na jednym wykresie (rys. 4). Dodatkowo porównałem trzy widma sygnałów - widmo oryginalne, widmo po zwiększeniu częstotliwości (zadanie 3.3) oraz widmo po zmniejszeniu częstotliwości (rys.5).

Kod skryptu realizujący w/w zadanie:

%##################################################

% zmniejszanie czestotliwosci

widmo_zm=0;

j=1;

for i=(1:2:L) %przepisanie co drugiej wartości

widmo_zm(j)=widmo(i);

j=j+1;

end;

L3=length(widmo_zm); % dlugosc utworu po zmniejszeniu czestotliwosci

f3=floor(L3/czas_u); %obliczenie czestotliwosci utworu po zmniejszeniu

krok3=0:f3/L3:(L3-1)*f3/L3; % krok rysowania trzeciego widma

czas3=0:1/f3:(L3-1)/f3; % krok rysowania trzeciego sygnału

figure(1)

subplot(3,1,1)

stem(krok1,abs(widmo)); % rysowanie widma oryginalnego

grid on

title('widmo oryginalne');

subplot(3,1,2)

stem(krok2,abs(widmo_zw)); % rysowanie widma po zwiększeniu

grid on

title('widmo po zwiekszeniu czestotliwosci');

subplot(3,1,3)

stem(krok3,abs(widmo_zm)); % rysowanie widma po zmniejszeniu

grid on

title('widmo po zmniejszeniu czestotliwosci');

figure(3) % narysowanie oryginalnego sygnalu z nalozonym na nie sygnalem po zmianie czestotliwosci

plot(czas,s);

grid on;

hold on;

plot(czas3,ifft(widmo_zm),'r');

title('sygnał oryginalny(kolor niebieski), sygnał po zmniejszeniu(kolor czerwony)');

0x01 graphic

rys. 4 Sygnał przed i po operacji zmniejszenia częstotliwości próbkowania. Sygnał oryginalny jest narysowany kolorem niebieskim, a po zmianie kolorem czerwonym

0x01 graphic

rys. 5 Porównanie trzech widm sygnałów - widma oryginalnego, widma po zwiększeniu częstotliwości i widma po zmniejszeniu częstotliwości

WNIOSKI

Do wykonania operacji usuwania harmonicznych, jako przedziału częstotliwości fc użyłem wartości 5000Hz. Po zamianie nowopowstałego widma na sygnał dźwiękowy okazało się, że w nowym nagraniu nie występują wysokie tony dźwięków co sprawia wrażenie obniżenia głosu i jego spowolnienia. Jednak mimo to dźwięk jesteśmy w stanie rozpoznać. Zniekształcenie zależy od częstotliwości fc. Im ona jest niższa tym dźwięk jest bardziej zniekształcony.

Usuniecie z widma zakresu niskich częstotliwości poskutkowało wyzerowaniu skrajnych części widma, co w odsłuchiwanym dźwięku przełożyło się na znaczne obniżenie jakości nagrania oraz na wyciszenie dźwięku. W tym wypadku także jesteśmy w stanie rozróżnić wypowiadane słowa, jednak im wyższa wartość fc tym staje się to coraz trudniejsze.

Porównując efekt działania obu filtrów, zdecydowanie można powiedzieć, że oba w znacznym stopniu modyfikują sygnał dźwiękowy. Oba filtry mają zupełnie przeciwne działanie i sprawdzanie ich działania na jednej wartości fc staje się niemożliwe. Gdy zmniejszamy wartość fc pogarsza się dźwięk po filtracji dolnoprzepustowej, jednak po filtracji górnoprzepustowej jest on w dosyć dobrej jakości, a gdy zwiększamy fc efekt jest przeciwny.

Wykonując kolejne zadanie, polegające na zwiększeniu częstotliwości próbkowania zauważyłem, że jakoś danego dźwięku poprawiła się. Dźwięk się wyostrzył i zmniejszyła się ilość zniekształceń i szumów. Efekt ten osiągnęliśmy dzięki zwiększonej ilości próbek.

Zmniejszając częstotliwość próbkowania osiągnęliśmy całkowicie przeciwny efekt do poprzedniego. Dźwięk jest w bardzo słabej jakości, niezrozumiałej dla ucha. Dzieje się tak, ponieważ usunęliśmy dużą ilość próbek.

Operując na widmie amplitudowym możemy w łatwy sposób poprawiać lub pogarszać jakość przetwarzanego dźwięku.



Wyszukiwarka