示例#1
0
"""
from __future__ import division
from os import sys
sys.path.append('../pyseries/')
import lectura as lec
import signals as sig
import numpy as np
import matplotlib.pyplot as plt

y, U, V = lec.plot_txt_waves('Dcolina', 0.0005)

N = len(U)
T_t = N * 0.0005
#
FS = 10.0
x1, Samag1, A1, nfs1 = sig.Ftrans(U, N, T_t / N, FS)
lec.grafFourier(Samag1, x1, nfs1, 'result', 0.0, 16.0, 0.0, 1000.0, 2)

#N = 3999
#T_t = 2.0
#tc  = 1.0
#fc  = 4.0
#t_b = np.sqrt(6)/np.pi/fc
#print ("Breadth =") , t_b , ('s')
#Rick , time = sig.ricker(N , T_t , tc, fc)
#lec.grafsignalG(Rick , 'Pulse', 'Disp','L' ,-1.0,+1.0, T_t/N , 3)
#
#x2 , Samag2 , A2 , nfs2 = sig.Ftrans(Rick , len(Rick) , T_t/N , FS)
#lec.grafFourier(Samag2 , x2 , nfs2 , 'result' , 0.0 , 16.0 , 0.0 , 750.0 , 4)
#
#plt.figure(5)
示例#2
0
# -*- coding: utf-8 -*-
"""
Created on Wed Nov 11 12:36:56 2015

@author: eafit
"""
import numpy as np
from os import sys
sys.path.append('../CALCULATOR/')
import signals as sig
import matplotlib.pyplot as plt
from sympy import init_printing
init_printing()
"""
Creates model.
"""
fc = 4.0
Tt = 2.0/fc
tc = Tt/2
dt = 0.0005
nt = int(Tt / dt )

Rick, time = sig.ricker(nt , Tt , tc, fc)
plt.plot(time , Rick)
x , Samag , A , nfs = sig.Ftrans(Rick , nt , dt , Tt)
sig.grafFourier(Samag , x , nfs , 'FAS', 0.0 , 4.0 , 0.0 , 0.2 , 2)

#np.savetxt('respuesta.txt' , SOL )
示例#3
0
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Script for post-processing acceleration time histories
resulting from the ray visualizer in the elastic calculator
"""
from __future__ import division, print_function
import matplotlib.pyplot as plt
import numpy as np
import signals as sig
#
# Process input motion
#
plt.figure(0)
dt = 0.077
fs = 10.0
DATOS = np.loadtxt('respuesta.txt')
ninc = 129
signal = np.zeros([ninc, 21], dtype=float)
k = 0
for j in range(5, 26):
    for i in range(ninc):
        signal[i, k] = DATOS[j, i] + k / 5
    sig.grafsignalG(signal[:, k], 'salida', 'Displacement', 'l', 0.0, 20.0, dt,
                    0)
    x, Samag, A, nfs = sig.Ftrans(signal[:, k], 129, dt, fs)
    sig.grafFourier(Samag, x, nfs, 'Fourier', 0.0, 0.0, 0.0, 0.0, 1)
    k = k + 1
sig.grafsignalG(signal[:, 5], 'salida', 'Displacement', 'l', 0.0, 20.0, dt, 2)
示例#4
0
def single_ray(x, y, Gamma, Beta, Tt, Tc, fc):
    """Evaluates a plane wave

    Parameters
    ----------
    x : float
        x-coordinate
    y : float
        y-coordinate
    Gamma: float
        Angle of incidence
    Beta: float
        Velocity of wave propagation

    Returns
    -------
    signal : ndarray (float)
        Array with the time history at the point x-y.

    """
    #
    #   Pulse parameters
    #
    dt = 1.0 / (8.0 * fc)
    Nt = int(Tt / dt)
    Nf = int((Nt - 1) / 2)
    df = 1 / (Nt * dt)

    lif = df
    lff = df * Nf
    fre = np.linspace(lif, lff, Nf, dtype=float)

    desplaz = np.zeros(len(fre), dtype=complex)
    #
    nx1 = np.sin(Gamma)
    ny1 = -np.cos(Gamma)
    #
    #    nx2 = np.sin(2.9*Gamma)
    #    ny2 =-np.cos(2.9*Gamma/3.0)
    #
    #   Compute the Transfer function
    #
    for j in range(0, len(fre)):
        kapa = 2.0 * np.pi * fre[j] / Beta
        pha_ang_1 = -kapa * (nx1 * x + ny1 * y)
        #        pha_ang_2 = - kapa*(nx2*x + ny2*y)
        #        desplaz[j] = np.exp(1j*pha_ang_1) + np.exp(1j*pha_ang_2)
        desplaz[j] = np.exp(1j * pha_ang_1)


