{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "provenance": [], "collapsed_sections": [ "Ff5s-MH3T-6V", "y01puna-Urnm" ] }, "kernelspec": { "name": "python3", "display_name": "Python 3" } }, "cells": [ { "cell_type": "code", "metadata": { "id": "1hH4AvARTtxy" }, "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "from google.colab import files" ], "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "Ff5s-MH3T-6V" }, "source": [ "# Os parâmetros da amostragem no tempo e no espaço:\n", "**Tempo:** \n", "é a escala de tempo do simograma (eixo vertical); todos os geofones tem a mesma amostragem em tempo:\n", "* Tmax = tempo total do registro\n", "* dt = intervalo de amostragem, entre os valores de tempo, em que o sismógrafo salva o valor da amplitude da vibração da onda. \n", "\n", "**Espaço**: é a posição dos geofones, ou os valores de \"x\" nas equações de tempo, associados à geometria de aquisição do ensaio sísmico: \n", "* xmin = afastamento mínimo fonte-receptor (da fonte ao 1o. geofone)\n", "* dx = intervalo entre geofones \n", "* NG = Número de geofones \n", "\n" ] }, { "cell_type": "markdown", "metadata": { "id": "YWQvF60128FP" }, "source": [ "**1.1 Gere o vetor para compor a escala de tempo do sismograma:** \n", "\n", "( um vetor com os valores de tempo de cada valor de amplitude dos dados sísmicos; esse vetor (valores de tempo) será o mesmo para todos os traços do sismograma ) \n" ] }, { "cell_type": "code", "metadata": { "id": "MUKpiXI67yei" }, "source": [ "Tmax=\n", "dt=0.001 #1ms\n", "# escreva o comando para gerar o vetor t (em função das variáveis dt e Tmax)\n", "t =" ], "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "CS7BRwq26_QC" }, "source": [ "**1.2 Gere o vetor para compor a escala do eixo x (coordenadas dos geofones ou afastamentos fonte-receptor)** \n", "\n", "( um vetor com os valores de x - **defina a mesma geometria escolhida na modelagem dos tempos de percurso**)" ] }, { "cell_type": "code", "metadata": { "id": "_eIEI-948n0b" }, "source": [ "NG=\n", "xmin=\n", "dx=\n", "# comando para gerar o vetor x (em função das variáveis xmin, dx, NG)\n", "x=np.arange(xmin, (NG * dx + xmin), dx)\n" ], "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "y01puna-Urnm" }, "source": [ "\n", "# Os valores de amplitude dos sismogramas\n", " O sismograma multicanal: cada canal do sismógrafo registra as vibrações das ondas sísmicas que atingem cada um dos geofones (assim, um traço do sismograma para cada geofone). \n", " \n", " As amplitudes dos sismogramas serão armazenadas em uma variável do tipo matriz, sendo que:\n", "- cada coluna da matriz são os valores das amplitudes da vibração que atinge cada geofone, correspondendo a uma posição ou afastamento fonte-receptor (x); o número de colunas é igual ao número de geofones;\n", "- e o número de linhas da matriz é igual ao número de amostras em tempo (len(t)), o tamanho do vetor t definido acima no item 1.1.\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "id": "CxyH6jQO0uYF" }, "source": [ "**2.1 - Inicialmente vamos gerar uma matriz com todos os valores de amplitude igual a zero para representar os dados sísmicos em cada geofone.**\n", "\n", "Portanto, essa matriz deverá ter as dimensões dos vetores \"t\" e \"x\" gerados acima:\n", "```\n", "#Exemplo da sintaxe dos comandos:\n", "matriz = np.zeros([Número de Linhas, Número de Colunas])\n", "\n", "print (matriz.shape) #para imprimir as dimensões da matriz\n", "print (matriz)\n", "```" ] }, { "cell_type": "code", "metadata": { "id": "v38tLyC_AejX" }, "source": [ "M=np.zeros([,])\n" ], "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "Vm_NOhm9VD7b" }, "source": [ "**2.2 Substituir os valores de amplitude para 1, na posição de cada chegada da onda.**\n", "\n", "Carregue os tempos modelados (Tarefa do Exercício 1 - aula anterior) e identifique qual a posição do elemento dentro da Matriz dos dados (sismograma) que equivale a cada tempo calculado e **substitua o valor 0 (zero) do elemento por 1 (um)** nesta posição.\n", "\n", "```\n", "# O desafio aqui é identificar qual a posição do elemento da matriz [i,j] que refere-se a cada ponto (x,t) das 3 curvas de tempo \n", "# faça isso individualmente para cada curva t-x\n", "# lembre-se que a posição do elemento é um número inteiro ([i,j])\n", "# atribua o valor 1 a matriz na posição identificada (matriz[i,j]=1)\n", "\n", "```" ] }, { "cell_type": "code", "metadata": { "id": "2zFDVn8-UNBp" }, "source": [ "\n", "files.upload() #importe os arquivos de tempos dos eventos sísmicos, que foram salvos da tarefa anterior" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "Q83mg6KQVE1S" }, "source": [ "#escreva o nome dos arquivos entre as \"\"\n", "x1,t1=np.loadtxt(\" \", unpack=True)\n", "x2,t2=np.loadtxt(\" \", unpack=True)\n", "x3,t3=np.loadtxt(\" \", unpack=True)\n", "\n", "#COMPLETE A PROGRAMAÇÃO DA Etapa 2.2\n", "\n", "\n", "\n" ], "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "tsRKiqRDULlH" }, "source": [ "**Gere uma imagem do sismograma nesta etapa, para conferir se a tarefa acima foi realizada corretamente**" ] }, { "cell_type": "code", "metadata": { "id": "dv3381GgGBDh" }, "source": [ "#1. Preparação dos dados para plotar:\n", "#1.1 Complete a primeira linha a seguir, com o nome da sua variável matriz (estamos trocando o nome da variável)\n", "matriz_dados= \n", " \n", "#1.2 Complete as dimensões da Matriz \n", "NS= \t\t#Número de linhas da Matriz (= Número de amostras em tempo))\n", "NX1= \t\t#Número de colunas da Matriz (= Número de geofones)\n", "\n", "\n", "#2: Imagem do sismograma \n", "plt.figure (figsize=(9, 6), dpi=100) #para aumentar o tamanho e melhorar a qualidade da imagem\n", "\n", "# - Nas 4 linhas a seguir estão programados os comandos para plotar o sismograma\n", "temporario=np.transpose(matriz_dados)\n", "for i in range(0,NX1):\n", "\tdata = x[i] + temporario[i]*1\t\n", "\tplt.plot(data, t, 'g-')\n", "\n", "# - sugestão para completar a imagem, pode alterar ao seu critério\n", "plt.ylim([np.max(t),np.min(t)])\n", "plt.xlabel(u'Distância (m)')\n", "plt.ylabel('Tempo (s)')\n", "plt.title('Modelagem dos tempos de chegada no sismograma')" ], "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "i280nTBRVU8h" }, "source": [ "**2.3 - Substituir cada um dos valores de amplitude igual a 1, inseridos no item acima, pelo pulso sísmico (a assinatura da fonte ou wavelet)**\n", "\n", "Esta etapa, como envolve vários detalhes, inclusive de teoria que vocês ainda não aprenderam no curso, foi totalmente programada na célula a seguir.\n", "\n", "Se você programou corretamente as linhas acima:\n", "- basta executar a próxima célula para gerar a imagem final dos sismogramas;\n" ] }, { "cell_type": "code", "metadata": { "id": "cMPlYDFCqBgR" }, "source": [ "NG=NX1\n", "# wavelet e convolução da wavelet com a matriz de dados anterior \n", "#vetor que contém as amplitudes da wavelet\n", "W = np.array([-9.6925e-04,-1.9277e-03,-3.6997e-03,-6.8484e-03,\n", "\t\t -1.2221e-02,-2.1011e-02,-3.4779e-02,-5.5374e-02,\n", "\t\t -8.4715e-02,-1.2436e-01,-1.7486e-01,-2.3496e-01,\n", "\t\t -3.0076e-01,-3.6510e-01,-4.1749e-01,-4.4493e-01,\n", "\t\t -4.3363e-01,-3.7173e-01,-2.5257e-01,-7.7582e-02,\n", "\t\t 1.4179e-01,3.8423e-01,6.2093e-01,8.2019e-01,\n", "\t\t 9.5324e-01,1.0000e+00,9.5324e-01,8.2019e-01,\n", "\t\t 6.2093e-01,3.8423e-01,1.4179e-01,-7.7582e-02,\n", "\t\t -2.5257e-01,-3.7173e-01,-4.3363e-01,-4.4493e-01,\n", "\t\t -4.1749e-01,-3.6510e-01,-3.0076e-01,-2.3496e-01,\n", "\t\t -1.7486e-01,-1.2436e-01,-8.4715e-02,-5.5374e-02,\n", "\t\t -3.4779e-02,-2.1011e-02,-1.2221e-02,-6.8484e-03,\n", "\t\t -3.6997e-03,-1.9277e-03,-9.6925e-04])\n", "\n", "#acertando o tamanho do vetor wavelet para poder usar a função de convolução (np.convolve)\n", "W = np.append(np.zeros(np.size(W)//2),W)\n", "\n", "#inicializando uma nova matriz \n", "dados2 = np.zeros([NG,NS])\n", "\n", "#convolução da wavelet com a matriz gerada com os valores de amplitude 1,\n", "#resultado é armazenado na variável dados2\n", "for i in range(temporario.shape[0]):\n", "\tdados2[i,:] = np.convolve(temporario[i,:], W, mode='same')\n", "\n", "\n", "#Plotagem do sismograma para a variável dados2\n", "plt.figure (figsize=(7, 5), dpi=100) \n", "for i in range(0,NX1):\n", "\tdata = x[i] + dados2[i]*1\n", "\t#data = x[i] + (dados[i] / max(abs(dados[i]))) * 0.75\n", "\tplt.plot(data, t, 'k-')\n", "\tplt.fill_betweenx(t, x[i], data, where = (data > x[i]), color='k')\n", "\n", "\tplt.ylim([np.max(t),np.min(t)])\n", "\tplt.xlabel(u'Distância (m)')\n", "\tplt.ylabel('Tempo (s)')\n", "\tplt.title('Modelagem do sismograma')\n", "plt.show()\n", "\n", "#Plotagem do sismograma para a variável dados2, com as curvas de tempo-distância calculadas\n", "plt.figure (figsize=(7, 5), dpi=100) \n", "for i in range(0,NX1):\n", "\tdata = x[i] + dados2[i]*1 #(dados[i] / max(abs(dados[i]))) * 1.75\n", "\tplt.plot(data, t, 'k-')\n", "\tplt.fill_betweenx(t, x[i], data, where = (data > x[i]), color='k')\n", "\tplt.ylim([np.max(t),np.min(t)])\n", "\tplt.xlabel(u'Distância (m)')\n", "\tplt.ylabel('Tempo (s)')\n", "#para plotar as curvas de tempo-distância sobre a imagem do sismograma\n", "\tplt.plot(x1,t1)\n", "\tplt.plot(x2,t2)\n", "\tplt.plot(x3,t3)\n", "\tplt.title('Modelagem do sismograma com a interpretação dos tempos')\n", "plt.show()" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "UL3qw5ImkeWZ" }, "source": [], "execution_count": null, "outputs": [] } ] }