CWICZENIA_08.
Transkrypt
CWICZENIA_08.
Doświadczalne metody fizyki biologicznej, medycznej i środowiska naturalnego (1101-4FD14) 23 listopada 2011r. dr Monika Wilde-Piórko ĆWICZENIE 8 Analiza hodografów fal sejsmicznych 1. Uruchom skrypt firstfilt.m. Obejrzyj sygnał (impuls) oraz odpowiedź impulsową (sygnał po przefiltrowaniu) i funkcję przenoszenia dolnoprzepustowego filtru Butterwortha o rzędzie 10. Jaka jest częstość odcięta zastosowanego filtru? Komentarz: odpowiedź impulsowa w pełni charakteryzuje filtr. 2. Uruchom skrypt butterfilt.m, który pokazuje filtrowanie losowo wygenerowanego sygnału przy pomocy środkowo-przepustowego filtru Butterwortha o rzędzie 10. Jakie są częstości odcięta filtru? Zobacz co się dzieje z fazą przefiltrowanego sygnału, gdy używamy dwóch różnych metod filtrowania filter i filtfilt (należy odkomentować linię nr 19 i zakomentować linię nr 18 w skrypcie butterfilt.m). Czym różnią się te dwie metody filtrowania? 3. Załaduj do obszaru roboczego MATLAB'a pliki seis_096.mat, time_096.mat, dist_096.mat. Plik seis_096.mat zawiera w poszczególnych kolumnach pionowe składowe prędkości przemieszczeń gruntu zarejestrowane przez stacje sejsmiczne - sejsmogramy trzęsienia ziemi z środkowych Włoch o magnitudzie Mw=6.3, które wystąpiło w dnia 4 czerwca 2009 roku o godzinie 01:32:42.4 (UTC), o współrzędnych geograficznych epicentrum: 42.42N, 13.39E i głębokości ogniska 10.00 km. Plik time_096.mat zawiera w poszczególnych kolumnach czas w sekundach zarejestrowany przez stacje sejsmiczne, mierzony od czasu wystąpienie trzęsienia ziemi. Plik dist_096.mat zawiera odległości poszczególnych stacji sejsmicznych od epicentrum trzęsienia ziemi. Obejrzyj sejsmogramy przy pomocy funkcji plotsection.m (aby zobaczyć jakie są parametry wejściowe funkcji plotsection.m wykonaj w MATLAB'ie komendę > help plotsection.m). Wyrysuj sekcje sejsmiczne dla amplitud rzeczywistych i znormalizowanych oraz bez prędkości redukcji i z prędkością redukcji 6 km/s, 8 km/s i 12 km/s. 4. Usuń średnią sygnału przy pomocy funkcji detrend. Jak jest częstość próbkowania sejsmogramów? Obejrzyj ponownie sekcję sejsmiczną. Przefiltruj sejsmogramy przy pomocy funkcji filter dolnoprzepustowym filtrem Butterworth'a o rzędzie 10 i częstości narożnej 1 Hz (najpierw należy policzyć współczynniki filtru przy pomocy funkcji butter). Obejrzy i porównaj poszczególne rejestracje. Czy widzisz różnicę w zapisach przefiltrowanych i nieprzefiltrowanych? Przefiltruj sejsmogramy funkcją filtfilt. Czy widzisz różnicę w działaniu tej funkcji i funkcji filter? 5. Przy pomocy funkcji ginput wyznacz czasy pierwszych wstąpień fal sejsmicznych, które jesteś w stanie zobaczyć na poszczególnych sejsmogramach. Narysuj hodograf zaobserwowanych fal sejsmicznych – wykres czasów przejść fal sejsmicznych w funkcji odległości stacji od epicentrum trzęsienia ziemi. 6. Porównaj otrzymany hodograf z hodografem teoretycznym (pliki niezredukowane: Pg_10.0.txt, Pn_10.0.txt, P_10.0.txt, PKP_10.0.txt, Sg_10.0.txt, Sn_10.0.txt, S_10.0.txt, SKS_10.0.txt) policzonym dla jednowymiarowego modelu Ziemi iasp91. Oznacz poszczególne fale na swoim hodografie. %This script is an example of Butterword digital filter close all N = 128; x = [1 zeros(1,N-1)]; %impulse generation figure plot(x) title('Impulse signal') figure [b,a] = butter(10,.5); y = filter(b,a,x); %y = filtfilt(b,a,x); %tenth order lowpass filter with cutoff frequency 0.5 %time domain filter implementation plot(y) title('Impulse response') %--------------------Frequency response--------------------figure [h,w] = freqz(b,a,N); m = abs(h); p = angle(h); p = unwrap(p); subplot(2,1,1); semilogy(w/pi,m) xlabel('Normalized frequency') title('Filter magnitude') subplot(2,1,2) plot(w/pi,p) xlabel('Normalized frequency') ylabel('rad') title('Filter phase') ------------------------------------------------------------------------------------------------------%This script is an example of the application of bandpass Butterworth digital filter %to a random sequence. close all N = 256; x = randn(1,N); %random sequence generation figure plot(x) title('Signal before filtering') [b,a] = butter(10, [0.3 0.6]); [h,w] = freqz(b,a,100); m = abs(h); p = angle(h); p = unwrap(p); y = filter(b,a,x); %y = filtfilt(b,a,x); figure plot(y,'r') title('Signal after filtering') figure subplot(2,1,1); semilogy(w/pi,m) title('Magnitude') subplot(2,1,2) plot(w/pi,p) title('Phase') transfx = fft(x); transfy = fft(y); figure subplot(2,1,1) freq = 0:2/N:1; plot(freq, abs(transfx(1:length(freq)))); hold on plot(freq,abs(transfy(1:length(freq))),'r'); title('Spectrum of the signal') xlabel('Normalized frequency') ------------------------------------------------------------------------------------------------------%% funkcja rysujaca sekcje sejsmiczna % seis - tablica sejsmogramow, w kazdej kolumnie pojedyncza rejestracja; % time - tablica czasow rejestracji, w kazdej kolumnie pojedyncza % rejestracja; % dist - wektor odleglosci dla poszegolnych rejestracji; % amp - normalizacja amplitudy, % amp=0 - rzeczywiste amplitudy, % amp=1 - amplitudy znormalizowane (kazdy z zapisow znomalizowany wzgledem swojej maksymalnej amplitudy); % vred - predkosc redukcji w km/s (przesuniecie skali czasu: T = t - dist/vred); % % wywyłanie funkcji: plotsection(seis,time,dist,amp,vred) % np. matlab> plotsection(seis_096,time_096,dist_096,0,0) % function plotsection(seis,time,dist,amp,vred) figure('Visible', 'Off'); for a = 1 :length(dist) if (amp==0) mt=max(max(seis)); else mt=max(seis(:,a)); end if (vred==0) plot(seis(:,a)/mt+dist(a),time(:,a),'k'); xlabel('Odleglosc w stopniach'); ylabel('Czas od zrodla [s]'); else plot(seis(:,a)/mt+dist(a),time(:,a)-(dist(a)*111.2/vred),'k'); xlabel('Odleglosc w stopniach'); ylabel('Czas zredukowany od zrodla [s]'); end hold on; end set(gcf,'Visible','On');