#
#   Compute convolution and inverse transform.
#
    TF = np.zeros(Nt, dtype=complex)
    Rick, T = sig.ricker(Nt, Tt, Tc, fc)
    x, Sas, Saf, nfs = sig.Ftrans(Rick, Nt, dt, 10.0)

    for i in range(Nf):
        TF[i + 1] = desplaz[i]
        TF[-1 - i] = np.conj(desplaz[i])

    for i in range(Nt):

        TF[i] = Saf[i] * TF[i]

    signal = sig.IFtrans(TF, Nt, dt)

    return signal
示例#5
0
def DifractionSesma(x, y):

    Ui = 1j
    v = 3 / 2

    r0 = 10
    phi0 = 20 * np.pi / 180

    r = np.sqrt((x)**2 + (y)**2)
    phi = np.arctan(x / y)

    R = [r, r0]

    Beta = 1.0  # Velocidad de la onda incidente en el medio

    Tt = 16.0  #Tiempo total que tendrá el pulso
    Tc = 4.0  # Tiempo en el que estará centrado el pulso
    fc = 1.0  # Frecuencia del pulso
    Nf = 2048
    Nt = 2 * Nf + 1
    dt = Tt / (Nt - 1)
    deta = 2.0 / Beta / Tt  # Delta de frecuencias
    neta = int(4 * fc * 2 / deta)  # Número de frecuencias que se evaluaran

    lieta = deta  # #Límite inferior para eta
    lfeta = deta * neta  # Límite superior para x
    Eta = np.linspace(lieta, lfeta, neta, dtype=float)

    W = np.zeros(len(Eta), dtype=complex)

    Vdt = np.zeros(Nt)

    for i in range(Nt):
        Vdt[i] = i * dt

    def Especiales(
            Delta,
            f):  # El parámetro f define cuál de los vectores voy a retornar

        sumatoria = 100  #Número de veces que se van a evaluar las sumatorias de Hankel

        H = np.zeros((sumatoria), dtype=complex)  # Vector Hankel
        B = np.zeros((sumatoria))  # Vector Bessel

        if f == 0:
            for i in range(0, sumatoria):
                H[i] = sci.hankel1(i, Delta)
            return (H)
        else:
            for i in range(0, sumatoria):
                B[i] = sci.jv(i, Delta)
            return (B)

    for j in range(0, len(Eta)):

        k = Eta[j] / Beta

        r = min(R)
        bessel = Especiales(k * r, 1)

        r = max(R)
        hankel = Especiales(k * r, 0)

        S = hankel * bessel

        wii = 0
        n = 100

        for i in range(n):

            En = 0

            if i == 0:
                En = 1
            else:
                En = 2

            wi = (Ui / (2 * v)) * En * np.cos(
                (i / v) * (phi + v * np.pi * 0.5)) * np.cos(
                    (i / v) * (phi0 + v * np.pi * 0.5)) * S[i / v]

            wii = wii + wi

        W[j] = wii

    Rick, T = sig.ricker(Nt, Tt, Tc, fc)
    x, Sas, Saf, nfs = sig.Ftrans(Rick, Nt, dt, 10.0)

    TF = np.zeros(Nt, dtype=complex)
    for i in range(neta):

        TF[i + 1] = W[i]
        TF[-1 - i] = np.conj(W[i])

    for i in range(Nt):

        TF[i] = Saf[i] * TF[i]

    signal = sig.IFtrans(TF, Nt, dt)

    return (signal)
