background image

 

 

 

 

 

SPRAWOZDANIE Z ĆWICZENIA 

LABORATORYJNEGO NR 3 

 

 

 

 

 

 

 

Wykonał: Wojciech Węgrecki 

Grupa: I9G2S1

background image

Treść 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. 
3.2  
Powyższe czynności wykonaj usuwając z widma elementy <0,fc>v<fs-
fc,fs> (filtr górnoprzepustowy). Porównaj wyniki obydwu operacji. 
3.3  
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.  
3.4  
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ść f

c

(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  

 

background image

3.1 

 

W tym zadaniu należało stworzyć filtr dolnoprzepustowy, tzn. wyzerować 
harmoniczne odpowiadające przedziałowi <f

c

,f

s

-f

c

>. 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

 

background image

 

 

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,f

c

>

∪<f

s

-f

c

,f

s

> 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 

background image

 
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 

 

 

 

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. 

 

background image

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

;

 

background image

hold 

on

;

 

plot(czas2,ifft(widmo_zw),

'r'

);

 

title(

'sygnał oryginalny(kolor niebieski), sygnał po 

zwiekszeniu(kolor czerwony)'

);

 

 
 

 

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). 
 

background image

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)'

); 

 

background image

 

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

 
 
 

background image

 

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

 
 

background image

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.