background image

Wszelkie prawa do zada

ń

, plików  i instrukcji s

ą

 zastrze

ż

one, nikt poza prowadz

ą

cymi zaj

ę

cia i studentami IA na AGH 

nie ma prawa ich wykorzystywa

ć

.  A tych co maj

ą

 takie prawa, prosz

ę

, aby nie umieszczali ich w innym miejscu w sieci.  

cz

ęść

 I – analiza oraz przetwarzanie pliku 

d

ź

wi

ę

kowego 

przypomnienie:  

Typowe częstotliwości próbkowania sygnałów audio: 8000, 11025, 22050 i 44100 Hz 

Częstotliwość próbkowania 
– 8000Hz – można zakodować sygnał do 3,5kHz 
– 11025 – można zakodować sygnał do 5,0kHz 
– 22050 – można zakodować sygnał do 10kHz 
– 44100 – można zakodować sygnał do 20kHz 
– 192000 – można zakodować sygnał do 90kHz 
rozdzielczość bitowa 
– 8 bitów - czyli 2

8

 możliwych wartości – 256 

– 16 bitów - czyli 2

16

 możliwych wartości – 65536 

– 24 bity - czyli 2

24 

możliwych wartości – 16777216 

 

Zad 1. Sygnał o 1 składowej o częstości 50  Hz generujemy w następujący sposób. 

fs= ….. 

t = (0:1/fs:2)'; 

A=1; 

y = A*sin(2*pi*50*t) ;  

Proszę  

a) wygenerować ten dźwięk dla 2 różnych fs 

b) zagrać dźwięk (

wavplay dla różnych fs niekoniecznie tych samych dla których został 

wygenerowany

)  

c) narysować  za pomocą

 wykresu 

