๋ธ๋ก๊ทธ ์์ฑ์์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
์๊ฐ
์ด ๋ฉ๋ชจ๋ ํ์๊ฐ ๋๋ ํ ์์ฑ๋์์ต๋๋ค.
์ฐ์ค ์ฃผ์ ๋ก ๋์ด๊ฐ๊ธฐ ์ ์, ํ์ฌ์ ์ข์ ์กฐ์ง์ ๋ํด ๋ง์๋๋ฆฌ๊ณ ์ถ์ต๋๋ค. ํ์์ ๋ฐฉ๋ฌธ ํ์ด์ง๋ ์นด์ ๋์ฑ๋น์ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋์ฑ๋น์ ์ํธํํ ๋ฅด๋ถ๋ฅดํฌ์ ์ฃผ์ ๋ช ์ ์ค ํ๋์ด๋ฉฐ ํ์๊ฐ ์ด๋ ธ๋ ํ์์ ๋งค์ฐ ๋ช ํํ๊ฒ ๋ณด์ ๋๋ค.
์ํธ ํํ
๋ฅด๋ถ๋ฅดํฌ ์ฃผ๋ฆฝ ๊ฒฝ์ ๋ํ ์
๊ตฌ์์ ์ฐธ๊ฐ์๋ค์ ํ์๋ค ์ค ์กฐ์๋ค๊ณผ ๋ง๋ฌ์ผ๋ฉฐ ๊ธธ์ ์์ง ์์์ต๋๋ค. ๋ฑ๋กํ๋ ๋์ ์์ ๊ธฐ๋
ํ์ด ์ ๊ณต๋์์ต๋๋ค(์ฅ๋๊ฐ-๋ฒ์ฉ์ด๋ ์คํ์ดํฌ, ํ, Wolfram ๊ธฐํธ๊ฐ ์๋ ์คํฐ์ปค). ์ ์ฌ ์์ฌ์ ํด์ ์๊ฐ๋ ํ์ ์ผ์ ์ ํฌํจ๋์์ต๋๋ค. ๋๋ ์ด๋ฏธ ๊ทธ๋ฃน ๋ฒฝ์ ๋ง์๋ ์ปคํผ์ ํ์ด์ ๋ํด ์ธ๊ธํ์ต๋๋ค. ์๋ฆฌ์ฌ๋ ํ๋ฅญํฉ๋๋ค. ์ด๋ฒ ์๊ฐ ๋ถ๋ถ์์๋ ํ์ฌ ์์ฒด์ ํ์, ์ฅ์๊ฐ ์ด๋ฏธ ๊ธ์ ์ ์ธ ๊ฐ์ ์ ๋ถ๋ฌ์ผ์ผํค๊ณ ์๋ค๋ ์ ์ ๊ฐ์กฐํ๊ณ ์ถ๋ค.
๋์ Kirill Belov๊ฐ ์์ฑํ ๋ณด๊ณ ์๋ "Wolfram Mathematica๋ฅผ ์ฌ์ฉํ์ฌ ์์ฉ ์ง๊ตฌ๋ฌผ๋ฆฌํ ๋ฌธ์ ํด๊ฒฐ"์ด๋ผ๋ ์ ๋ชฉ์
๋๋ค. ์ง์ง ๋ฐ์ดํฐ ๋๋ "๊ณ ๋ ๊ฐ์ด ํ๋ฅด๋ ๊ณณ"์ ๋ํ ์คํํธ๋ผ ๋ถ์. ๋ณด๊ณ ์์ ๋ด์ฉ์ ๋ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ฒซ์งธ, ๋ค์์์ ์ฌ์ฉํ ์ ์๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉ์
๋๋ค.
์ง์ง ํ์ฌ
๋จผ์ ์ง๊ตฌ๋ฌผ๋ฆฌํ์ ๋ํ ์งง์ ์ฌํ์ ํด์ผ ํฉ๋๋ค. ์ง๊ตฌ๋ฌผ๋ฆฌํ์ ์์์ ๋ฌผ๋ฆฌ์ ํน์ฑ์ ์ฐ๊ตฌํ๋ ๊ณผํ์ ๋๋ค. ๊ธ์์, ์์์ ์ ๊ธฐ์ , ์๊ธฐ์ , ํ์ฑ์ ํน์ฑ์ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ์ง๊ตฌ๋ฌผ๋ฆฌํ์๋ ๊ทธ์ ์์ํ๋ ์ ๊ธฐ ํ์ฌ, ์๊ธฐ ํ์ฌ, ์ง์ง ํ์ฌ ๋ฑ์ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์ด ๊ธฐ์ฌ์ ๋งฅ๋ฝ์์๋ ์ง์ง ํ์ฌ์ ๋ํด์๋ง ๋ ์์ธํ ๋ ผ์ํ๊ฒ ์ต๋๋ค. ์ง์ง ํ์ฌ๋ ์์ ์ ๊ฐ์ค๋ฅผ ์ฐพ๋ ์ฃผ์ ๋ฐฉ๋ฒ์ ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ํ์ฑ ์ง๋์ ์ฌ๊ธฐ์ ์ฐ๊ตฌ ์ง์ญ์ ๊ตฌ์ฑํ๋ ์์์ ๋ฐ์์ ๋ํ ํ์ ๊ธฐ๋ก์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ์ง๋์ ์ก์ง(๋ค์ด๋๋ง์ดํธ ๋๋ ๋นํญ๋ฐ์ฑ ํ์ฑ ์ง๋์ ์ฌ์ฉ) ๋๋ ๋ฐ๋ค(๊ณต๊ธฐ์ด ์ฌ์ฉ)์์ ๋ฐ์ํฉ๋๋ค. ํ์ฑ ์ง๋์ ์๋ฐ์ ํตํด ์ ํ๋๋ฉฐ, ์๋ก ๋ค๋ฅธ ํน์ฑ์ ๊ฐ๋ ์ธต์ ๊ฒฝ๊ณ์์ ๊ตด์ ๋ฐ ๋ฐ์ฌ๋ฉ๋๋ค. ๋ฐ์ฌ๋ ํ๋์ ํ๋ฉด์ผ๋ก ๋์์ ์ก์ง์ ์ง์คํฐ(๋ณดํต ์ฝ์ผ์ ๋งค๋ฌ๋ฆฐ ์์์ ์์ง์์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์ ๊ธฐ ์ญํ ์ฅ์น) ๋๋ ๋ฐ๋ค์ ์์ค์๊ธฐ(์์ ํจ๊ณผ ๊ธฐ๋ฐ)์ ์ํด ๊ธฐ๋ก๋ฉ๋๋ค. ํ๋๊ฐ ๋๋ฌํ ๋์ฏค์ด๋ฉด ์ง์ง์ธต์ ๊น์ด๋ฅผ ํ๋จํ ์ ์๋ค.
์ง์ง ์ ๋ฐ ๊ฒฌ์ธ ์ฅ๋น
์์ด๊ฑด์ ํ์ฑ ์ง๋์ ์๊ทนํฉ๋๋ค.
ํ๋๋ ์์ ๋ฉ์ด๋ฆฌ๋ฅผ ํต๊ณผํ๋ฉฐ ์์ค์ํ๋ก ๋
น์๋ฉ๋๋ค.
์ํธํํ
๋ฅด๋ถ๋ฅดํฌ ๋ธ๋ผ๊ณ ๋ฒ ์
ด์คํค ๋ค๋ฆฌ ๊ทผ์ฒ ๋ถ๋์ ์๋ ์ง๊ตฌ๋ฌผ๋ฆฌํ ์ฐ๊ตฌ ์ ๋ฐ "Ivan Gubkin"
์ง์ง ์ ํธ ๋ชจ๋ธ
์์์ ๋ค์ํ ๋ฌผ๋ฆฌ์ ํน์ฑ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ง์ง ํ์ฌ์์๋ ํ์ฑ ํน์ฑ, ์ฆ ํ์ฑ ์ง๋์ ์ ํ ์๋์ ๋ฐ๋๊ฐ ์ฃผ๋ก ์ค์ํฉ๋๋ค. ๋ ๋ ์ด์ด๊ฐ ๋์ผํ๊ฑฐ๋ ์ ์ฌํ ์์ฑ์ ๊ฐ๋ ๊ฒฝ์ฐ ํ๋์ ๋ ๋ ์ด์ด ์ฌ์ด์ ๊ฒฝ๊ณ๋ฅผ "์์ง ๋ชปํฉ๋๋ค". ์ธต์ ํ๋ ์๋๊ฐ ๋ค๋ฅด๋ฉด ์ธต์ ๊ฒฝ๊ณ์์ ๋ฐ์ฌ๊ฐ ๋ฐ์ํฉ๋๋ค. ์์ฑ์ ์ฐจ์ด๊ฐ ํด์๋ก ๋ฐ์ฌ๊ฐ ๋ ๊ฐํด์ง๋๋ค. ๊ฐ๋๋ ๋ฐ์ฌ ๊ณ์(rc)์ ์ํด ๊ฒฐ์ ๋ฉ๋๋ค.
์ฌ๊ธฐ์ ฯ๋ ์์ ๋ฐ๋, ฮฝ๋ ํ๋ ์๋, 1๊ณผ 2๋ ์์ธต๊ณผ ํ์ธต์ ๋ํ๋
๋๋ค.
๊ฐ์ฅ ๊ฐ๋จํ๊ณ ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉ๋๋ ์ง์ง ์ ํธ ๋ชจ๋ธ ์ค ํ๋๋ ๊ธฐ๋ก๋ ์ง์ง ์ถ์ ์ด ํ๋ก๋น ํ์ค์ ์ผ๋ จ์ ๋ฐ์ฌ ๊ณ์์ ์ปจ๋ณผ๋ฃจ์ ๊ฒฐ๊ณผ๋ก ํ์๋๋ ์ปจ๋ณผ๋ฃจ์ ๋ชจ๋ธ์ ๋๋ค.
์ด๋ s(t) โ ์ง์ง ํ์ , ์ฆ ์ ํด์ง ๋
น์์๊ฐ ๋์ ์์ค์ํ๋ ์ง์๊ธฐ๋ก ๋
น์ํ ๋ชจ๋ ๊ฒ, ์น(ํฐ) - ๊ณต๊ธฐ์ด์ ์ํด ์์ฑ๋ ์ ํธ, n(ํฐ) - ๋ฌด์์ ์์.
์๋ฅผ ๋ค์ด ํฉ์ฑ ์ง์ง ํ์ ์ ๊ณ์ฐํด ๋ณด๊ฒ ์ต๋๋ค. ์ง์ง ํ์ฌ์ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋ฆฌ์ปค ํ์ค(Ricker pulse)๋ฅผ ์ด๊ธฐ ์ ํธ๋ก ์ฌ์ฉํ๊ฒ ์ต๋๋ค.
length=0.050; (*Signal lenght*)
dt=0.001;(*Sample rate of signal*)
t=Range[-length/2,(length)/2,dt];(*Signal time*)
f=35;(*Central frequency*)
wavelet=(1.0-2.0*(Pi^2)*(f^2)*(t^2))*Exp[-(Pi^2)*(f^2)*(t^2)];
ListLinePlot[wavelet, Frame->True,PlotRange->Full,Filling->Axis,PlotStyle->Black,
PlotLabel->Style["Initial wavelet",Black,20],
LabelStyle->Directive[Black,Italic],
FillingStyle->{White,Black},ImageSize->Large,InterpolationOrder->2]
์ด๊ธฐ ์ง์ง ์ถฉ๊ฒฉ๋
300ms์ 600ms์ ๊น์ด์ ๋ ๊ฐ์ ๊ฒฝ๊ณ๋ฅผ ์ค์ ํ๊ณ ๋ฐ์ฌ ๊ณ์๋ ๋์์
๋๋ค.
rcExample=ConstantArray[0,1000];
rcExample[[300]]=RandomReal[{-1,0}];
rcExample[[600]]=RandomReal[{0,1}];
ListPlot[rcExample,Filling->0,Frame->True,Axes->False,PlotStyle->Black,
PlotLabel->Style["Reflection Coefficients",Black,20],
LabelStyle->Directive[Black,Italic]]
๋ฐ์ฌ ๊ณ์์ ์ํ์ค
์ง์ง ํ์ ์ ๊ณ์ฐํ์ฌ ํ์ํด ๋ด
์๋ค. ๋ฐ์ฌ ๊ณ์์ ๋ถํธ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์ง์ง ์ถ์ ์์ ๋ ๊ฐ์ ๊ต๋ฒ ๋ฐ์ฌ๋ฅผ ์ป์ต๋๋ค.
traceExamle=ListConvolve[wavelet[[1;;;;1]],rcExample];
ListPlot[traceExamle,
PlotStyle->Black,Filling->0,Frame->True,Axes->False,
PlotLabel->Style["Seismic trace",Black,20],
LabelStyle->Directive[Black,Italic]]
์๋ฎฌ๋ ์ด์
๋ ํธ๋
์ด ์์์๋ ์์ฝ์ด ํ์ํฉ๋๋ค. ์ค์ ๋ก ๋ ์ด์ด์ ๊น์ด๋ ๋ฌผ๋ก ๋ฏธํฐ ๋จ์๋ก ๊ฒฐ์ ๋๋ฉฐ ์ง์ง ์ถ์ ๊ณ์ฐ์ ์๊ฐ ์์ญ์ ๋ํด ๋ฐ์ํฉ๋๋ค. ๊น์ด๋ฅผ ๋ฏธํฐ ๋จ์๋ก ์ค์ ํ๊ณ ๋ ์ด์ด์ ์๋๋ฅผ ์๊ณ ๋์ฐฉ ์๊ฐ์ ๊ณ์ฐํ๋ ๊ฒ์ด ๋ ์ ํํ ๊ฒ์
๋๋ค. ์ด ๊ฒฝ์ฐ์๋ ์ฆ์ ์๊ฐ์ถ์ ๋ ์ด์ด๋ฅผ ์ค์ ํฉ๋๋ค.
ํ์ฅ ์กฐ์ฌ์ ๊ดํด ์ด์ผ๊ธฐํ๋ฉด ๊ทธ๋ฌํ ๊ด์ฐฐ์ ๊ฒฐ๊ณผ๋ก ์ ์ฌํ ์๊ณ์ด(์ง์ง ํ์ )์ด ์์ฒญ๋๊ฒ ๋ง์ด ๊ธฐ๋ก๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ๊ธธ์ด 25km, ๋๋น 15km์ ์ฌ์ดํธ๋ฅผ ์ฐ๊ตฌํ ๋ ์์ ๊ฒฐ๊ณผ ๊ฐ ํธ๋ ์ด์ค๊ฐ 25x25๋ฏธํฐ ํฌ๊ธฐ์ ์ (์ด๋ฌํ ์ ์ ๋น์ด๋ผ๊ณ ํจ)์ ํน์ฑ์ ๋ํ๋ด๋ฉด ์ต์ข ๋ฐ์ดํฐ ๋ฐฐ์ด์๋ 600000๊ฐ์ ํธ๋ ์ด์ค๊ฐ ํฌํจ๋ฉ๋๋ค. ์ํ๋ง ์๊ฐ์ด 1ms์ด๊ณ ๋ น์ ์๊ฐ์ด 5์ด์ธ ๊ฒฝ์ฐ ์ต์ข ๋ฐ์ดํฐ ํ์ผ์ 11GB ์ด์์ด ๋๋ฉฐ ์๋ณธ "์์" ์๋ฃ์ ์ฉ๋์ ์๋ฐฑ ๊ธฐ๊ฐ๋ฐ์ดํธ์ ์ด๋ฅผ ์ ์์ต๋๋ค.
๊ทธ๋ค๊ณผ ํ๋ ฅํ๋ ๋ฐฉ๋ฒ
ํจํค์ง ์ง์งํIO
ํจํค์ง ๊ฐ๋ฐ์ด ์์๋์์ต๋๋ค
- ZMAP ๋ฐ IRAP ํ์์ ์ง๋ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
- LAS ํ์ ์ฐ์ ์ธก์ ๊ฐ์ ธ์ค๊ธฐ
- ์ง์ง ํ์ผ ํ์์ ์
๋ ฅ ๋ฐ ์ถ๋ ฅ
SEGY
ํจํค์ง๋ฅผ ์ค์นํ๋ ค๋ฉด ์กฐ๋ฆฝ๋ ํจํค์ง์ ๋ค์ด๋ก๋ ํ์ด์ง์ ์๋ ์ง์นจ์ ๋ฐ๋ผ์ผ ํฉ๋๋ค. ๋ค์ ์ฝ๋๋ฅผ ์คํํ์ญ์์ค.
If[PacletInformation["GeologyIO"] === {}, PacletInstall[URLDownload[
"https://wolfr.am/FiQ5oFih",
FileNameJoin[{CreateDirectory[], "GeologyIO-0.2.2.paclet"}]
]]]
๊ทธ๋ฐ ๋ค์ ํจํค์ง๊ฐ ๊ธฐ๋ณธ ํด๋์ ์ค์น๋๋ฉฐ ๊ฒฝ๋ก๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
FileNameJoin[{$UserBasePacletsDirectory, "Repository"}]
์๋ฅผ ๋ค์ด ํจํค์ง์ ์ฃผ์ ๊ธฐ๋ฅ์ ๋ณด์ฌ๋๋ฆฌ๊ฒ ์ต๋๋ค. ํธ์ถ์ ์ ํต์ ์ผ๋ก Wolfram ์ธ์ด์ ํจํค์ง์ ๋ํด ์ํ๋ฉ๋๋ค.
Get["GeologyIO`"]
ํจํค์ง๋ ๋ค์์ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ๋์์ต๋๋ค.
ํนํ ์ด๋ฌํ ํ์ผ์ "Marmousi.segy" ํ์ผ์
๋๋ค. ์ด๋ ํ๋์ค ์์ ์ฐ๊ตฌ์์์ ๊ฐ๋ฐํ ์ง์ง ๋จ๋ฉด์ ํฉ์ฑ ๋ชจ๋ธ์
๋๋ค. ์ด ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ์๋ ํ๋์ฅ ๋ชจ๋ธ๋ง, ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ์ง์ง ์ถ์ ์ญ์ ๋ฑ์ ๋ํ ์์ฒด ์๊ณ ๋ฆฌ์ฆ์ ํ
์คํธํฉ๋๋ค. Marmousi ๋ชจ๋ธ ์์ฒด๋ ํจํค์ง ์์ฒด๊ฐ ๋ค์ด๋ก๋๋ ์ ์ฅ์์ ์ ์ฅ๋ฉ๋๋ค. ํ์ผ์ ์ป์ผ๋ ค๋ฉด ๋ค์ ์ฝ๋๋ฅผ ์คํํ์ญ์์ค.
If[Not[FileExistsQ["Marmousi.segy"]],
URLDownload["https://wolfr.am/FiQGh7rk", "Marmousi.segy"];]
marmousi = SEGYImport["Marmousi.segy"]
๊ฐ์ ธ์ค๊ธฐ ๊ฒฐ๊ณผ - SEGYData ๊ฐ์ฒด
SEGY ํ์์๋ ๊ด์ฐฐ์ ๋ํ ๋ค์ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ์์
์ด ํฌํจ๋ฉ๋๋ค. ์ฒซ์งธ, ์ด๊ฒ์ ํ
์คํธ ์ฃผ์์
๋๋ค. ์ฌ๊ธฐ์๋ ์์
์์น, ์ธก์ ์ ์ํํ ํ์ฌ ์ด๋ฆ ๋ฑ์ ๋ํ ์ ๋ณด๊ฐ ํฌํจ๋ฉ๋๋ค. ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ์ด ํค๋๋ TextHeader ํค๊ฐ ์๋ ์์ฒญ์ ์ํด ํธ์ถ๋ฉ๋๋ค. ๋ค์์ ๋จ์ถ๋ ํ
์คํธ ํค๋์
๋๋ค.
Short[marmousi["TextHeader"]]
"Marmousi ๋ฐ์ดํฐ ์ธํธ๋ ์ฐ๊ตฌ์์์ ์์ฑ๋์์ต๋๋ค. ์ต๋ ์๋๋ 1500m/s์ด๊ณ ์ต๋ ์๋๋ 5500m/s์ ๋๋ค."
"trace" ํค๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ง ์ถ์ ์ ์ก์ธ์คํ์ฌ ์ค์ ์ง์ง ๋ชจ๋ธ์ ํ์ํ ์ ์์ต๋๋ค(ํจํค์ง์ ๊ธฐ๋ฅ ์ค ํ๋๋ ํค๊ฐ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค).
ArrayPlot[Transpose[marmousi["traces"]], PlotTheme -> "Detailed"]
๋ชจ๋ธ ๋ง๋ฅด๋ฌด์
ํ์ฌ ์ด ํจํค์ง๋ฅผ ์ฌ์ฉํ๋ฉด ๋์ฉ๋ ํ์ผ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ถ์ ์ผ๋ก ๋ก๋ํ ์ ์์ผ๋ฏ๋ก ํฌ๊ธฐ๊ฐ ์์ญ ๊ธฐ๊ฐ๋ฐ์ดํธ์ ๋ฌํ๋ ํ์ผ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ํจํค์ง์ ๊ธฐ๋ฅ์๋ ๋ฐ์ดํฐ๋ฅผ .segy๋ก ๋ด๋ณด๋ด๊ณ ๋ถ๋ถ์ ์ผ๋ก ํ์ผ ๋์ ์ถ๊ฐํ๋ ๊ธฐ๋ฅ๋ ํฌํจ๋์ด ์์ต๋๋ค.
์ด์ ๋ณ๋๋ก .segy ํ์ผ์ ๋ณต์กํ ๊ตฌ์กฐ๋ก ์์ ํ ๋ ํจํค์ง์ ๊ธฐ๋ฅ์ ์ฃผ๋ชฉํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ํค์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ณ ํธ๋ ์ด์ค์ ํค๋์ ์ก์ธ์คํ ์ ์์ ๋ฟ๋ง ์๋๋ผ ์ด๋ฅผ ๋ณ๊ฒฝํ ๋ค์ ํ์ผ์ ์ธ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. GeologyIO ๊ตฌํ์ ๋ํ ๋ง์ ๊ธฐ์ ์ ์ธ๋ถ ์ฌํญ์ ์ด ๊ธฐ์ฌ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฏ๋ก ๋ณ๋๋ก ์ค๋ช ํ ๊ฐ์น๊ฐ ์์ ๊ฒ์ ๋๋ค.
์ง์ง ํ์ฌ์์ ์คํํธ๋ผ ๋ถ์์ ๊ด๋ จ์ฑ
์ง์ง ๋ฐ์ดํฐ๋ฅผ Wolfram Mathematica๋ก ๊ฐ์ ธ์ค๋ ๊ธฐ๋ฅ์ ํตํด ๋ด์ฅ๋ ์ ํธ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ์คํ ๋ฐ์ดํฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ฐ ์ง์ง ์ถ์ ์ ์๊ณ์ด์ ๋ํ๋ด๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์ฐ๊ตฌํ๋ ์ฃผ์ ๋๊ตฌ ์ค ํ๋๋ ์คํํธ๋ผ ๋ถ์์ ๋๋ค. ์ง์ง ๋ฐ์ดํฐ์ ์ฃผํ์ ๊ตฌ์ฑ์ ๋ถ์ํ๊ธฐ ์ํ ์ ์ ์กฐ๊ฑด ์ค ์๋ฅผ ๋ค์ด ๋ค์์ ๋ค ์ ์์ต๋๋ค.
- ๋ค์ํ ์ ํ์ ํ๋์ ์๋ก ๋ค๋ฅธ ์ฃผํ์ ๊ตฌ์ฑ์ ํน์ง์ผ๋ก ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ ์ฉํ ํ๋์ ๊ฐ์กฐํ๊ณ ๊ฐ์ญํ๋ฅผ ์ต์ ํ ์ ์์ต๋๋ค.
- ๋ค๊ณต์ฑ ๋ฐ ํฌํ๋์ ๊ฐ์ ์์ ํน์ฑ์ ์ฃผํ์ ๊ตฌ์ฑ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ต์์ ํน์ฑ์ ์ง๋ ์์์ ์๋ณํ ์ ์์ต๋๋ค.
- ๋๊ป๊ฐ ๋ค๋ฅธ ๋ ์ด์ด๋ ๋ค์ํ ์ฃผํ์ ๋ฒ์์์ ์ด์ ํ์์ ๋ฐ์์ํต๋๋ค.
์ธ ๋ฒ์งธ ์์ ์ ์ด ๊ธฐ์ฌ์ ๋งฅ๋ฝ์์ ์ฃผ์ํ ๋ด์ฉ์ ๋๋ค. ๋ค์์ ๋๊ป๊ฐ ๋ค์ํ ๋ ์ด์ด(์๊ธฐ ๋ชจ๋ธ)์ ๊ฒฝ์ฐ ์ง์ง ํ์ ์ ๊ณ์ฐํ๊ธฐ ์ํ ์ฝ๋ ์กฐ๊ฐ์ ๋๋ค. ์ด ๋ชจ๋ธ์ ์ ํต์ ์ผ๋ก ์ฌ๋ฌ ์ธต์์ ๋ฐ์ฌ๋ ํ๋์ด ์๋ก ์ค์ฒฉ๋ ๋ ๊ฐ์ญ ํจ๊ณผ๋ฅผ ๋ถ์ํ๊ธฐ ์ํด ์ง์ง ํ์ฌ์์ ์ฐ๊ตฌ๋์์ต๋๋ค.
nx=200;(* Number of grid points in X direction*)
ny=200;(* Number of grid points in Y direction*)
T=2;(*Total propagation time*)
(*Velocity and density*)
modellv=Table[4000,{i,1,ny},{j,1,nx}];(* P-wave velocity in m/s*)
rho=Table[2200,{i,1,ny},{j,1,nx}];(* Density in g/cm^3, used constant density*)
Table[modellv[[150-Round[i*0.5];;,i]]=4500;,{i,1,200}];
Table[modellv[[;;70,i]]=4500;,{i,1,200}];
(*Plotting model*)
MatrixPlot[modellv,PlotLabel->Style["Model of layer",Black,20],
LabelStyle->Directive[Black,Italic]]
ํ์น์์ ํ์ฑ ๋ชจ๋ธ
์๊ธฐ ๋ด๋ถ์ ํ๋ ์๋๋ 4500m/s์ด๊ณ ์๊ธฐ ์ธ๋ถ์ ํ๋ ์๋๋ 4000m/s์ด๋ฉฐ ๋ฐ๋๋ 2200g/cmXNUMX๋ก ์ผ์ ํ๋ค๊ณ ๊ฐ์ ๋ฉ๋๋ค. ์ด๋ฌํ ๋ชจ๋ธ์ ๊ฒฝ์ฐ ๋ฐ์ฌ ๊ณ์์ ์ง์ง ํ์ ์ ๊ณ์ฐํฉ๋๋ค.
rc=Table[N[(modellv[[All,i]]-PadLeft[modellv[[All,i]],201,4000][[1;;200]])/(modellv[[All,i]]+PadLeft[modellv[[All,i]],201,4500][[1;;200]])],{i,1,200}];
traces=Table[ListConvolve[wavelet[[1;;;;1]],rc[[i]]],{i,1,200}];
starttrace=10;
endtrace=200;
steptrace=10;
trasenum=Range[starttrace,endtrace,steptrace];
traserenum=Range[Length@trasenum];
tracedist=0.5;
Rotate[Show[
Reverse[Table[
ListLinePlot[traces[[trasenum[[i]]]]*50+trasenum[[i]]*tracedist,Filling->{1->{trasenum[[i]]*tracedist,{RGBColor[0.97,0.93,0.68],Black}}},PlotStyle->Directive[Gray,Thin],PlotRange->Full,InterpolationOrder->2,Axes->False,Background->RGBColor[0.97,0.93,0.68]],
{i,1,Length@trasenum}]],ListLinePlot[Transpose[{ConstantArray[45,80],Range[80]}],PlotStyle->Red],PlotRange->All,Frame->True],270Degree]
์๊ธฐํ ๋ชจ๋ธ์ ์ง์ง ํ์
์ด ๊ทธ๋ฆผ์ ํ์๋ ์ผ๋ จ์ ์ง์ง ํ์ ์ ์ง์ง ๋จ๋ฉด์ด๋ผ๊ณ ํฉ๋๋ค. ๋ณด์๋ค์ํผ, ๋ฐ์ฌํ์ ๊ธฐํํ์ ๊ตฌ์กฐ๊ฐ ์ด์ ์ ์ง์ ํ ๋ชจ๋ธ๊ณผ ๋ช
ํํ๊ฒ ์ผ์นํ๋ฏ๋ก ํด์์ ์ง๊ด์ ์ธ ์์ค์์ ์ํ๋ ์๋ ์์ต๋๋ค. ์ถ์ ์ ๋ ์์ธํ ๋ถ์ํ๋ฉด 1์์ ์ฝ 30๊น์ง์ ์ถ์ ์ด ๋ค๋ฅด์ง ์๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ๊ตฌ์กฐ๋ฌผ์ ์ง๋ถ๊ณผ ๋ฐ๋ฅ์ ๋ฐ์ฌ๊ฐ ์๋ก ๊ฒน์น์ง ์์ต๋๋ค. 31๋ฒ์งธ ํธ๋ ์ด์ค๋ถํฐ ๋ฐ์ฌ๊ฐ ๊ฐ์ญํ๊ธฐ ์์ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ธ์์๋ ๋ฐ์ฌ ๊ณ์๊ฐ ์ํ์ผ๋ก ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค. ์ง์ง ํ์ ์ ์ง์ธต์ ๋๊ป๊ฐ ๋ณ๊ฒฝ๋จ์ ๋ฐ๋ผ ๊ฐ๋๊ฐ ๋ณ๊ฒฝ๋ฉ๋๋ค.
์ง์ธต์ ์๋ถ ๊ฒฝ๊ณ๋ก๋ถํฐ์ ๋ฐ์ฌ ์งํญ์ ๊ณ ๋ คํด ๋ด ์๋ค. 60๋ฒ์งธ ๊ฒฝ๋ก๋ถํฐ ๋ฐ์ฌ ๊ฐ๋๊ฐ ์ฆ๊ฐํ๊ธฐ ์์ํ๊ณ 70๋ฒ์งธ ๊ฒฝ๋ก์์ ์ต๋๊ฐ ๋ฉ๋๋ค. ์ด๋ ์ง์ธต์ ์ง๋ถ๊ณผ ๋ฐ๋ฅ์์ ๋ฐ์ํ๋ ํ๋์ ๊ฐ์ญ์ด ๋ํ๋๋ ๋ฐฉ์์ผ๋ก, ์ผ๋ถ ๊ฒฝ์ฐ์๋ ์ง์ง ๊ธฐ๋ก์ ์ฌ๊ฐํ ์ด์ ํ์์ด ๋ฐ์ํฉ๋๋ค.
ListLinePlot[GaussianFilter[Abs[traces[[All,46]]],3][[;;;;2]],
InterpolationOrder->2,Frame->True,PlotStyle->Black,
PlotLabel->Style["Amplitude of reflection",Black,20],
LabelStyle->Directive[Black,Italic],
PlotRange->All]
์๊ธฐ์ ์๋จ ๊ฐ์ฅ์๋ฆฌ์์ ๋ฐ์ฌํ์ ์งํญ ๊ทธ๋ํ
์ ํธ์ ์ฃผํ์๊ฐ ๋ฎ์์๋ก ํฐ ํ์ฑ ๋๊ป์์ ๊ฐ์ญ์ด ๋ํ๋๊ธฐ ์์ํ๊ณ , ๊ณ ์ฃผํ ์ ํธ์ ๊ฒฝ์ฐ ๋ ์์ ๋๊ป์์ ๊ฐ์ญ์ด ๋ฐ์ํ๋ ๊ฒ์ด ๋
ผ๋ฆฌ์ ์
๋๋ค. ๋ค์ ์ฝ๋ ์กฐ๊ฐ์ 35Hz, 55Hz, 85Hz ์ฃผํ์์ ์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.
waveletSet=Table[(1.0-2.0*(Pi^2)*(f^2)*(t^2))*Exp[-(Pi^2)*(f^2)*(t^2)],
{f,{35,55,85}}];
ListLinePlot[waveletSet,PlotRange->Full,PlotStyle->Black,Frame->True,
PlotLabel->Style["Set of wavelets",Black,20],
LabelStyle->Directive[Black,Italic],
ImageSize->Large,InterpolationOrder->2]
35Hz, 55Hz, 85Hz์ ์ฃผํ์๋ฅผ ๊ฐ๋ ์์ค ์ ํธ ์ธํธ
์ง์ง ํ์ ์ ๊ณ์ฐํ๊ณ ๋ฐ์ฌํ ์งํญ์ ๊ทธ๋ํ๋ฅผ ์์ฑํจ์ผ๋ก์จ ์๋ก ๋ค๋ฅธ ์ฃผํ์์ ๋ํด ์๋ก ๋ค๋ฅธ ํ์ฑ ๋๊ป์์ ์ด์์ด ๊ด์ฐฐ๋๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
tracesSet=Table[ListConvolve[waveletSet[[j]][[1;;;;1]],rc[[i]]],{j,1,3},{i,1,200}];
lowFreq=ListLinePlot[GaussianFilter[Abs[tracesSet[[1]][[All,46]]],3][[;;;;2]],InterpolationOrder->2,PlotStyle->Black,PlotRange->All];
medFreq=ListLinePlot[GaussianFilter[Abs[tracesSet[[2]][[All,46]]],3][[;;;;2]],InterpolationOrder->2,PlotStyle->Black,PlotRange->All];
highFreq=ListLinePlot[GaussianFilter[Abs[tracesSet[[3]][[All,46]]],3][[;;;;2]],InterpolationOrder->2,PlotStyle->Black,PlotRange->All];
Show[lowFreq,medFreq,highFreq,PlotRange->{{0,100},All},
PlotLabel->Style["Amplitudes of reflection",Black,20],
LabelStyle->Directive[Black,Italic],
Frame->True]
๋ค์ํ ์ฃผํ์์ ๋ํ ์๊ธฐ์ ์๋จ ๊ฐ์ฅ์๋ฆฌ์์ ๋ฐ์ฌํ์ ์งํญ ๊ทธ๋ํ
์ง์ง ๊ด์ธก ๊ฒฐ๊ณผ๋ก๋ถํฐ ์ง์ธต์ ๋๊ป์ ๋ํ ๊ฒฐ๋ก ์ ๋์ถํ๋ ๋ฅ๋ ฅ์ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. ์๋ํ๋ฉด ์์ ํ์ฌ์ ์ฃผ์ ์์
์ค ํ๋๋ ์ ์ ์ ๋๊ธฐ ์ํ ๊ฐ์ฅ ์ ๋งํ ์ง์ (์ฆ, ์ง์ธต์ด ์๋ ์ง์ญ)์ ํ๊ฐํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ ๋๊บผ์ด). ๋ํ ์ง์ง ๋จ๋ฉด์๋ ์์ฑ์ผ๋ก ์ธํด ํ์ฑ ๋๊ป๊ฐ ๊ธ๊ฒฉํ ๋ณํ๋ ๋ฌผ์ฒด๊ฐ ์์ ์ ์์ต๋๋ค. ์ด๋ ์คํํธ๋ผ ๋ถ์์ ์ฐ๊ตฌํ๋ ๋ฐ ํจ๊ณผ์ ์ธ ๋๊ตฌ๋ก ๋ง๋ญ๋๋ค. ๊ธฐ์ฌ์ ๋ค์ ๋ถ๋ถ์์๋ ๊ทธ๋ฌํ ์ง์งํ์ ๋ฌผ์ฒด๋ฅผ ๋ ์์ธํ ๊ณ ๋ คํ ๊ฒ์
๋๋ค.
์คํ ๋ฐ์ดํฐ. ์ด๋์ ์ป์์ผ๋ฉฐ ๊ทธ ์์์ ๋ฌด์์ ์ฐพ์์ผ ํฉ๋๊น?
๊ธฐ์ฌ์์ ๋ถ์๋ ์๋ฃ๋ ์๋ถ ์๋ฒ ๋ฆฌ์์์ ์ป์ ๊ฒ์ ๋๋ค. ์ด ์ง์ญ์ ๋๊ตฌ๋ ์์ธ ์์ด ์๊ณ ์๋ฏ์ด ์ฐ๋ฆฌ๋๋ผ์ ์ฃผ์ ์ฐ์ ์ง์ญ์ด๋ค. ์ง๋ ์ธ๊ธฐ 60๋ ๋์ ์ด ์ง์ญ์์ ํ๋ฐํ ํด์ ๋ฌผ ๊ฐ๋ฐ์ด ์์๋์์ต๋๋ค. ์์ ๋งค์ฅ์ง๋ฅผ ์ฐพ๋ ์ฃผ์ ๋ฐฉ๋ฒ์ ์ง์ง ํ์ฌ์ ๋๋ค. ์ด ์ง์ญ์ ์์ฑ ์ด๋ฏธ์ง๋ฅผ ๋ณด๋ ๊ฒ์ ํฅ๋ฏธ ๋กญ์ต๋๋ค. ์์ ๊ท๋ชจ์์๋ ์์ฒญ๋ ์์ ๋ช๊ณผ ํธ์๋ฅผ ๋ณผ ์ ์์ผ๋ฉฐ, ์ง๋๋ฅผ ํ๋ํ๋ฉด ํด๋ฌ์คํฐ ์ฐ๋ฌผ ์์ถ ์ฅ์๋ฅผ ๋ณผ ์ ์๊ณ , ์ง๋๋ฅผ ํ๊ณ๊น์ง ํ๋ํ๋ฉด ์ง์ง์ด ๋ฐ์ํ ํ๋กํ์ ๊ฐ๊ฐ๋ ๊ตฌ๋ถํ ์ ์์ต๋๋ค. ๊ด์ฐฐ์ด ์ํ๋์์ต๋๋ค.
Yandex ์ง๋์ ์์ฑ ์ด๋ฏธ์ง - Noyabrsk ๋์ ์ง์ญ
๋คํ ์ค ํ๋์ ์๋ ์ฐ๋ฌผ ํจ๋ ๋คํธ์ํฌ
์๋ถ ์๋ฒ ๋ฆฌ์์ ์์ ํจ์ ์์์ 1km์์ 5km๊น์ง ๋ค์ํ ๊น์ด์์ ๋ฐ๊ฒฌ๋ฉ๋๋ค. ์์ ๋ฅผ ํจ์ ํ ์์์ ๋๋ถ๋ถ์ ์ฅ๋ผ๊ธฐ์ ๋ฐฑ์
๊ธฐ์ ํ์ฑ๋์์ต๋๋ค. ์ฅฌ๋ผ๊ธฐ ์๋๋ ์๋ง๋ ๊ฐ์ ์ด๋ฆ์ ์ํ๋ฅผ ํตํด ๋ง์ ์ฌ๋๋ค์๊ฒ ์๋ ค์ก์ ๊ฒ์
๋๋ค.
์์ฆ
์ฅ๋ผ๊ธฐ
์ฅ๋ผ๊ธฐ ์๋์ ์๋ถ ์๋ฒ ๋ฆฌ์์ ์ํ ๋ ํด์(๊ฐ๊ณผ ์์ ๋ฐ๋ค๊ฐ ๊ต์ฐจํ๋ ๋
)์ด์๋ค๋ ์ ์ ์ ์ํ์ธ์. ๊ธฐํ๊ฐ ํธ์ํ๊ธฐ ๋๋ฌธ์ ๋น์์ ์ ํ์ ์ธ ํ๊ฒฝ์ ๋ค์๊ณผ ๊ฐ์์ ๊ฒ์ผ๋ก ์ถ์ธกํ ์ ์์ต๋๋ค.
์ฅ๋ผ๊ธฐ ์๋ฒ ๋ฆฌ์
์ด ์ฌ์ง์์ ์ฐ๋ฆฌ์๊ฒ ์ค์ํ ๊ฒ์ ๋๋ฌผ์ด๋ ์๋ณด๋ค๋ ๋ฐฐ๊ฒฝ์ ์๋ ๊ฐ์ ์ด๋ฏธ์ง์
๋๋ค. ๊ฐ์ ์ฐ๋ฆฌ๊ฐ ์์ ๋ฉ์ท๋ ๊ฒ๊ณผ ๋์ผํ ์ง์งํ์ ๋์์
๋๋ค. ์ฌ์ค ๊ฐ์ ํ๋์ผ๋ก ์ธํด ์ ๋ถ๋ฅ๋ ์ฌ์์ด ์ถ์ ๋์ด ์์ ์ ์ฅ์๊ฐ ๋ฉ๋๋ค. ์ด๋ฌํ ์ ์์ง๋ ๊ธฐ์ดํ๊ณ ๋ณต์กํ ๋ชจ์(๊ฐ๋ฐ๋ฅ๊ณผ ๊ฐ์)์ ๊ฐ์ง ์ ์์ผ๋ฉฐ ๋๊ป๊ฐ ๋ค์ํฉ๋๋ค. ์ ๋ฐฉ ๊ทผ์ฒ์์๋ ๋๊ป๊ฐ ์์ง๋ง ์๋ก ์ค์์ ๊ฐ๊น์ฐ๊ฑฐ๋ ๊ตฌ๋ถ๊ตฌ๋ถํ ์ง์ญ์์๋ ๋๊ป๊ฐ ์ฆ๊ฐํฉ๋๋ค. ๋ฐ๋ผ์ ์ฅ๋ผ๊ธฐ์ ํ์ฑ๋ ๊ฐ์ ํ์ฌ ์ฝ XNUMXkm ๊น์ด์ ์์ผ๋ฉฐ ์์ ์ ์ฅ์๋ฅผ ์ฐพ๋ ๋์์
๋๋ค.
์คํ ๋ฐ์ดํฐ. ์ฒ๋ฆฌ ๋ฐ ์๊ฐํ
๊ธฐ์ฌ์ ํ์๋ ์ง์ง ์๋ฃ์ ๋ํด ์ฆ์ ์์ฝํ๊ฒ ์ต๋๋ค. ๋ถ์์ ์ฌ์ฉ๋ ๋ฐ์ดํฐ์ ์์ด ์๋นํ๊ธฐ ๋๋ฌธ์ ์๋ณธ ์ง์ง ํ์ ์ธํธ์ ์ผ๋ถ๋ง ๊ธฐ์ฌ์ ํ ์คํธ์ ํฌํจ๋์ด ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋๊ตฌ๋ ์์ ๊ณ์ฐ์ ์ฌํํ ์ ์์ต๋๋ค.
์ง์ง ๋ฐ์ดํฐ๋ก ์์ ํ ๋ ์ง๊ตฌ๋ฌผ๋ฆฌํ์๋ ์ผ๋ฐ์ ์ผ๋ก ๋ค์ํ ์ ํ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ ์ ์๊ณ ํธ๋ฆฌํ ๊ทธ๋ํฝ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ ํน์ ์ํํธ์จ์ด(Petrel ๋๋ Paradigm๊ณผ ๊ฐ์ด ๊ฐ๋ฐ์ด ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ฌ๋ฌ ์ ๊ณ ๋ฆฌ๋๊ฐ ์์)๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ชจ๋ ํธ๋ฆฌํจ์๋ ๋ถ๊ตฌํ๊ณ ์ด๋ฌํ ์ ํ์ ์ํํธ์จ์ด์๋ ๋จ์ ๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์์ ์ ์ธ ๋ฒ์ ์์ ์ต์ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๋ ๋ฐ๋ ๋ง์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ณ ๊ณ์ฐ ์๋ํ ๊ฐ๋ฅ์ฑ์ ์ผ๋ฐ์ ์ผ๋ก ์ ํ๋ฉ๋๋ค. ์ด๋ฌํ ์ํฉ์์๋ ๊ด๋ฒ์ํ ์๊ณ ๋ฆฌ์ฆ ๊ธฐ๋ฐ์ ์ฌ์ฉํ๋ ๋์์ ๋ง์ ๋ฃจํด์ ์ํํ ์ ์๋ ์ปดํจํฐ ์ํ ์์คํ ๊ณผ ๊ณ ๊ธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋งค์ฐ ํธ๋ฆฌํด์ง๋๋ค. ์ด๊ฒ์ด Wolfram Mathematica์์ ์ง์ง ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์๋ฆฌ์ ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ๋ํํ ์์ ์ ์ํด ํ๋ถํ ๊ธฐ๋ฅ์ ์์ฑํ๋ ๊ฒ์ ๋ถ์ ์ ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ํ์ฉ๋๋ ํ์์์ ๋ก๋ํ๊ณ , ์ํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ๊ณ , ์ธ๋ถ ํ์์ผ๋ก ๋ค์ ์ ๋ก๋ํ๋ ๊ฒ์ด ๋ ์ค์ํฉ๋๋ค.
์ ์๋ ๋ฐฉ์์ ๋ฐ๋ผ ์๋ณธ ์ง์ง ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๊ณ ์ด๋ฅผ ํ์ํฉ๋๋ค.
Get["GeologyIO`"]
seismic3DZipPath = "seismic3D.zip";
seismic3DSEGYPath = "seismic3D.sgy";
If[FileExistsQ[seismic3DZipPath], DeleteFile[seismic3DZipPath]];
If[FileExistsQ[seismic3DSEGYPath], DeleteFile[seismic3DSEGYPath]];
URLDownload["https://wolfr.am/FiQIuZuH", seismic3DZipPath];
ExtractArchive[seismic3DZipPath];
seismic3DSEGY = SEGYImport[seismic3DSEGYPath]
์ด๋ ๊ฒ ๋ค์ด๋ก๋ํ๊ณ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ 10 x 5km ํฌ๊ธฐ์ ์์ญ์ ๊ธฐ๋ก๋ ๊ฒฝ๋ก์ ๋๋ค. XNUMX์ฐจ์ ์ง์ง์กฐ์ฌ ๋ฐฉ์(ํ๋์ด ๊ฐ๋ณ ์ง๊ตฌ๋ฌผ๋ฆฌํ์ ๋จ๋ฉด์ด ์๋ ์ ์ฒด ์ง์ญ์ ๊ฑธ์ณ ๋์์ ๊ธฐ๋ก๋จ)์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ป์ผ๋ฉด ์ง์ง ๋ฐ์ดํฐ ํ๋ธ๋ฅผ ์ป๋ ๊ฒ์ด ๊ฐ๋ฅํด์ง๋๋ค. ์ด๋ ์ง์ง ํ๊ฒฝ์ ๋ํ ์์ธํ ์ฐ๊ตฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ ์์ง ๋ฐ ์ํ ๋จ๋ฉด์ XNUMX์ฐจ์ ๋ฌผ์ฒด์ ๋๋ค. ๊ณ ๋ ค๋ ์์์ ์ฐ๋ฆฌ๋ XNUMX์ฐจ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๊ณ ์์ต๋๋ค. ํ ์คํธ ํค๋์์ ๋ค์๊ณผ ๊ฐ์ ์ ๋ณด๋ฅผ ์ป์ ์ ์์ต๋๋ค.
StringPartition[seismic3DSEGY["textheader"], 80] // TableForm
C 1 ์ด๊ฒ์ GEOLOGYIO ํจํค์ง ํ ์คํธ์ฉ ๋ฐ๋ชจ ํ์ผ์ ๋๋ค.
C 2
C 3
C 4
C 5 ๋ ์ง ์ฌ์ฉ์ ์ด๋ฆ: WOLFRAM ์ฌ์ฉ์
C 6 ์ค๋ฌธ ์กฐ์ฌ ์ด๋ฆ: ์๋ฒ ๋ฆฌ์ ์ด๋๊ฐ
C 7 ํ์ผ ์ ํ 3์ฐจ์ ์ง์ง๋
C 8
C 9
C10 Z ๋ฒ์: ์ฒ์ 2200M ๋ง์ง๋ง 2400M
์ด ๋ฐ์ดํฐ ์ธํธ๋ ๋ฐ์ดํฐ ๋ถ์์ ์ฃผ์ ๋จ๊ณ๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ์ ์ถฉ๋ถํฉ๋๋ค. ํ์ผ์ ํธ๋ ์ด์ค๋ ์์ฐจ์ ์ผ๋ก ๊ธฐ๋ก๋๋ฉฐ ๊ฐ ํธ๋ ์ด์ค๋ ๋ค์ ๊ทธ๋ฆผ๊ณผ ์ ์ฌํฉ๋๋ค. ์ด๋ ์์ง ์ถ(๊น์ด ์ถ)์ ๋ฐ๋ฅธ ๋ฐ์ฌํ์ ์งํญ ๋ถํฌ์ ๋๋ค.
ListLinePlot[seismic3DSEGY["traces"][[100]], InterpolationOrder -> 2,
PlotStyle -> Black, PlotLabel -> Style["Seismic trace", Black, 20],
LabelStyle -> Directive[Black, Italic], PlotRange -> All,
Frame -> True, ImageSize -> 1200, AspectRatio -> 1/5]
์ง์ง๋จ๋ฉด ํ์ ์ค ํ๋
์ฐ๊ตฌ ์์ญ์ ๊ฐ ๋ฐฉํฅ์ ๋ช ๊ฐ์ ํธ๋ ์ด์ค๊ฐ ์๋์ง ์๋ฉด 3์ฐจ์ ๋ฐ์ดํฐ ๋ฐฐ์ด์ ์์ฑํ๊ณ ImageXNUMXD[] ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํ์ํ ์ ์์ต๋๋ค.
traces=seismic3DSEGY["traces"];
startIL=1050;EndIL=2000;stepIL=2; (*ะบะพะพัะดะธะฝะฐัะฐ ะฅ ะฝะฐัะฐะปะฐ ะธ ะบะพะฝัะฐ ัััะผะบะธ ะธ ัะฐะณ ััะฐัั*)
startXL=1165;EndXL=1615;stepXL=2; (*ะบะพะพัะดะธะฝะฐัะฐ Y ะฝะฐัะฐะปะฐ ะธ ะบะพะฝัะฐ ัััะผะบะธ ะธ ัะฐะณ ััะฐัั*)
numIL=(EndIL-startIL)/stepIL+1; (*ะบะพะปะธัะตััะฒะพ ััะฐัั ะฟะพ ะพะธั ะฅ*)
numXL=(EndXL-startXL)/stepIL+1; (*ะบะพะปะธัะตััะฒะพ ััะฐัั ะฟะพ ะพะธั Y*)
Image3D[ArrayReshape[Abs[traces/Max[Abs[traces[[All,1;;;;4]]]]],{numIL,numXL,101}],ViewPoint->{-1, 0, 0},Background->RGBColor[0,0,0]]
์ง์ง ๋ฐ์ดํฐ ํ๋ธ์ XNUMXD ์ด๋ฏธ์ง(์ธ๋ก์ถ - ๊น์ด)
๊ด์ฌ ์๋ ์ง์งํ์ ํน์ง์ด ๊ฐ๋ ฌํ ์ง์ง ์ด์ ํ์์ ์์ฑํ๋ ๊ฒฝ์ฐ ํฌ๋ช
์ฑ์ ๊ฐ์ถ ์๊ฐํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋
นํ์ "์ค์ํ์ง ์์" ์์ญ์ ๋ณด์ด์ง ์๊ฒ ๋ง๋ค์ด ์์ธ์ ์ธ ๋ถ๋ถ๋ง ๋ณด์ด๊ฒ ํ ์ ์์ต๋๋ค. Wolfram Mathematica์์๋ ๋ค์์ ์ฌ์ฉํ์ฌ ์ด ์์
์ ์ํํ ์ ์์ต๋๋ค.
data = ArrayReshape[Abs[traces/Max[Abs[traces[[All,1;;;;4]]]]],{numIL,numXL,101}];
Graphics3D[{Opacity[0.1], Raster3D[data, ColorFunction->"RainbowOpacity"]},
Boxed->False, SphericalRegion->True, ImageSize->840, Background->None]
Opacity[] ๋ฐ Raster3D[] ํจ์๋ฅผ ์ฌ์ฉํ ์ง์ง ๋ฐ์ดํฐ ํ๋ธ ์ด๋ฏธ์ง
ํฉ์ฑ ์์์์ ๊ฐ์ด ์๋ ์
๋ฐฉ์ฒด์ ๋จ๋ฉด์์ ๊ฐ๋ณ ๊ธฐ๋ณต์ด ์๋ ์ผ๋ถ ์ง์งํ์ ๊ฒฝ๊ณ(์ธต)๋ฅผ ์๋ณํ ์ ์์ต๋๋ค.
์คํํธ๋ผ ๋ถ์์ ์ฃผ์ ๋๊ตฌ๋ ํธ๋ฆฌ์ ๋ณํ์ ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ ํธ๋ ์ด์ค ๋๋ ํธ๋ ์ด์ค ๊ทธ๋ฃน์ ์งํญ-์ฃผํ์ ์คํํธ๋ผ์ ํ๊ฐํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ฐ์ดํฐ๋ฅผ ์ฃผํ์ ์์ญ์ผ๋ก ์ ์กํ ํ์๋ ์ฃผํ์๊ฐ ์ธ์ (์ด๋ค ๊น์ด์์ ์ฝํ์ง๋์ง) ๋ณ๊ฒฝ๋๋์ง์ ๋ํ ์ ๋ณด๊ฐ ์์ค๋ฉ๋๋ค. ์๊ฐ(๊น์ด) ์ถ์์ ์ ํธ ๋ณํ๋ฅผ ๊ตญ์งํํ ์ ์๋๋ก ์๋์ฐ ํธ๋ฆฌ์ ๋ณํ ๋ฐ ์จ์ด๋ธ๋ฆฟ ๋ถํด๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ๊ธฐ์ฌ์์๋ ์จ์ด๋ธ๋ฆฟ ๋ถํด๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์จ์ด๋ธ๋ฆฟ ๋ถ์ ๊ธฐ์ ์ 90๋ ๋๋ถํฐ ์ง์งํ์ฌ์ ํ๋ฐํ ํ์ฉ๋๊ธฐ ์์ํ๋ค. ์๋์ฐ ํธ๋ฆฌ์ ๋ณํ์ ๋นํด ์ฅ์ ์ ๋ ๋์ ์๊ฐ ๋ถํด๋ฅ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
๋ค์ ์ฝ๋ ์กฐ๊ฐ์ ์ฌ์ฉํ๋ฉด ์ง์ง ์ถ์ ์ค ํ๋๋ฅผ ๊ฐ๋ณ ๊ตฌ์ฑ ์์๋ก ๋ถํดํ ์ ์์ต๋๋ค.
cwd=ContinuousWaveletTransform[seismicSection["traces"][[100]]]
Show[
ListLinePlot[Re[cwd[[1]]],PlotRange->All],
ListLinePlot[seismicSection["traces"][[100]],
PlotStyle->Black,PlotRange->All],ImageSize->{1500,500},AspectRatio->Full,
PlotLabel->Style["Wavelet decomposition",Black,32],
LabelStyle->Directive[Black,Italic],
PlotRange->All,
Frame->True]
์ถ์ ์ ๊ตฌ์ฑ ์์๋ก ๋ถํด
์๋ก ๋ค๋ฅธ ํ๋ ๋๋ฌ ์๊ฐ์ ๋ฐ์ฌ ์๋์ง๊ฐ ์ด๋ป๊ฒ ๋ถํฌ๋๋์ง ํ๊ฐํ๊ธฐ ์ํด ์ค์ผ์ผ๋ก๊ทธ๋จ(์คํํธ๋ก๊ทธ๋จ๊ณผ ์ ์ฌ)์ด ์ฌ์ฉ๋ฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ค์ ๋ก ๋ชจ๋ ๊ตฌ์ฑ ์์๋ฅผ ๋ถ์ํ ํ์๋ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ , ์ค, ๊ณ ์ฃผํ ์ฑ๋ถ์ด ์ ํ๋ฉ๋๋ค.
freq=(500/(#*contWD["Wavelet"]["FourierFactor"]))&/@(Thread[{Range[contWD["Octaves"]],1}]/.contWD["Scales"])//Round;
ticks=Transpose[{Range[Length[freq]],freq}];
WaveletScalogram[contWD,Frame->True,FrameTicks->{{ticks,Automatic},Automatic},FrameTicksStyle->Directive[Orange,12],
FrameLabel->{"Time","Frequency(Hz)"},LabelStyle->Directive[Black,Bold,14],
ColorFunction->"RustTones",ImageSize->Large]
์ค์ผ์ผ๋ก๊ทธ๋จ. ํจ์ ๊ฒฐ๊ณผ
Wolfram ์ธ์ด๋ ์จ์ด๋ธ๋ฆฟ ๋ณํ ๊ธฐ๋ฅ์ ์ฌ์ฉํฉ๋๋ค.
tracesCWD=Table[Map[Hilbert[#,0]&,Re[ContinuousWaveletTransform[traces[[i]]][[1]]][[{13,15,18}]]],{i,1,Length@traces}];
๊ธฐ๋ฅ์ ์ ์ฉํ ํ
๊ฒฐ๊ณผ๋ฅผ ๋๋ฃ์ ๊ณต์ ํ๊ฑฐ๋ ๊ณ ๊ฐ์๊ฒ ์ ๊ณตํด์ผ ํ๋ ๊ฒฝ์ฐ GeologyIO ํจํค์ง์ SEGYExport[] ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
outputdata=seismic3DSEGY;
outputdata["traces",1;;-1]=tracesCWD[[All,3]];
outputdata["textheader"]="Wavelet Decomposition Result";
outputdata["binaryheader","NumberDataTraces"]=Length[tracesCWD[[All,3]]];
SEGYExport["D:result.segy",outputdata];
์ด๋ฌํ ํ๋ธ ์ค ์ธ ๊ฐ(์ ์ฃผํ์, ์ค๊ฐ ์ฃผํ์ ๋ฐ ๊ณ ์ฃผํ์ ๊ตฌ์ฑ ์์)๋ฅผ ์ฌ์ฉํ๋ฉด ์ผ๋ฐ์ ์ผ๋ก RGB ๋ธ๋ ๋ฉ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํจ๊ป ์๊ฐํํฉ๋๋ค. ๊ฐ ๊ตฌ์ฑ ์์์๋ ๋นจ๊ฐ์, ๋
น์, ํ๋์ ๋ฑ ๊ณ ์ ํ ์์์ด ์ง์ ๋ฉ๋๋ค. Wolfram Mathematica์์๋ ๋ค์ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด ์์
์ ์ํํ ์ ์์ต๋๋ค.
๊ทธ ๊ฒฐ๊ณผ๋ ์ง์งํ์ ํด์์ด ๊ฐ๋ฅํ ์ด๋ฏธ์ง์ ๋๋ค. ํด๋น ๋จ๋ฉด์ ๊ธฐ๋ก๋ ๊ตฌ๋ถ๊ตฌ๋ถํ ์งํ์ ํตํด ์ ์์ง์ผ ๊ฐ๋ฅ์ฑ์ด ๋๊ณ ์์ ๋งค์ฅ๋์ด ํฌํจ๋ ๊ณ ๋ ์๋ก์ ์ค๊ณฝ์ ๊ทธ๋ฆด ์ ์์ต๋๋ค. ๊ทธ๋ฌํ ํ์ฒ ์์คํ ์ ํ๋ ์ ์ฌ์ฒด๋ฅผ ๊ฒ์ํ๊ณ ๋ถ์ํ๋ฉด ๊ตฌ๋ถ๊ตฌ๋ถํ ๊ตฌ๋ถ๊ตฌ๋ถํ ๋ถ๋ถ์ ๊ฐ์ฅ ์ ๋งํ ๋ถ๋ถ์ ๊ฒฐ์ ํ ์ ์์ต๋๋ค. ์๋ก ์์ฒด๋ ์ ๋ถ๋ฅ๋ ์ฌ์์ธต์ด ๋๊ป๊ฒ ์์ธ ๊ฒ์ด ํน์ง์ด๋ฉฐ ์์ ๋ฅผ ์ ์ฅํ๋ ์ข์ ์ฅ์์ ๋๋ค. "๋ ์ด์ค" ์ด์ ํ์ ์ธ๋ถ์ ์ง์ญ์ ํ๋์ ๋ฒ๋์ ํด์ ๋ฌผ๊ณผ ์ ์ฌํฉ๋๋ค. ๋ฒ๋์ ํด์ ๋ฌผ์ ์ฃผ๋ก ์ ํ ์ง ์์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ ์ด๋ฌํ ์ง์ญ์ ๋ํ ์์ถ ์์ ์ ํจ๊ณผ์ ์ด์ง ์์ต๋๋ค.
๋ฐ์ดํฐ ํ๋ธ์ RGB ์ฌ๋ผ์ด์ค. ์ค์(์ค์์์ ์ฝ๊ฐ ์ผ์ชฝ)์์๋ ๊ตฌ๋ถ๊ตฌ๋ถํ ๊ฐ์ ๋ฐ๋ผ๊ฐ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ ํ๋ธ์ RGB ์ฌ๋ผ์ด์ค. ์ผ์ชฝ์๋ ๊ตฌ๋ถ๊ตฌ๋ถํ ๊ฐ์ ๋ฐ๋ผ๊ฐ ๋ณผ ์ ์์ต๋๋ค.
์ด๋ค ๊ฒฝ์ฐ์๋ ์ง์ง ๋ฐ์ดํฐ์ ํ์ง์ ํตํด ํจ์ฌ ๋ ์ ๋ช
ํ ์ด๋ฏธ์ง๋ฅผ ์ป์ ์ ์์ต๋๋ค. ์ด๋ ํ์ฅ ์์
๋ฐฉ๋ฒ๋ก , ์์ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉ๋๋ ์ฅ๋น์ ๋ฐ๋ผ ๋ค๋ฆ
๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ ํ์ฒ ์์คํ
์ ์ผ๋ถ๋ง ๋ณผ ์ ์๋ ๊ฒ์ด ์๋๋ผ ํ์ฅ๋ ๊ณ ๊ฐ ์ ์ฒด๋ ๋ณผ ์ ์์ต๋๋ค.
์ง์ง ๋ฐ์ดํฐ ํ๋ธ(์ํ ์ฌ๋ผ์ด์ค)์ ์ธ ๊ฐ์ง ๊ตฌ์ฑ ์์๋ฅผ RGB๋ก ํผํฉํฉ๋๋ค. ๊น์ด๋ ์ฝ 2km.
์ฌ๋ผํ ํ ์ธ๊ทผ ๋ณผ๊ฐ ๊ฐ์ ์์ฑ ์ด๋ฏธ์ง
๊ฒฐ๋ก
Wolfram Mathematica๋ฅผ ์ฌ์ฉํ๋ฉด ์ง์ง ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๊ณ ๊ด๋ฌผ ํ์ฌ์ ๊ด๋ จ๋ ์์ฉ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ผ๋ฉฐ, GeologyIO ํจํค์ง๋ฅผ ์ฌ์ฉํ๋ฉด ์ด ํ๋ก์ธ์ค๊ฐ ๋์ฑ ํธ๋ฆฌํด์ง๋๋ค. ์ง์ง ๋ฐ์ดํฐ์ ๊ตฌ์กฐ๋ ๋ด์ฅ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ๊ณ์ฐ ์๋๋ฅผ ๋์ด๋ ๊ตฌ์กฐ์
๋๋ค(
์ถ์ฒ : habr.com