pygrt.signals 源代码

"""
    :file:     signals.py  
    :author:   Zhu Dengda (zhudengda@mail.iggcas.ac.cn)  
    :date:     2024-07-24  

    该文件包括一些常见的时间信号,最高幅值均为1    


"""


import numpy as np  
import numpy.ctypeslib as npct
from ctypes import byref, cast

from .c_interfaces import *

__all__ = [
    "gen_triangle_wave",
    "gen_parabola_wave",
    "gen_trap_wave",
    "gen_ricker_wave",
]

[文档] def gen_triangle_wave(vlen, dt): ''' generate triangle-shape wave :param vlen: signal length (s) :param dt: time interval (s) :return: - **wave** - amplitude sequence ''' return gen_trap_wave(vlen/2.0, vlen/2.0, vlen, dt)
[文档] def gen_parabola_wave(vlen, dt): ''' generate parabola-shape wave :param vlen: signal length (s) :param dt: time interval (s) :return: - **wave** - amplitude sequence ''' ct1 = c_float(vlen) cnt = c_int(0) carr = C_grt_get_parabola_wave(dt, byref(ct1), byref(cnt)) arr = npct.as_array(carr, shape=(cnt.value,)).copy() C_grt_free(carr) return arr
[文档] def gen_trap_wave(t1, t2, t3, dt): ''' generate trapezoid-shape wave :param t1: ramp-up cutoff time (s) :param t2: plateau cutoff time (s) :param t3: ramp-down cutoff time (s) :param dt: time interval (s) :return: - **wave** - amplitude sequence ''' ct1 = c_float(t1) ct2 = c_float(t2) ct3 = c_float(t3) cnt = c_int(0) carr = C_grt_get_trap_wave(dt, byref(ct1), byref(ct2), byref(ct3), byref(cnt)) arr = npct.as_array(carr, shape=(cnt.value,)).copy() C_grt_free(carr) return arr
[文档] def gen_ricker_wave(f0:float, dt:float): ''' generate Ricker wavelet :param f0: center frequency (Hz) :param dt: time interval (s) :return: - **wave** - amplitude sequence ''' cnt = c_int(0) carr = C_grt_get_ricker_wave(dt, f0, byref(cnt)) if cast(carr, c_void_p).value is None: raise ValueError("NULL pointer") arr = npct.as_array(carr, shape=(cnt.value,)).copy() C_grt_free(carr) return arr