Wolfram Mathematica en Xeofísica

Grazas ao autor do blog Antón Ekimenko polo seu informe

Introdución

Esta nota foi escrita a raíz da conferencia Conferencia de tecnoloxía rusa Wolfram e contén un resumo do informe que entreguei. O evento tivo lugar en xuño en San Petersburgo. Tendo en conta que traballo a un bloque do sitio da conferencia, non puiden evitar asistir a este evento. En 2016 e 2017 escoitei os relatorios de congresos e este ano fixen unha presentación. En primeiro lugar, apareceu un tema interesante (paréceme) co que estamos a desenvolver Kirill Belov, e en segundo lugar, despois dun longo estudo da lexislación da Federación Rusa sobre a política de sancións, na empresa onde traballo apareceron ata dúas licenzas. Wolfram Mathematica.

Antes de pasar ao tema da miña intervención, gustaríame destacar a boa organización do evento. A páxina de visita da conferencia utiliza unha imaxe da catedral de Kazán. A catedral é un dos principais atractivos de San Petersburgo e é moi claramente visible dende o salón no que se desenvolveu a conferencia.

Wolfram Mathematica en Xeofísica

Na entrada da Universidade Económica Estatal de San Petersburgo, os participantes foron atendidos por asistentes de entre os estudantes - non lles permitiron perderse. Durante o rexistro, entregáronse pequenos recordos (un xoguete: unha punta intermitente, un bolígrafo, adhesivos con símbolos de Wolfram). O xantar e as pausas café tamén se incluíron na programación da conferencia. Xa notei sobre o delicioso café e as empanadas na parede do grupo: os chefs son xeniais. Con esta parte introdutoria quero subliñar que o propio evento, o seu formato e localización xa están a traer emocións positivas.

O informe que preparamos Kirill Belov e min chámase "Uso de Wolfram Mathematica para resolver problemas de xeofísica aplicada". Análise espectral de datos sísmicos ou "onde corrían os ríos antigos". O contido do informe abrangue dúas partes: en primeiro lugar, o uso dos algoritmos dispoñibles en Wolfram Mathematica para analizar datos xeofísicos e, en segundo lugar, así é como poñer os datos xeofísicos en Wolfram Mathematica.

Exploración sísmica

Primeiro cómpre facer unha pequena excursión á xeofísica. A xeofísica é a ciencia que estuda as propiedades físicas das rochas. Pois ben, dado que as rochas teñen propiedades diferentes: eléctricas, magnéticas, elásticas, existen métodos de xeofísica correspondentes: prospección eléctrica, prospección magnética, prospección sísmica... No contexto deste artigo, só trataremos a prospección sísmica con máis detalle. A exploración sísmica é o principal método de busca de petróleo e gas. O método baséase na excitación de vibracións elásticas e o posterior rexistro da resposta das rochas que compoñen a zona de estudo. As vibracións son excitadas en terra (con dinamita ou fontes de vibracións non explosivas de vibracións elásticas) ou no mar (con pistolas de aire). As vibracións elásticas propáganse pola masa rochosa, sendo refractadas e reflectidas nos límites de capas con diferentes propiedades. As ondas reflectidas volven á superficie e son rexistradas por xeófonos na terra (xeralmente dispositivos electrodinámicos baseados no movemento dun imán suspendido nunha bobina) ou por hidrófonos no mar (en base ao efecto piezoeléctrico). No momento da chegada das ondas, pódese xulgar a profundidade das capas xeolóxicas.

Equipos de remolque de buques sísmicos
Wolfram Mathematica en Xeofísica

A pistola de aire excita vibracións elásticas
Wolfram Mathematica en Xeofísica

As ondas atravesan a masa rochosa e son rexistradas por hidrófonos
Wolfram Mathematica en Xeofísica

Buque de investigación xeofísica "Ivan Gubkin" no peirao preto da ponte Blagoveshchensky en San Petersburgo
Wolfram Mathematica en Xeofísica

