Täname blogi autorit tema ettekande eest
Sissejuhatus
See märkus on kirjutatud Wolfram Russian Technology Conference'i jälgedes Kirill Beloviga Wolfram Mathematica .
Peterburi Riikliku Majanduse Ülikooli sissepääsu juures tervitas osalejaid üliõpilaste seas abi, et nad ei eksiks ära. Registreerimise ajal jagati väikeseid suveniire (mingi helendav mänguasi, pastapliiats, Wolframi sümboolikaga kleebised). Lõuna ja kohvipaus olid samuti konverentsi kavas. Ma olen juba maininud grupi seinal maitsvat kohvi ja pirukaid – kokad olid tublid. Selle sissejuhatava osaga tahaksin rõhutada, et üritus ise, selle formaat ja toimumiskoht kannavad endas juba positiivseid emotsioone.

Ettekand, mille valmistasin koos Kirill Beloviga, kannab pealkirja „Wolfram Mathematica kasutamine rakendusgeofüüsika probleemide lahendamiseks. Spektriline analüüs seismiliste andmete kohta või „kuhu jooksid iidsete jõgede“. Ettekande sisu katab kaks osa: esiteks, see on olemasolevate algoritmide kasutamine
geofüüsikaliste andmete analüüsimiseks, ja teiseks, kuidas geofüüsikalised andmed Wolfram Mathematica'sse paigutada. Seismikauurimine
Seismiline uurimine
Esiteks on vaja teha väike ekskurs geofüüsikasse. Geofüüsika on teadus, mis uurib kivimite füüsikalisi omadusi. Kuna kivimid omavad erinevaid omadusi: elektrilisi, magnetilisi, elastsuse, siis on ka vastavad geofüüsika meetodid: elektrilised uuringud, magnetilised uuringud, seismilised uuringud… Käesolevas artiklis käsitleme lähemalt ainult seismilisi uuringuid. Seismilised uuringud on peamine meetod nafta ja gaasi leidmiseks. Meetod põhineb elastsete kõikumiste tekitamisel ja sellele järgneva vastuse registreerimisel kivimite peal, mis moodustavad uuritava ala. Kõikumiste tekitamine toimub maal (dünaamiidi või mitteplahvatusohtlike vibratsiooniallikate kaudu) või merel (pneumopüsside abil). Elastsed kõikumised levivad läbi kivimite kihistiku, murdes ja peegeldudes kihtide piirimistel, millel on erinevad omadused. Peegeldunud lained naasevad pinnale ja registreeritakse geofonidega maal (tavaliselt on need elektrodünaamilised seadmed, mis põhinevad magneti liikumisel, mis on riputatud spiraali) või hüdrofonidega merel (need põhinevad piezoefektil). Lainete saabumise aja järgi saab hinnata geoloogiliste kihtide sügavust.
Seismilaev vedab varustust

Pneumopüss tekitab elastseid kõikumisi

Lained läbivad kivimite kihistiku ja registreeritakse hüdrofonide abil

Teaduslik uurimislaev geofüüsiliste uuringute jaoks "Ivan Gubkin" Peterburis Blagoveštšenski silla sadamas

Seismilise signaali mudel
Kivimitel on erinevad füüsikalised omadused. Seismiliste uuringute jaoks on eelkõige olulised elastsed omadused — elastsete kõikumiste leviku kiirus ja tihedus. Kui kaks kihti omavad samu või sarnaseid omadusi, siis laine ei "tunneta" piiri nende vahel. Kui aga lainete kiirus kihtides on erinev, siis tekib kihtide piiril peegeldus. Mida suurem on omaduste erinevus, seda intensiivsem on peegeldus. Selle intensiivsus määratakse peegelduskoefitsiendi (rc) järgi:

