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

Podobne dokumenty