Modelo de sinal sísmico

As rochas teñen propiedades físicas diferentes. Para a exploración sísmica, as propiedades elásticas son principalmente importantes: a velocidade de propagación das vibracións elásticas e a densidade. Se dúas capas teñen propiedades iguais ou similares, entón a onda "non notará" o límite entre elas. Se as velocidades das ondas nas capas difiren, a reflexión producirase no límite das capas. Canto maior sexa a diferenza de propiedades, máis intensa será a reflexión. A súa intensidade virá determinada polo coeficiente de reflectancia (rc):

Wolfram Mathematica en Xeofísica

onde ρ é a densidade da rocha, ν é a velocidade da onda, 1 e 2 indican as capas superior e inferior.

Un dos modelos de sinal sísmico máis sinxelo e usado con maior frecuencia é o modelo de convolución, cando a traza sísmica rexistrada se representa como resultado da convolución dunha secuencia de coeficientes de reflexión cun pulso de sondeo:

Wolfram Mathematica en Xeofísica

onde s(t) - traza sísmica, é dicir. todo o que foi gravado por un hidrófono ou xeófono durante un tempo de gravación fixo, w(t) - o sinal xerado pola pistola de aire comprimido, n(t) - ruído aleatorio.

Calculemos como exemplo unha traza sísmica sintética. Utilizaremos como sinal inicial o pulso de Ricker, moi utilizado na exploración sísmica.

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]

Impulso sísmico inicial
Wolfram Mathematica en Xeofísica

Estableceremos dous límites a profundidades de 300 ms e 600 ms, e os coeficientes de reflexión serán números aleatorios

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]]

Secuencia de coeficientes de reflexión
Wolfram Mathematica en Xeofísica

Calculemos e mostremos a traza sísmica. Dado que os coeficientes de reflexión teñen signos diferentes, obtemos dúas reflexións alternas sobre a traza sísmica.

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]]

Pista simulada
Wolfram Mathematica en Xeofísica

Para este exemplo, é necesario facer unha reserva: en realidade, a profundidade das capas determínase, por suposto, en metros, e o cálculo da traza sísmica prodúcese para o dominio do tempo. Sería máis correcto fixar as profundidades en metros e calcular os tempos de chegada coñecendo as velocidades nas capas. Neste caso, configurei inmediatamente as capas no eixe do tempo.

Se falamos de investigación de campo, como resultado de tales observacións rexístranse un gran número de series temporais similares (rastros sísmicos). Por exemplo, cando se estuda un sitio de 25 km de longo e 15 km de ancho, onde, como resultado do traballo, cada trazo caracteriza unha cela que mide 25 x 25 metros (esa cela chámase bin), a matriz de datos final conterá 600000 trazos. Cun tempo de mostraxe de 1 ms e un tempo de gravación de 5 segundos, o ficheiro de datos final será de máis de 11 GB e o volume do material "en bruto" orixinal pode ser de centos de gigabytes.

Como traballar con eles Wolfram Mathematica?

Paquete Xeoloxía IO

Comezou o desenvolvemento do paquete pregunta no muro VK do grupo de apoio rusofalante. Grazas ás respostas da comunidade, atopouse unha solución moi rapidamente. E, como resultado, converteuse nun desenvolvemento serio. Correspondente Publicación no muro da comunidade de Wolfram Incluso foi marcado polos moderadores. Actualmente, o paquete admite traballar cos seguintes tipos de datos que se usan activamente na industria xeolóxica:

  1. importación de datos de mapas en formatos ZMAP e IRAP
  2. importación de medidas en pozos de formato LAS
  3. entrada e saída do formato de ficheiros sísmicos SEGY

Para instalar o paquete, debes seguir as instrucións da páxina de descarga do paquete montado, é dicir. executa o seguinte código en calquera Caderno de matematicas:

