cwiczenia8 fft

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’);


Wyszukiwarka

Podobne podstrony:
cwiczenia8 fft
cwiczenia8 fft
3 ćwiczenia BADANIE asfaltów
Ćwiczenie7
Cwiczenia 2
Ćwiczenia V
metody redukcji odpadów miejskich ćwiczenia
Ćwiczenia1 Elektroforeza
cwiczenia 9 kryzys
Ćwiczenia 1, cz 1
Ćwiczenie 8
9 ćwiczenie 2014
Cwiczenie 1
Ćwiczenie 2 Polska w europejskim systemie bezpieczeństwa

więcej podobnych podstron