kus ρ — kivimite tihedus, ν — lainete kiirus, 1 ja 2 tähistavad ülemist ja alumist kihti.
Üks lihtsamaid ja sageli kasutatavaid seismiliste signaalide mudeleid on konvolutsioonimudel, kus registreeritud seismiline rada esitatakse kui järjestuse peegelduskoefitsientide konvolutsioon zondimisimpulssiga:
![]()
kus s(t) on seismiline rada, st kõik, mida on registreerinud hydrofon või geofon kindla registreerimise aja jooksul, w(t) on signaal, mida genereerib pneumopüss, n(t) on juhuslik müra.
Kalkuleerime näitena sünteetilise seismilise raja. Algsignaalina kasutame seismiline uurimises laialdaselt kasutatavat Rickeri impulssi.
length=0.050; (*Signaali pikkus*)
dt=0.001;(*Signaali proovide määr*)
t=Range[-length/2,(length)/2,dt];(*Signaali aeg*)
f=35;(*Keskne sagedus*)
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["Esialgne wavelet",Black,20],
LabelStyle->Directive[Black,Italic],
FillingStyle->{White,Black},ImageSize->Large,InterpolationOrder->2]Algne seismiline impulss

Seame kaks piiri sügavustes 300 ms ja 600 ms, samas kui peegelduskoefitsiendid on juhuslikud numbrid.
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["Peegelduskoefitsiendid",Black,20],
LabelStyle->Directive[Black,Italic]]Peegelduskoefitsientide järjestus

Kalkuleerime ja kuvame seismilise raja. Kuna peegelduskoefitsiendid on erinevate märkidega, saame seismilisel rajal kaks märkide vahetumist.
traceExamle=ListConvolve[wavelet[[1;;;;1]],rcExample];
ListPlot[traceExamle,
PlotStyle->Black,Filling->0,Frame->True,Axes->False,
PlotLabel->Style["Seismiline rada",Black,20],
LabelStyle->Directive[Black,Italic]]Modelleeritud rada

Selle näite puhul tuleb märkida — tegelikult määratakse kihtide sügavus kindlasti meetrites, kuid seismilise raja kalkulatsioon toimub ajapiirkonnas. Õigem oleks määrata sügavused meetrites ja arvutada saabumise ajad, teades kiirusest kihtides. Selles juhus otsustasin kohe kihtide määrata ajateljel.
Kui rääkida välitöödest, siis nende vaatlemise tulemusena registreeritakse tohutul hulgal sarnaseid ajajadasid (seismilised jäljed). Näiteks uurides 25 km pika ja 15 km laia ala, kus iga jälg iseloomustab ruumi suurusega 25x25 meetrit (sellist ruumi nimetatakse bin-ks), sisaldab lõplik andmekogum 600000 jälge. Aja diskretsiooniga 1 ms ja salvestusaega 5 sekundit, moodustab lõplik andmefail üle 11 GB, samas kui algse „toore“ materjali maht võib ulatuda sadadesse gigabaitidesse.
Kuidas nendega töötada ?
Pakett
Paketis arendamine algas VK gruppi venekeelse toe seinal. Tänu kogukonna vastustele leiti lahendus väga kiiresti. Ja see kasvas tõsise arenduse suunas. Vastav oli isegi moderaatorite poolt esile tõstetud. Praegu toetab pakett järgmiste andmetüüpidega töötamist, mida kasutatakse aktiivselt geoloogia valdkonnas:
- kaardistusandmete import ZMAP ja IRAP formaadis
- mõõtmiste import kaevandustes LAS formaadis
- seismiliste failide sissesisestamine ja väljund
Paketis vajalik installimiseks tuleb järgida juhiseid kogutud paketi laadimise lehelt, s.t. teostada järgmine kood igas :
If[PacletInformation["GeologyIO"] === {}, PacletInstall[URLDownload[
"https://wolfr.am/FiQ5oFih",
FileNameJoin[{CreateDirectory[], "GeologyIO-0.2.2.paclet"}]
]]]Pärast seda installitakse pakett vaikimisi kausta, mille tee saab järgmiselt:
FileNameJoin[{$UserBasePacletsDirectory, "Repository"}]Näiteks demonstreerime paketi põhifunktsioone. Kõne toimub traditsiooniliselt pakettide jaoks Wolfram Language'is:
Get["GeologyIO`"]Pakett arendatakse kasutades . See võimaldab paketi põhifunktsiooni dokumentatsiooni kaasata, mis ei erine esituse formaadi poolest Wolfram Mathematica dokumentatsioonist ja varustada paketti testfailidega esmakordseks tutvumiseks.