stem

 

 d) oraz zapisać (

wavwrite(y,fs,filename

) go jako plik wav. 

 

Proszę wygenerować sinus o częstości i amplitudzie, którą jeszcze może odtworzyć komputer  

i człowiek ją może usłyszeć. Proszę ten sinus zapisać. 

cz

ęść

 I A FFT

 

Transformata Fouriera jest wykorzystywana w wielu dziedzinach nauki. Istnieje teoria, że każdą 

funkcję można aproksymować sinusami. Dlatego badaną funkcję traktujemy jak złożenie sinusów o 

różnej częstotliwości. W Matlab’ie jest gotowa funkcja fft wyliczająca transformatę. 

 

background image

Zad 2. 

Proszę wygenerować dwa przebiegi czasowe y1 i y2. 

1.

 

y1 = sin(2*pi*50*t) + 2*sin(2*pi*120*t);  

%sygnał o 2 składowych o częstościach 50 i 120 Hz 

2.

 

y2 ma być szumem - wektorem o wartościach losowych  -1 do 1 ( nie od 0 do 1!) 

Proszę zagrać powyższe dźwięki  

Wykorzystując poniższy kod: 

... (generowanie przebiegów) 
 
Nsamps=length(y1);

 

y_fft = abs(fft(y1)); 

 

y_fft = y_fft(1:Nsamps/2); 
y_fft=y_fft/(Nsamps/2); 

 

f = fs*(0:Nsamps/2-1)/Nsamps;   

 

figure(1) 

 

plot(f, y_fft)

 

xlim([0 1000])

 

xlabel(

'Cz

ę

stotliwo

ść

 (Hz)'

)

 

ylabel(

'Amplituda'

)

 

title(

'FFT'

)

 

  

Proszę sprawdzić jak wygląda fft dla obu sygnałów osobno oraz dla sumy tych sygnałów.  Proszę 

zapisać wynik swojej pracy. 

Do takiego sygnału (funkcji) może podczas przekazu dołączyć się podstępnie „szum”, czyli jakieś 

zaburzenie. Ważne, aby przy odbiorze sygnału umieć go oczyścić. Tu właśnie wykorzystuje się FFT.  

Zjawisko to powinno być widoczne na Państwa wykresach. 

Proszę wzmocnić szum ( mnożymy amplitudę przez większą wartość)  i jeszcze raz sprawdzić wynik 

działania programu liczącego fft. 

cz

ęść

 I C 

 

specgram  i spectrogram 

 

Zadaniem funkcji 

specgram

 jest przeprowadzenie analizy częstotliwościowej sygnału zmiennego  

w czasie. Wynikiem działania funkcji jest obraz, na którego osi poziomej mamy informacje o czasie, 

 a na osi pionowej informacje o częstotliwościach. 

SPECGRAM (A, NFFT, Fs) 

okre

ś

la liczb

ę

 punktów FFT stosowanych do obliczania 

transformat Fouriera dyskretnych. NFFT w przykładach podawana jest  długo

ść

 A.  

FS cz

ę

stotliwo

ść

 próbkowania, który nie wpływa na spektrogram ale słu

ż

y do działek 

skalowania. Je

ś

li Fs = [], lub nie jest okre

ś

lona domy

ś

lna jest 2 Hz. 

 

Zad 3. Proszę dla przebiegów z zadania 2 wykonać  

SPECGRAM. Prosz

ę

  dla osi Y ustali

ć

 

warto

ś

ci 0-200.  

 
 

background image

W  funkcji 

SPECGRAM (A, NFFT, Fs) 

 mo

ż

na  wybiera

ć

 okna, za pomoc

ą

 których 

analizujemy przebieg.

 

 

specgram(y,NFFT,fs,WINDOW,NOVERLAP)

 

 

NFFT=length(y);

 

WINDOW=hanning(NFFT);

 

NOVERLAP=31;

 

specgram(y,NFFT,fs,WINDOW,NOVERLAP)

 

 

 

Zad 4.  

WINDOW=hanning(NFFT) nie jest jedynym rozwi

ą

zaniem jakie proponuje Matlab. 

 

Proszę znaleźć w pomocy  programu Matlab inne dwa okna. 

I  na jednym wykresie wykorzystując  dwa znalezione powyżej okna  narysować trzy różne 

(wykorzystamy też okno 

Hanning)

wykresy

 SPECGRAM

 ze zeskalowaną osią y (1-200)  utworzone

 

dla przebiegu y=5*sin(150*t).

 

 

 

 

O funkcji

 spectrogram  

można  przeczytać na stronie : 

http://www.matlab.pl/viewtopic.php?t=4963

 

[S,F,T] = [S,F,T]=spectrogram(x,window,noverlap,F,fs)  

x- wektor, dla którego liczymy widmo 

 

window - rodzaj zastosowanego okienka (prostok

ą

tne, Hamminga, itd) – w przykładach stosuj

ą

 

liczb

ę

 256. 

 

noverlap jest liczba nakładaj

ą

cych si

ę

 segmentów 

 

F wektor cz

ę

stotliwo

ś

ci w Hz. 

 Zad 4.  Poniższy przykład ilustruje jak można zaprezentować  spectogram w grafice 2D i 3D. 

t = (0:0.001:2)';

 

A=1;

 

y =sin(2*pi*50*t) + 2*sin(2*pi*120*t);  

 

[S,F,T,P] = spectrogram(y,256,250,256,1000);

 

figure(1)

 

surf(T,F,10*log10(P),

'edgecolor'

,

'none'

); axis 

tight

;

 

figure(2)

 

spectrogram(y,256,250,256,1000); 

 

Proszę sprawdzić jak będzie wyglądać spectogram gdy dołożymy do tego szum. 

Proszę zapisać  wykresy spectogram z szumem i bez szumu jako pliki jpg poprzez file – save as…. 

background image

 

Cz

ęść

 II Analiza obrazu 

 

Czytaj obraz:

 [x, map] = imread (plik, fmt); 

dostępne formaty zapisu obrazu: 
bmp, jpg,  tiff, pcx,  png, xwd, ico, cur, hdf,  pgm, ppm, pbm, ras 
 

Zad 5.  Proszę napisać skrypt, który otwiera okno Windows i czyta do pamięci rysunek. Proszę 
wyświetlić informację o rozmiarze macierzy x i o mapie. Proszę dopisać wyświetlanie przeczytanego 
obrazu w dwóch różnych oknach korzystając z obu  poniższych funkcji: 

 
Wyświetl obraz: imshow(x
map)
image (x); 
 

Proszę zamienić tablicę x(n,m,3) na wektor  i narysować dla wartości znajdujących się w wektorze 
histogram. Dodatkowo proszę wyświetlić obraz jako powierzchnię 3D.  
Zarówno histogram jak i powierzchnię proszę zapisać korzystając z poniższych poleceń: 
 

 

 
zapisz obraz: imwrite(A,filename); 
W wywołaniu funkcji mogą  się znaleźć  parametry odpowiedzialnych za palety barw, ilość kolorów, 
przezroczystość, kompresje itp. 
imwrite(A,map,filename,fmt) 
imwrite(X,map,'your_hdf_file.hdf','Compression','none',... 'WriteMode','append')  
 
 

Zad 6.   – cd zadania 4. Proszę napisać skrypt, który zapisuje utworzony spectogram jako obraz.  

 
 

 

cz

ęść

 III Generowanie przebiegów czasowych 

Zad 5.  Proszę wygenerować wszystkie poniższe przebiegi jako 3 sekundowe dźwięki, odsłuchać  je, 

narysować przebieg, i dla połowy z nich zrobić fft i spectrogram/

 SPECGRAM. 

 

• 

sawtooth przebieg trójk

ą

tny (periodyczny) 

n=input ('Podaj długo

ść

 N= ');

 

t=0:.0001:n;

 

y=sawtooth(t,.5);

 

plot(t,y);

 

ylabel ('Amplituda');

 

xlabel ('czas ');

 

TITLE ('Przebieg trójk

ą

tny);

 

background image

• 

square przebieg prostok

ą

tny (periodyczny) – 

• 

gauspuls przebieg sinusoidalny modyfikowany Gaussem (nieperiodyczny) 

• 

chirp przebieg cosinusoidalny o zmiennym okresie 

• 

tripuls 

• 

rectpuls 

• 

pulstran  

 

 

cz

ęść

 III Sygnał mowy. 

Zad 5.  Proszę nagrać parę liter  i kilka słów takich  jak mama, tata itp. Proszę zastosować i do całej 
frazy i do pojedynczej litery poznane metody analizy dźwięku. 

 
cz

ęść

 IV  

Nagrywanie i zapisywanie – zadanie domowe.  
Funkcja ta mo

ż

e by

ć

  wywoływane z kilkoma parametrami: 

wavrecord(liczba próbek, cz

ę

sto

ść

 próbkowania, próbkowanie); 

y= wavrecord(n,Fs) 
y = wavrecord(...,ch) 
y = wavrecord(...,'dtype') 
Fs = 11025; 
y = wavrecord(5*Fs,Fs,'int16'); 
 % Nagranie 5 sekund z cz

ę

sto

ś

ci

ą

  11025 Hz i próbkowaniem 16 bitów 

 

wavwrite(zmienna z danymi, cz

ę

sto

ść

  próbkowania, ‘nazwa pliku’) 

Przykład: 
>> wavwrite(y,11025,’muzyka.wav’);