示例#6
0
def trifunac(x, y, Gamma, a):
    """
     Author: Juan Fernando Zapata
     Writes VTK files for visualization with paraview
    """

    ##################### DEFINICIÓN DE LOS VECTORES CON LOS TÉRMINOS DE HANKEL Y BESSEL ######################

    def Especiales(
            Delta,
            f):  # El parámetro f define cuál de los 4 vectores voy a retornar
        sumatoria = 130  #Número de veces que se van a evaluar las sumatorias de Hankekl
        H = np.zeros((sumatoria), dtype=complex)  # Vector Hankel
        B = np.zeros((sumatoria))  # Vector Bessel

        if f == 0:
            for i in range(0, sumatoria):
                H[i] = sci.hankel2(i, Delta)
            return (H)
        else:
            for i in range(0, sumatoria):
                B[i] = sci.jv(i, Delta)
            return (B)

        #############################################################################################################

    Beta = 1.0  # Velocidad de la onda incidente en el medio
    #    Gamma = 0.523 # Ángulo de incidencia de la onda
    #    a = 1.0 # Radio del cañón

    Tt = 16.0  #Tiempo total que tendrá el pulso
    Tc = 4.0  # Tiempo en el que estará centrado el pulso
    fc = 1.0  # Frecuencia del pulso
    Nf = 2048
    Nt = 2 * Nf + 1
    dt = Tt / (Nt - 1)
    deta = 2.0 * a / Beta / Tt  # Delta de frecuencias
    neta = int(4 * fc * 2 / deta)  # Número de frecuencias que se evaluaran

    lieta = deta  # #Límite inferior para eta
    lfeta = deta * neta  # Límite superior para x
    Eta = np.linspace(lieta, lfeta, neta, dtype=float)

    desplaz = np.zeros(len(Eta), dtype=complex)
    suma = 64

    if (y == 0):

        r = abs(x)

        if (x < 0):

            tetha = -np.pi / 2.0
        else:

            tetha = np.pi / 2.0

    elif (x == 0):

        r = y
        tetha = 0.0

    else:

        r = np.sqrt((x)**2 + (y)**2)
        tetha = np.arctan(x / y)

    for j in range(0, len(Eta)):  # Variación de frecuencias para cada X

        kappa = (np.pi / a) * Eta[j]
        ka = kappa * a
        kr = kappa * r
        Hankel = Especiales(kr, 0)  #Vector de Hankel con argumento kr
        Bessel = Especiales(kr, 1)  # Vector de Bessel con argumento kr

        ######################################### CÁLCULO DEL INCOMING ###########################################
        S1 = 0  # Acumulador de la primera sumatoria del incoming
        S2 = 0  #Acumulador de la segunda sumatoria del incoming

        for i in range(0, suma):  #Términos de la sumatoria
            n1 = i + 1
            S1 = S1 + ((-1)**n1 * Bessel[2 * n1] * np.cos(2 * n1 * Gamma) *
                       np.cos(2 * n1 * tetha))
            S2 = S2 + ((-1)**i * Bessel[2 * i + 1] * np.sin(
                (2 * i + 1) * Gamma) * np.sin((2 * i + 1) * tetha))

        incoming = (2.0 * Bessel[0]) + (4.0 * S1) - (4j * S2)

        ##############################################   CÁLCULO DEL SCATTER #############################################

        Hanka = Especiales(ka, 0)  # Vector de hankel con argumento ka
        Beka = Especiales(ka, 1)  # Vector de Bessel con argumento ka
        A0 = -2.0 * (Beka[1] / Hanka[1])
        B0 = 4j * np.sin(Gamma) * ((ka * Beka[0] - Beka[1]) /
                                   (ka * Hanka[0] - Hanka[1]))

        scatter = 0

        for i in range(0, suma):
            if i == 0:
                scatter = scatter + (A0 * Hankel[2 * i] * np.cos(2 * i * tetha)
                                     + B0 * Hankel[2 * i + 1] * np.sin(
                                         (2 * i + 1) * tetha))
            else:

                An = -4 * (-1)**i * np.cos(2 * i * Gamma) * (
                    (ka * Beka[2 * i - 1] - 2 * i * Beka[2 * i]) /
                    (ka * Hanka[2 * i - 1] - (2 * i) * Hanka[2 * i]))

                Bn = 4j * ((-1)**i) * np.sin(
                    (2 * i + 1) * Gamma) * ((ka * Beka[2 * i] -
                                             (2 * i + 1) * Beka[2 * i + 1]) /
                                            (ka * Hanka[2 * i] -
                                             (2 * i + 1) * Hanka[2 * i + 1]))

                scatter = scatter + (An * Hankel[2 * i] * np.cos(2 * i * tetha)
                                     + Bn * Hankel[2 * i + 1] * np.sin(
                                         (2 * i + 1) * tetha))

        desplaz[j] = incoming + scatter

    #return(desplaz) #Tener en cuenta el lugar del return

    Rick, T = sig.ricker(Nt, Tt, Tc, fc)
    x, Sas, Saf, nfs = sig.Ftrans(Rick, Nt, dt, 10.0)

    TF = np.zeros(Nt, dtype=complex)
    for i in range(neta):

        TF[i + 1] = desplaz[i]
        TF[-1 - i] = np.conj(desplaz[i])

    for i in range(Nt):

        TF[i] = Saf[i] * TF[i]

    signal = sig.IFtrans(TF, Nt, dt)

    return (signal)