Selline fail on näiteks fail „Marmousi.segy“ - see on sünteetiline geoloogilise lõike mudel, mille on välja töötanud Prantsuse nafta instituut. Kasutades seda mudelit testivad arendajad oma lainete modelleerimise, andmete töötlemise, seismiliste radade inversiooni jms algoritme. Isegi mudel Marmousi talletatakse hoidlas, kust allalaaditi ka pakett. Faili saamiseks käivitage järgmine kood:
If[Not[FileExistsQ["Marmousi.segy"]],
URLDownload["https://wolfr.am/FiQGh7rk", "Marmousi.segy"];]
marmousi = SEGYImport["Marmousi.segy"]Importimise tulemus - objekt SEGYData

Formaat SEGY eeldab erineva teabe salvestamist vaatlustest. Esiteks, need on tekstilised kommentaarid. Siia kantakse teave tööde toimimise koha, mõõtmiste läbi viinud ettevõtete nimede jne kohta. Meie juhul kutsutakse see pealkiri välja päringuga võtmega TextHeader. Siin on toodud lühendatud tekstipealkiri:
Short[marmousi["TextHeader"]]„Marmousi andmefail genereeriti Instituudis… minimaalne kiirus 1500 m/s ja maksimaalne 5500 m/s)“
Geoloogilist mudelit saab kuvada, pöördudes seismiliste radade poole võtmega „traces“ (paketi üheks omaduseks on võtmete registrist sõltumatu kasutamine):
ArrayPlot[Transpose[marmousi["traces"]], PlotTheme -> "Detailed"]Mudel Marmousi

Praegu võimaldab pakett samuti andmete osalist laadimist suurtest failidest, võimaldades seega töötlemist failide puhul, mille suurus võib ulatuda kümnetesse gigabaitidesse. Paketi funktsioonide hulka kuuluvad ka andmete eksportimise funktsioonid .segy formaati ja osaline kirjutamine faili lõppu.
Eraldi tasub märkida paketi funktsionaalsust keerukate .segy-failide töötlemisel. Kuna see võimaldab mitte ainult pöörduda võtmete ja indeksite kaudu individuaalsete radade, pealkirjade poole, vaid ka neid muuta ja seejärel faili salvestada. Paljud tehnilised detailid GeologyIO rakendamisest ületavad selle artikli raame ning väärivad tõenäoliselt eraldi kirjeldamist.
Spektraalanalüüsi aktuaalsus seismiliste uuringute valdkonnas
Seismilised materjalide importimine Wolfram Mathematica'sse võimaldab kasutada integreeritud signaalitöötlusfunktsioone eksperimentaalsetele andmetele. Kuna iga seismiline rada esindab ajajoonet, on nende uurimise peamine tööriist spektraalanalüüs. Seismiliste andmete sageduskompleksi analüüsi eeldusteks on näiteks järgmised:
- Erinevate laine tüüpide sageduskompleks on erinev. See võimaldab eristada kasulikke laineid ja summutatud segalaineid.
- Mullaproovide omadused, nagu poorsus ja küllastus, võivad mõjutada sageduskompleksi. See võimaldab eristada paremate omadustega kivimeid.
- Erineva paksusega kihid põhjustavad anomaaliaid erinevates sagedusvahemikes.
Kolmas punkt on selles artiklis peamine. Allpool on näidis kood, et arvutada seismilisi radu muutuva paksusega kihi puhul — kolmnurksete mudelite puhul. Seda mudelit uuritakse traditsiooniliselt seismilise uurimise käigus, et analüüsida interferentsiefekte, kui paljude kihtide peegeldunud lained üksteisele kattuvad.
nx=200;(* Grid punktide arv X suunas*)
ny=200;(* Grid punktide arv Y suunas*)
T=2;(*Kokku edasiviimise aeg*)
(*Kiirus ja tihedus*)
modellv=Table[4000,{i,1,ny},{j,1,nx}];(* P-laine kiirus m/s*)
rho=Table[2200,{i,1,ny},{j,1,nx}];(* Tihedus g/cm³, pidev tihedus*)
Table[modellv[[150-Round[i*0.5];;,i]]=4500;,{i,1,200}];
Table[modellv[[;;70,i]]=4500;,{i,1,200}];
(*Mude joonistamine*)
MatrixPlot[modellv,PlotLabel->Style["Layer model",Black,20],
LabelStyle->Directive[Black,Italic]]Kaluge kihistiku mudel