If[PacletInformation["GeologyIO"] === {}, PacletInstall[URLDownload[
    "https://wolfr.am/FiQ5oFih", 
    FileNameJoin[{CreateDirectory[], "GeologyIO-0.2.2.paclet"}]
]]]

Despois diso, o paquete instalarase no cartafol predeterminado, cuxo camiño pódese obter do seguinte xeito:

FileNameJoin[{$UserBasePacletsDirectory, "Repository"}]

Como exemplo, demostraremos as principais capacidades do paquete. A chamada realízase tradicionalmente para paquetes no Wolfram Language:

Get["GeologyIO`"]

O paquete desenvólvese usando Banco de traballo Wolfram. Isto permítelle acompañar a funcionalidade principal do paquete con documentación, que en termos de formato de presentación non difire da propia documentación de Wolfram Mathematica, e proporcionar ao paquete ficheiros de proba para o primeiro coñecido.

Wolfram Mathematica en Xeofísica

Wolfram Mathematica en Xeofísica

Tal ficheiro, en particular, é o ficheiro "Marmousi.segy" - este é un modelo sintético dunha sección xeolóxica, que foi desenvolvido polo Instituto Francés de Petróleo. Usando este modelo, os desenvolvedores proban os seus propios algoritmos para modelado de campos de ondas, procesamento de datos, inversión de trazos sísmicos, etc. O propio modelo de Marmousi gárdase no repositorio desde onde se descargou o propio paquete. Para obter o ficheiro, executa o seguinte código:

If[Not[FileExistsQ["Marmousi.segy"]], 
URLDownload["https://wolfr.am/FiQGh7rk", "Marmousi.segy"];]
marmousi = SEGYImport["Marmousi.segy"]

Resultado de importación: obxecto SEGYData
Wolfram Mathematica en Xeofísica

O formato SEGY consiste en almacenar información variada sobre observacións. En primeiro lugar, son comentarios de texto. Inclúe información sobre a localización da obra, os nomes das empresas que realizaron as medicións, etc. No noso caso, esta cabeceira chámase mediante unha solicitude coa chave TextHeader. Aquí tes unha cabeceira de texto abreviada:

Short[marmousi["TextHeader"]]

"O conxunto de datos de Marmousi foi xerado no Instituto... unha velocidade mínima de 1500 m/s e un máximo de 5500 m/s)"

Podes mostrar o modelo xeolóxico real accedendo ás trazas sísmicas mediante a tecla "rastros" (unha das características do paquete é que as claves non distinguen maiúsculas e minúsculas):

ArrayPlot[Transpose[marmousi["traces"]], PlotTheme -> "Detailed"]

Modelo Marmousi
Wolfram Mathematica en Xeofísica

Actualmente, o paquete tamén permite cargar datos en partes de ficheiros grandes, o que permite procesar ficheiros cuxo tamaño pode alcanzar decenas de gigabytes. As funcións do paquete tamén inclúen funcións para exportar datos a .segy e engadir parcialmente ao final do ficheiro.

Por separado, paga a pena notar a funcionalidade do paquete cando se traballa coa estrutura complexa de ficheiros .segy. Xa que permite non só acceder a trazos e cabeceiras individuais mediante claves e índices, senón tamén cambialos e despois escribilos nun ficheiro. Moitos dos detalles técnicos da implementación de GeologyIO están fóra do alcance deste artigo e probablemente merecen unha descrición separada.

Relevancia da análise espectral na exploración sísmica

A posibilidade de importar datos sísmicos a Wolfram Mathematica permítelle utilizar a funcionalidade de procesamento de sinal integrada para os datos experimentais. Dado que cada trazo sísmico representa unha serie temporal, unha das principais ferramentas para estudalos é a análise espectral. Entre os requisitos previos para analizar a composición en frecuencia dos datos sísmicos, podemos citar, por exemplo, os seguintes:

  1. Os diferentes tipos de ondas caracterízanse por unha composición de frecuencia diferente. Isto permítelle resaltar ondas útiles e suprimir ondas de interferencia.
  2. As propiedades das rochas como a porosidade e a saturación poden afectar á composición da frecuencia. Isto permite identificar as rochas coas mellores propiedades.
  3. As capas con diferentes grosores provocan anomalías en diferentes rangos de frecuencia.

