Podstawy Informatyki 1 Laboratorium 9 1. Cel ćwiczenia Celem ćwiczenia jest zapoznanie się z przetwarzaniem sygnałów w MATLAB 2. Program ćwiczenia Przykład 1 Wprowadź fo = 4; %frequency of the sine wave in Hz Fs = 100; %sampling rate in Hz Ts = 1/Fs; %sampling time interval t = 0:Ts:1-Ts; %time vector n = length(t); %number of samples, 100 y = 2*sin(2*pi*fo*t); %the sine curve %plot the sine curve in the time domain sineplot = figure; plot(t,y) xlabel('time (seconds)', 'FontWeight','Bold') ylabel('y(t)', 'FontWeight','Bold') title('sample Sine Wave', 'FontWeight','Bold') set(sineplot,'position',[100,100,500,300]) set(sineplot,'color',[0.97 0.97 0.97]) grid Kolejno wprowadź
Podstawy Informatyki 2 positivefreq = figure; freqrange = 0:1:Fs/2; % create a frequency range over the positive frequencies freqzdata = freqz(y,1,freqrange,fs)/length(y); %get the fourier data stem(freqrange,abs(freqzdata)) xlabel('freq (Hz)', 'FontWeight','Bold') ylabel('amplitude', 'FontWeight','Bold') title('positive Frequencies', 'FontWeight','Bold') set(positivefreq,'position',[100,100,500,300]) set(positivefreq,'color',[0.97 0.97 0.97]) ylim([0 2]); grid Przeanalizować kod programu Manual do funkcji freqz http://www.mathworks.com/access/helpdesk/help/toolbox/signal/freqz.html Manual do funkcji stem http://www.mathworks.com/access/helpdesk/help/techdoc/ref/stem.html Kolejno wprowadź freqrange = -200:1:200; %create a frequency vector from -200 to 200 freqzdata = freqz(y,1,freqrange,fs)/length(y); %get the fourier data freqzlimit = figure; stem(freqrange,abs(freqzdata)) xlabel('freq (Hz)', 'FontWeight','Bold') ylabel('amplitude', 'FontWeight','Bold') title('using the freqz command', 'FontWeight','Bold') set(freqzlimit,'position',[100,100,500,300])
Podstawy Informatyki 3 set(freqzlimit,'color',[0.97 0.97 0.97]) ylim([0 2]); grid Przeanalizować kod programu, dlaczego jest tyle harmonicznych? 2. Zaimportuj do Matlaba plik b1.wav (częstotliwość próbkowania 16000 Hz) File Import Data (Import Wizard Finish). Kolejno wpisz: length(data) x=1:1:39986; x=x/16000; plot(x,data,'markersize',4) xlabel('czas [s]','fontname','arial Unicode MS','FontSize',14) ylabel('amplituda fali dżwięku','fontname','arial Unicode MS','FontSize',14) grid on Wprowadź >>clear >>clc 3. W środowisku Windows uruchom aplikację "Matlab", w linii poleceń Matlaba wpisz: wavemenu i naciśnij <Enter> w kolejnym menu wybierz Wavelet 1D. 4. Wczytaj plik: [File] [Load Signal] b1.wav Wykonaj analizę falkową wybierając: Wavelet db7, Level 5 (5 poziomów dekompozycji), a następnie naciskając przycisk Analyze Display Mode Full Decomposition. Zapoznaj się również z różnymi rodzajami falek Wavelet Display np. haar Refinement=10 Display. Wykonać analizę wybierając różne falki.
Podstawy Informatyki 4 Wykres przedstawiający amplitudę fali dźwięku od czasu dla próbki b1.wav Zadania Zad1 Zaimportuj do Matlaba plik b2.wav, d1.wav, d2.wav File Import Data (Import Wizard Finish), potem wprowadź ten odpowiedni kod. Zaobserwuj różnice. W kodzie należy uwzględnić liczbę wszystkich próbek. Narysować wykres amplitudy fali dźwięku od czasu dla każdej z próbek. Zad2 Narysuj wykres amplitudy fali dźwięku od częstotliwości dla próbek b1.wav, b2.wav, d1.wav, d2.wav. Zad3 Dla próbki dźwięku b1.wav wyświetlić harmoniczne częstotliwości w przedziale od 100 Hz do 110 Hz. Wskazać, harmoniczną częstotliwości o największej amplitudzie w przedziale od 100 Hz do 110 Hz. Zad4 Dla próbki dźwięku b1.wav wyświetlić harmoniczną częstotliwości w całym badanym przedziale. Program ma działać automatycznie. Zastosować funkcję max() i find(). Po napisaniu programu przeprowadzić badania dla próbek b2.wav, d1.wav, d2.wav. Zad5 Przeprowadzić analizę falkową (Full Decomposition) dla próbek b2.wav, d1.wav, d2.wav z użyciem falek haar, db, sym, coif, mexh
Podstawy Informatyki 5 Zad6 Filtr Butterwortha charakteryzuje się maksymalnie płaską amplitudową charakterystyką częstotliwościową dla pulsacji 0 i nieskończoność. W paśmie przejściowym wykazuje w porównaniu z innymi filtrami tego samego rzędu najmniejszy spadek amplitudy. Zaprojektować filtr cyfrowy typu Butterwortha i narysować ich charakterystykę. Zastosować filtr analogowy podany poniżej i funkcje freqz() oraz a) butter(), b) bilinear(), c) impinvar(). Wskazówka Filtr analogowy typu Butterwortha rzędu N o pulsacji granicznej 1 (czyli znormalizowanego) wygląda następująco: N=2; [za,pa,ka]=buttap(n); [ba,aa]=zp2tf(za,pa,ka); Fg=1/(2*pi); % przeliczenie znormalizowanej pulsacji granicznej z % radianow/sekundę na częstotliwość w Hz; Fmax=2*Fg; % zakładamy, że maksymalna częstotliwość %(częstotliwość Nyquista) wynosi 2 razy Fg; Fs=2*Fmax; % przyjmujemy częstotliwość próbkowania (w Hz) % równą podwojonej częstotliwości Nyquista; Flog=logspace(-2,log10(Fmax),256); % wektor 256 wartości w Hz rozłożonych logarytmicznie na odcinku od 0.01 do Fmax; % wzorcowa charakterystyka filtru analogowego % (spróbkowana w punktach Flog) jest następująca: Ha=freqs(ba,aa,Flog*2*pi); % częstotliwości w Hz zostały przeliczone na pulsację w radianach/sekundę, gdyż tak % interpretuje wektor zmiennej niezależnej funkcja freqs; semilogx(flog,20*log10(abs(ha)));grid; Zad7 Zaprojektować pasmowoprzepustowy cyfrowy filtr eliptyczny o paśmie przepustowym w przedziale częstotliwości 100 Hz do 300 Hz, przy częstotliwości Nyquist'a równej 1000 Hz (częstotliwość próbkowania 2 000 Hz). Rząd filtru 5. Tętnienia w paśmie przepustowym nie powinny przekraczać 3 db, a tłumienie w paśmie zaporowym powinno wynosić co najmniej 70 db. Wskazówka Uzyć funkcji ellip(), logspace(), freqz(), semilogx()