Laine kiirus kihis on 4500 m/s, väljaspool kihti 4000 m/s ning tihedus on võetud konstantseks 2200 g/cm³. Sellise mudeli jaoks arvutame peegeldumisnäitajad ja seismilised rajad.
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]Seismilised rajad kolmnurkse mudeli jaoks

Selle seismiliste jälgede järjestust, mis on kujutatud sellel pildil, nimetatakse seismiliseks lõikeks. Nagu võib märgata, võib selle tõlgendust teostada ka intuitiivsel tasemel, kuna peegeldunud lainete geomeetria vastab selgelt varasemale mudelile. Kui jälgi lähemalt analüüsida, võib märkida, et 1. kuni umbes 30. jäljega nad ei eristu — peegeldumine kihistumise katest ja põhjast ei kattu. Alates 31. jäljest hakkavad peegeldused interferentsi näitama. Ja kuigi mudelis peegelduskoefitsiendid ei muutu horisontaalselt — seismilised jäljed muudavad oma intensiivsust kihistumise paksuse muutmisel.
Vaadakem peegeldumise amplituudi kihistumise ülemisest piirist. Alates 60. jäljest hakkab peegeldumise intensiivsus tõusma ja 70. jäljel saavutab see maksimaalse taseme. Nii ilmneb lainete interferents katuse ja põhja vahel, tuues mõnel juhul kaasa olulisi seismilise salvestuse anomaaliaid.
ListLinePlot[GaussianFilter[Abs[traces[[All,46]]],3][[;;;;2]],
InterpolationOrder->2,Frame->True,PlotStyle->Black,
PlotLabel->Style["Peegeldumise amplituud",Black,20],
LabelStyle->Directive[Black,Italic],
PlotRange->All]Graafik peegeldunud laine amplituudist kiilu ülemise serva suhtes

On loogiline, et kui signaal on madalama sagedusega, siis interferents hakkab avalduma suuremate kihistumise paksuste korral, aga kõrgsageduselise signaali korral tekib interferents väiksemate paksuste korral. Järgmine koodifragment loob signaali sagedustega 35 Hz, 55 Hz ja 85 Hz.
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["Waveletide kogum",Black,20],
LabelStyle->Directive[Black,Italic],
ImageSize->Large,InterpolationOrder->2]Algsignaalide kogum sagedustega 35 Hz, 55 Hz, 85 Hz

Tehes seismiliste jälgede arvutusi ja koostades peegeldunud laine amplituudi graafikud, saame näha, et erinevate sageduste korral ilmneb anomaalia erinevates kihistumise paksustes.
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]Peegli peegli peegli peegli laine amplituudid erinevatelt sagedustelt

Võimalus järeldada kihi paksusest seismiliste vaatluste tulemustest on äärmiselt kasulik, kuna üks peamisi ülesandeid naftamaardlate uurimisel on määrata kõige paljulubvamad kohad puurkaevu rajamiseks (st need alad, kus kiht on suurem). Lisaks võivad geoloogilises lõikes esineda sellised objektid, mille geneesi tõttu toimub kihi paksuste järsk muutus. See teeb spektraalanalüüsi tõhusaks vahendiks nende uurimiseks. Artikli järgmises osas vaatleme selliseid geoloogilisi objekte lähemalt.
Katselised andmed. Kuidas ja kust need on saadud?
Artiklis analüüsitavad materjalid on saadud Lääne-Siberi territooriumilt. See piirkond, nagu kõik kindlasti teavad, on meie riigi peamine nafta tootmispiirkond. Aktiivne naftamaardlate uurimine algas regioonis 60. aastatel. Peamine naftamaardlate otsimise meetod on seismiline uurimine. Huvi pakub satelliitpildid sellest piirkonnast. Väikese mastaabi korral võib märgata tohutut hulka sooja ja järvi, suurendades kaarti, on näha puurkaevukohtade rühmi ja maksimum suurendades paika tuleb välja ka radade profile, mida kasutatakse seismiliste vaatluste tegemiseks.
Yandex kaardilt saadud satelliitpilt — Novyabrsk linna piirkond

Rühmade platvormide võrgustik ühel naftamaardlastest