O terceiro punto é o principal no contexto deste artigo. A continuación móstrase un fragmento de código para calcular trazos sísmicos no caso dunha capa con grosor variable: un modelo de cuña. Este modelo estúdase tradicionalmente na exploración sísmica para analizar os efectos de interferencia cando as ondas reflectidas desde moitas capas se superpoñen entre si.

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]]

Modelo de formación de pinch-out
Wolfram Mathematica en Xeofísica

A velocidade da onda no interior da cuña é de 4500 m/s, fóra da cuña de 4000 m/s, e suponse que a densidade é constante de 2200 g/cm³. Para tal modelo, calculamos coeficientes de reflexión e trazas sísmicas.

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]

Trazas sísmicas para o modelo de cuña
Wolfram Mathematica en Xeofísica

A secuencia de trazos sísmicos que se mostra nesta figura denomínase sección sísmica. Como vedes, a súa interpretación tamén se pode realizar a nivel intuitivo, xa que a xeometría das ondas reflectidas se corresponde claramente co modelo especificado anteriormente. Se analizas as trazas con máis detalle, notarás que as trazas de 1 a aproximadamente 30 non difieren: o reflexo do teito da formación e do fondo non se superpoñen. A partir do trazo 31, os reflexos comezan a interferir. E, aínda que no modelo, os coeficientes de reflexión non cambian horizontalmente: as trazas sísmicas cambian a súa intensidade a medida que cambia o grosor da formación.

Consideremos a amplitude de reflexión desde o límite superior da formación. A partir da ruta 60, a intensidade da reflexión comeza a aumentar e na ruta 70 chega a ser máxima. Así se manifesta a interferencia das ondas procedentes do teito e do fondo das capas, levando nalgúns casos a importantes anomalías no rexistro sísmico.

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]

Gráfico da amplitude da onda reflectida dende o bordo superior da cuña
Wolfram Mathematica en Xeofísica

É lóxico que cando o sinal é de baixa frecuencia, comece a aparecer interferencia en grandes espesores de formación e, no caso dun sinal de alta frecuencia, a interferencia se produza en grosores máis pequenos. O seguinte fragmento de código crea un sinal con frecuencias de 35 Hz, 55 Hz e 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["Set of wavelets",Black,20],
LabelStyle->Directive[Black,Italic],
ImageSize->Large,InterpolationOrder->2]

Un conxunto de sinais fonte con frecuencias de 35 Hz, 55 Hz, 85 Hz
Wolfram Mathematica en Xeofísica

Ao calcular trazos sísmicos e trazar gráficos de amplitudes de onda reflectidas, podemos ver que para diferentes frecuencias se observa unha anomalía en diferentes grosores de formación.

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]

Gráficos das amplitudes da onda reflectida desde o bordo superior da cuña para diferentes frecuencias
Wolfram Mathematica en Xeofísica

A capacidade de extraer conclusións sobre o espesor da formación a partir dos resultados das observacións sísmicas é extremadamente útil, porque unha das tarefas principais na exploración petrolífera é avaliar os puntos máis prometedores para a colocación dun pozo (é dicir, aquelas áreas onde a formación está máis groso). Ademais, na sección xeolóxica pode haber obxectos cuxa xénese provoque un cambio brusco no grosor da formación. Isto fai da análise espectral unha ferramenta eficaz para estudalos. Na seguinte parte do artigo consideraremos tales obxectos xeolóxicos con máis detalle.

Datos experimentais. Onde os conseguiches e que buscar neles?

