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ę.
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.
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….
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);
•
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’);