Naftat sisaldavad kivid Läänesiberi piirkonnas asuvad laias sügavusvahemikus — 1 km kuni 5 km. Peamine kivi, mis sisaldab naftat, moodustus jurapüree ja kriidiajastul. Juras ajastu on tõenäoliselt paljudele tuttav sama nime kandva filmi kaudu. erinevalt kaasaegsest. Briti entsüklopeedias on olemas paleokaardiseeria, mis iseloomustab igat geoloogilist ajastut.
Praegune aeg

Juura ajastu

Pange tähele, et juura ajal esindas Lääne-Siberi territoorium mereäärset randa (maapind, mida lõikavad jõed ja madal meri). Kuna kliima oli mugav, võib eeldada, et selle aja tüüpiline maastik nägi välja järgmine:
Siber juura ajastul

Selles pildis on meie jaoks olulised mitte niivõrd loomad ja linnud, kuivõrd tagaplaanil oleva jõe kujutamine. Jõgi on see geoloogiline objekt, millele me varem tähelepanu pöörasime. Asi on selles, et jõgede tegevus võimaldab hea sorteeringuga liivakivide kogunemist, mis muutuvad seejärel nafta reservoiriks. Need reservoirid võivad omada kummalisi, keerulisi kujundeid (nagu ka jõe vool) ja neil on muutuva paksusega — kallaste lähedal on paksus väike, ent voolu keskosas või keerispiirkondades suureneb. Nii et juura ajal kujundatud jõed asuvad praegu umbes kolme kilomeetri sügavusel ja on naftareservuaaride otsimise objektiks.
Eksperimentaalsed andmed. Töötlemine ja visualiseerimine
Teeme kohe märkuse seoses artiklis näidatud seismiliste materjalidega — arvestades analüüsiks kasutatud andmemahtu, on artikli tekstis kajastatud ainult originaalsete seismiliste radade fragment. See võimaldab kõigil huvilistel reproduseerida esitatud arvutusi.
Töödeldes seismilisi andmeid kasutab geofüüsik tavaliselt spetsialiseeritud tarkvara (on mitmeid valdkonna liidreid, kelle arendustöid aktiivselt kasutatakse, näiteks Petrel või Paradigm), mis võimaldab analüüsida erinevat tüüpi andmeid ja omab mugavat graafilist kasutajaliidest. Hoolimata kõigest sellisest mugavusest, on neil tarkvaradel ka oma puudused — näiteks kaasaegsete algoritmide integreerimine stabiilsetesse versioonidesse võtab palju aega ja arvutuste automatiseerimise võimalused on tavaliselt piiratud. Sellises olukorras on väga mugav kasutada arvutuslike süsteemide ja kõrgemate programmeerimiskeelte abil, mis võimaldavad kasutada suurt algoritmilist baasi ning samal ajal võtavad enda peale palju rutiinseid ülesandeid. Wolfram Mathematica'is põhineb seismiliste andmete töötlemine just sellisel põhimõttel. Ei ole mõistlik kirjutada rikkalikku funktsionaalsust interaktiivseks andmete töötlemiseks - olulisem on tagada laadimine üldiselt aktsepteeritud formaadist, rakendada soovitud algoritme ja laadida andmed tagasi välisesse formaati.
Järgides ettepanekut, laadime originaalsed seismilised andmed ja kuvame need :
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]Laaditud ja sellisel viisil imporditud andmed on rajad, mis on registreeritud alal suurusega 10 korda 5 kilomeetrit. Kui andmed on saadud kolmemõõtmelise seismilise uuringu meetodi abil (lainete registreerimine toimub mitte piki eraldi geofüüsilisi profiile, vaid kogu pinnal korraga), on võimalik saada seismiliste andmete kuupe. Need on kolmemõõtmelised objektid, mille vertikaalsed ja horisontaalsed lõiked võimaldavad detailselt uurida geoloogilist keskkonda. Antud näites tegeleme just kolmemõõtmeliste andmetega. Mõningaid andmeid saame tekstipealkirjast, näiteks nii
StringPartition[seismic3DSEGY["textheader"], 80] // TableFormC 1 THIS IS DEMO FILE FOR GEOLOGYIO PACKAGE TEST
C 2
C 3
C 4
C 5 DATE USER NAME: WOLFRAM USER
C 6 SURVEY NAME: SOMEWHERE IN SIBERIA
C 7 FILE TYPE 3D SEISMIC VOLUME
C 8
C 9
C10 Z RANGE: FIRST 2200M LAST 2400M
Selle andme komplekti peaks olema piisavalt, et demonstreerida andmeanalüüsi põhietappe. Failis on jooned järjestikku ja igaüks neist näeb välja umbes nagu järgmine joonis - see on peegeldunud lainete amplituudide jaotus vertikaalsel teljel (sügavuse teljel).
ListLinePlot[seismic3DSEGY["traces"][[100]], InterpolationOrder -> 2,
PlotStyle -> Black, PlotLabel -> Style["Seismiline joon", Black, 20],
LabelStyle -> Directive[Black, Italic], PlotRange -> All,
Frame -> True, ImageSize -> 1200, AspectRatio -> 1/5]Üks seismilise lõike jooned