Os materiais analizados no artigo obtivéronse en Siberia occidental. A rexión, como todos sen excepción saben probablemente, é a principal rexión produtora de petróleo do noso país. O desenvolvemento activo dos xacementos comezou na rexión nos anos 60 do século pasado. O principal método de busca de xacementos de petróleo é a exploración sísmica. É interesante ollar as imaxes de satélite deste territorio. A pequena escala, podes observar un gran número de pantanos e lagos; ao ampliar o mapa, podes ver os sitios de perforación de pozos en clúster e, ampliando o mapa ata o límite, tamén podes distinguir os claros dos perfís ao longo dos cales se produce a sísmica. realizáronse observacións.

Imaxe de satélite dos mapas Yandex - zona da cidade de Noyabrsk
Wolfram Mathematica en Xeofísica

Unha rede de almofadas de pozos nun dos campos
Wolfram Mathematica en Xeofísica

As rochas petrolíferas de Siberia occidental atópanse nunha ampla gama de profundidades: de 1 km a 5 km. O volume principal de rochas que conteñen petróleo formouse nos tempos xurásico e cretácico. O período xurásico é probablemente coñecido por moitos pola película do mesmo nome. Clima xurásico era significativamente diferente do moderno. A Enciclopedia Británica ten unha serie de paleomapas que caracterizan cada era helóxica.

Presente
Wolfram Mathematica en Xeofísica
Período xurásico
Wolfram Mathematica en Xeofísica

Teña en conta que na época xurásica, o territorio da Siberia occidental era unha costa marítima (terra atravesada por ríos e un mar pouco profundo). Dado que o clima era cómodo, podemos supoñer que unha paisaxe típica daquela era así:

Siberia xurásica
Wolfram Mathematica en Xeofísica

Nesta imaxe, o importante para nós non son tanto os animais e as aves, senón a imaxe do río ao fondo. O río é o mesmo obxecto xeolóxico no que nos detivemos antes. O caso é que a actividade dos ríos permite que se acumulen areniscas ben clasificadas, que despois se converterán nun depósito de petróleo. Estes encoros poden ter unha forma estraña e complexa (como un leito dun río) e teñen un grosor variable - preto das marxes o grosor é pequeno, pero máis preto do centro da canle ou en zonas de meandros aumenta. Así, os ríos formados no Xurásico están agora a uns tres quilómetros de profundidade e son obxecto dunha busca de depósitos de petróleo.

Datos experimentais. Procesamento e visualización

De inmediato, fagamos unha reserva sobre os materiais sísmicos mostrados no artigo -debido a que a cantidade de datos empregados para a análise é significativa- só se inclúe no texto do artigo un fragmento do conxunto orixinal de trazas sísmicas. Isto permitirá a calquera reproducir os cálculos anteriores.

Cando traballa con datos sísmicos, un xeofísico adoita empregar software especializado (hai varios líderes da industria cuxos desenvolvementos se utilizan activamente, por exemplo Petrel ou Paradigm), que permite analizar diferentes tipos de datos e ten unha interface gráfica conveniente. A pesar de toda a comodidade, estes tipos de software tamén teñen os seus inconvenientes: por exemplo, a implementación de algoritmos modernos en versións estables leva moito tempo e as posibilidades de automatizar cálculos adoitan ser limitadas. En tal situación, faise moi conveniente empregar sistemas informáticos de matemáticas e linguaxes de programación de alto nivel, que permiten utilizar unha ampla base algorítmica e, ao mesmo tempo, cobran moita rutina. Este é o principio utilizado para traballar con datos sísmicos en Wolfram Mathematica. Non é apropiado escribir unha funcionalidade rica para o traballo interactivo con datos; é máis importante asegurarse de cargar desde un formato xeralmente aceptado, aplicándolles os algoritmos desexados e cargalos de novo nun formato externo.

Seguindo o esquema proposto, cargaremos os datos sísmicos orixinais e mostrámolos 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]

