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 28 możliwych wartości – 256
– 16 bitów - czyli 216 możliwych wartości – 65536
– 24 bity - czyli 224 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ę.
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’);