Teades, kui palju jooni on igas suunas uuritavas piirkonnas, saab moodustada kolmemõõtmelise andme massiivi ja kuvada seda funktsiooni Image3D[] abil.
traces=seismic3DSEGY["traces"];
startIL=1050;EndIL=2000;stepIL=2; (*X-koordinaat alguse ja lõpu jaoks ja joonte samm*)
startXL=1165;EndXL=1615;stepXL=2; (*Y-koordinaat alguse ja lõpu jaoks ja joonte samm*)
numIL=(EndIL-startIL)/stepIL+1; (*joonte arv X soonel*)
numXL=(EndXL-startXL)/stepIL+1; (*joonte arv Y soonel*)
Image3D[ArrayReshape[Abs[traces/Max[Abs[traces[[All,1;;;;4]]]]],{numIL,numXL,101}],ViewPoint->{-1, 0, 0},Background->RGBColor[0,0,0]]Kolmemõõtmeline seismiliste andmete kuubiku pilt. (Vertikaaltel - sügavus)

Kui geoloogilised objektid, mis on huvipakkuvad, toodavad intensiivseid seismilisi anomaaliaid, saab kasutada läbipaistvuse visualiseerimist. „Mitteolulised” salvestussektorid saab teha nähtamatuks, jättes nähtavaks ainult anomaaliad. Wolfram Mathematica's saab seda teha ja .
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]Seismiliste andmete kuubiku pilt, kasutades funktsioone Opacity[] ja Raster3D[]

Nagu sünteetilises näites, võib originaalse kuubiku lõikel tuvastada teatud geoloogilised piirid (kihid) muutuva reljeefi korral.
Peamine spektraalanalüüsi tööriist on Fourier' muundamine. Selle abil on võimalik hinnata iga trajektoori või trajektooride rühma amplituudifrekventsi spektrit. Kuid pärast andmete teisendamist frekentsiala kaob teave selle kohta, millistel aegadel (loe: sügavustel) muutub sagedus. Selleks, et lokaliseerida signaali muudatused ajateljel (sügavuse teljel), kasutatakse akende Fourier' muundamist ja lainevõrgu lagundamist. Käesolevas artiklis kasutatakse lainevõrgu lagundamist. Lainevõrgu analüüsi tehnoloogiat on aktiivselt rakendatud seismilise uurimise alal 90ndatel. Eeliseks akna Fourier' muundamise ees on parem ajaline eristusvõime.
Järgmise koodifragmendi abil on võimalik teha lagunemist üksikute komponentideks ühe seismilise trajektoori puhul:
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]Trajektoori lagunemine komponentideks

Selleks, et hinnata, kuidas on peegeldumise energia jaotatud erinevates lainete saabumise aegades, kasutatakse skalogramme (analoog spekrogrammile). Tavaolukorras ei ole tavaliselt vajalik analüüsida kõiki komponente. Üldiselt valitakse madala, keskmise ja kõrge sagedusega komponendid.
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->{"Aeg","Sagedus(Hz)"},LabelStyle->Directive[Black,Bold,14],
ColorFunction->"RustTones",ImageSize->Large]Skalogramm. Funktsiooni tulemus