Os datos descargados e importados deste xeito son os percorridos rexistrados nunha superficie de 10 por 5 quilómetros. Se os datos se obteñen mediante un método de levantamento sísmico tridimensional (as ondas non se rexistran ao longo de perfís xeofísicos individuais, senón en toda a área simultáneamente), faise posible obter cubos de datos sísmicos. Trátase de obxectos tridimensionais, cuxos tramos verticais e horizontais permiten un estudo detallado do medio xeolóxico. No exemplo considerado, estamos a tratar con datos tridimensionais. Podemos obter algunha información da cabeceira do texto, como esta

StringPartition[seismic3DSEGY["textheader"], 80] // TableForm

C 1 ESTE É FICHEIRO DE DEMO PARA A PROBA DO PAQUETE DE XEOLOXÍA
C 2
C 3
C 4
C 5 DATA NOME USUARIO: USUARIO WOLFRAM
C 6 NOME DA ENQUISA: ALGÚN LUGAR DE SIBERIA
C 7 TIPO DE FICHEIRA 3D VOLUME SÍSMICO
C 8
C 9
C10 Z RANGE: PRIMEIROS 2200M ÚLTIMOS 2400M

Este conxunto de datos será suficiente para que poidamos demostrar as principais etapas da análise de datos. Os trazos do ficheiro rexístranse secuencialmente e cada un deles ten un aspecto similar á seguinte figura: esta é a distribución das amplitudes das ondas reflectidas ao longo do eixe vertical (eixe de profundidade).

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]

Unha das trazas da sección sísmica
Wolfram Mathematica en Xeofísica

Sabendo cantas trazas están situadas en cada dirección da área estudada, pode xerar unha matriz de datos tridimensionais e visualizala mediante a función Image3D[]

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]]

Imaxe XNUMXD dun cubo de datos sísmicos (eixe vertical - profundidade)
Wolfram Mathematica en Xeofísica

Se as características xeolóxicas de interese crean anomalías sísmicas intensas, pódense utilizar ferramentas de visualización con transparencia. As áreas "sen importancia" da gravación pódense facer invisibles, deixando só as anomalías visibles. En Wolfram Mathematica isto pódese facer usando Opacidade[] и Raster3D[].

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]

Imaxe de cubo de datos sísmicos usando as funcións Opacity[] e Raster3D[]. Wolfram Mathematica en Xeofísica

Como no exemplo sintético, en seccións do cubo orixinal pódense identificar algúns límites xeolóxicos (estratos) con relevo variable.

A principal ferramenta para a análise espectral é a transformada de Fourier. Coa súa axuda, pode avaliar o espectro de amplitude-frecuencia de cada trazo ou grupo de trazos. Non obstante, despois de transferir os datos ao dominio da frecuencia, pérdese información sobre en que momentos (léase a que profundidades) cambia a frecuencia. Para poder localizar os cambios de sinal no eixe do tempo (profundidade), utilízanse a transformada de Fourier con ventá e a descomposición wavelet. Este artigo usa a descomposición wavelet. A tecnoloxía de análise de ondas comezou a utilizarse activamente na exploración sísmica nos anos 90. Considérase que a vantaxe sobre a transformada de Fourier con ventá é a mellor resolución temporal.

Usando o seguinte fragmento de código, pode descompoñer unha das trazas sísmicas en compoñentes individuais:

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]

Descomposición dunha traza en compoñentes
Wolfram Mathematica en Xeofísica

Para avaliar como se distribúe a enerxía de reflexión en diferentes tempos de chegada da onda, utilízanse escalogramas (análogos a un espectrograma). Como regra xeral, na práctica non é necesario analizar todos os compoñentes. Normalmente, selecciónanse compoñentes de baixa, media e alta frecuencia.

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]

Escalograma. Resultado da función WaveletScalogram[]
Wolfram Mathematica en Xeofísica

A linguaxe Wolfram usa a función para a transformación de wavelet Transformación de onda continua[]. E a aplicación desta función a todo o conxunto de trazos realizarase mediante a función Táboa[]. Aquí paga a pena destacar un dos puntos fortes de Wolfram Mathematica: a capacidade de usar a paralelización Táboa paralela[]. No exemplo anterior, non hai necesidade de paralelización: o volume de datos non é grande, pero cando se traballa con conxuntos de datos experimentais que conteñen centos de miles de trazos, esta é unha necesidade.

tracesCWD=Table[Map[Hilbert[#,0]&,Re[ContinuousWaveletTransform[traces[[i]]][[1]]][[{13,15,18}]]],{i,1,Length@traces}]; 

Despois de aplicar a función Transformación de onda continua[] Aparecen novos conxuntos de datos correspondentes ás frecuencias seleccionadas. No exemplo anterior, estas frecuencias son: 38Hz, 33Hz, 27Hz. A elección das frecuencias lévase a cabo a maioría das veces en base a probas: obteñen mapas eficaces para diferentes combinacións de frecuencias e seleccionan a máis informativa desde o punto de vista dun xeólogo.

Se precisas compartir os resultados con compañeiros ou proporcionalos ao cliente, podes utilizar a función SEGYExport[] do paquete GeologyIO

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];

Con tres destes cubos (compoñentes de baixa frecuencia, frecuencia media e alta frecuencia), a mestura RGB úsase normalmente para visualizar os datos xuntos. Cada compoñente ten asignada a súa propia cor: vermello, verde, azul. En Wolfram Mathematica isto pódese facer usando a función Combinación de cores[].

O resultado son imaxes a partir das que se pode facer a interpretación xeolóxica. Os meandros que se rexistran no tramo permiten delimitar paleocanles, que son máis susceptibles de ser encoros e conter reservas de petróleo. A busca e análise de análogos modernos de tal sistema fluvial permítenos determinar as partes máis prometedoras dos meandros. As propias canles caracterízanse por grosas capas de pedra arenisca ben clasificadas e son un bo depósito para o petróleo. As áreas fóra das anomalías do "encaixe" son similares aos modernos depósitos de chairas de inundación. Os depósitos de chaira inundable están representados principalmente por rochas arxilosas e a perforación nestas zonas será ineficaz.

Sección RGB do cubo de datos. No centro (lixeiramente á esquerda do centro) pódese trazar o serpenteante río.
Wolfram Mathematica en Xeofísica
Sección RGB do cubo de datos. No lado esquerdo pódese trazar o río serpenteante.
Wolfram Mathematica en Xeofísica

Nalgúns casos, a calidade dos datos sísmicos permite imaxes significativamente máis claras. Isto depende da metodoloxía de traballo de campo, do equipamento utilizado polo algoritmo de redución de ruído. Nestes casos, non só son visibles fragmentos de sistemas fluviais, senón tamén paleoríos estendidos enteiros.

Mestura RGB de tres compoñentes dun cubo de datos sísmicos (corte horizontal). Profundidade aproximadamente 2 km.
Wolfram Mathematica en Xeofísica
Imaxe de satélite do río Volga preto de Saratov
Wolfram Mathematica en Xeofísica

Conclusión

Wolfram Mathematica permítelle analizar datos sísmicos e resolver problemas aplicados relacionados coa exploración de minerais, e o paquete GeologyIO fai que este proceso sexa máis cómodo. A estrutura dos datos sísmicos é tal que o uso de métodos integrados para acelerar os cálculos (Táboa paralela[], Paralelo[],…) é moi eficiente e permite procesar grandes cantidades de datos. En gran medida, isto vese facilitado polas funcións de almacenamento de datos do paquete GeologyIO. Por certo, o paquete pódese usar non só no campo da exploración sísmica aplicada. Case os mesmos tipos de datos utilízanse en radares de penetración terrestre e sismoloxía. Se tes suxestións sobre como mellorar o resultado, que algoritmos de análise de sinal do arsenal de Wolfram Mathematica son aplicables a tales datos ou se tes algún comentario crítico, por favor. Deixe un comentario.

Fonte: www.habr.com

Engadir un comentario