Wolfram Language'is kasutatakse lainevõrgu muundamiseks funktsiooni . Selle funktsiooni rakendamine kogu trajektooride komplekti puhul toimub funktsiooni abil . Siinkohal on oluline märkida ühe Wolfram Mathematica tugevaima külje, nimelt võimalust kasutada paralleelsust. . Antud näites ei ole paralleelsuse kasutamine vajalik — andmehulk ei ole suur, kuid blokeeritud andmekogumite töötlemisel, mis sisaldavad sadu tuhandeid trajektoore, on see hädavajalik.
tracesCWD=Table[Map[Hilbert[#,0]&/,Re[ContinuousWaveletTransform[traces[[i]]][[1]]][[{13,15,18}]]],{i,1,Length@traces}]; Funktsiooni rakendamise järel Uued andmekogumid ilmuvad vastavalt valitud sagedustele. Ülaltoodud näites on need sagedused: 38 Hz, 33 Hz, 27 Hz. Sageduste valik põhineb kõige enam testimistest - saadakse tulemuslikud kaardid erinevate sageduskombinatsioonide jaoks ja valitakse geolooge silmas pidades kõige informatiivsem.
Kui tulemusi on vaja jagada kolleegidega või esitada need kliendile, saab kasutada paketi GeologyIO funktsiooni SEGYExport[]
outputdata=seismic3DSEGY;
outputdata["traces",1;;-1]=tracesCWD[[All,3]];
outputdata["textheader"]="Lainete lagundamise tulemus";
outputdata["binaryheader","NumberDataTraces"]=Length[tracesCWD[[All,3]]];
SEGYExport["D:result.segy",outputdata];Kui on olemas kolm sellist kuubikut (madalsageduslik, keskmisesageduslik ja kõrgsageduslik komponent), kasutatakse tavaliselt RGB segamist andmete ühiseks visualiseerimiseks. Iga komponent saab oma värvi - punane, roheline, sinine. Wolfram Mathematica-s saab seda teha funktsiooni abil .
Tulemuseks saadakse pildid, mille põhjal saab teha geoloogilisi tõlgendusi. Meandreid, mis on lõikes fikseeritud, saab kasutada paleojõgede kontuurimiseks, mis võivad suure tõenäosusega olla reservuaarideks ja sisaldada nafta varu. Kaasaegsete analoogide otsimine ja analüüs sellise jõgesüsteemi puhul võimaldab tuvastada kõige perspektiivikamaid meandri osi. Jõgede tõelised vood on iseloomustatud paksude hästi sorteeritud liivakivikihtidega ning on hea nafta reservuaar. Alad „nööriliste” anomaaliate väljaspool on sarnased kaasaegsetele üleujutatud settekihtidele. Üleujutatud settekihti esindavad peamiselt savised kivimid ja puurimine nendesse piirkondadesse ei ole efektiivne.
RGB andmekuubi lõige. Keskosas (veidi vasakule keskpunktist) on näha meandreid, mis moodustavad jõe.

RGB andmekuubi lõige. Vasakus osas on näha meandreid, mis moodustavad jõe.

Mõnel juhul võimaldab seismiliste andmete kvaliteet saada oluliselt selgemaid pilte. See sõltub välitööde metoodikast, seadmetest ja rakendatud müra vähendamise algoritmidest. Sellistel juhtudel on nähtavad mitte ainult jõe süsteemide fragmendid, vaid ka pikad paleojõed.
RGB kolme seismiliste andmete komponendi segamine (horisontaalne lõige). Sügavus umbes 2 km.

Satelliidi pilt Volga jõest Saratovi piirkonnas.

Kokkuvõte
Wolfram Mathematica võimaldab analüüsida seismilisi andmeid ja lahendada rakendusülesandeid, mis on seotud maavarade otsimisega. GeologyIO pakett muudab selle protsessi mugavamaks. Seismiliste andmete struktuur on selline, et sisseehitatud kiirendamisviiside kasutamine (, ,…) on väga efektiivne ning võimaldab töödelda suuri andmehulkade. Oluline on ka GeologyIO paketi andmete salvestamise omadused. Muide, seda paketti saab kasutada mitte ainult rakenduslikus seismilises uurimises. Peaaegu samasuguseid andmeid kasutatakse georadaritehnoloogias ja seismoloogias. Kui teil on ettepanekuid, kuidas tulemusi parandada, milliseid signaalianalüüsi algoritme Wolfram Mathematica arsenalis saaks nende andmete puhul rakendada või kui teil on kriitilisi märkusi - jätke kommentaarid.
Allikas: habr.com
