"""
: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):
'''
生成三角信号
:param vlen: 信号时长(s)
:param dt: 采样间隔(s)
:return:
- **wave** - 波形幅值序列
'''
return gen_trap_wave(vlen/2.0, vlen/2.0, vlen, dt)
[文档]
def gen_parabola_wave(vlen, dt):
'''
生成抛物线信号
:param vlen: 信号时长(s)
:param dt: 采样间隔(s)
:return:
- **wave** - 波形幅值序列
'''
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):
'''
生成梯形信号
:param t1: 上坡截止时刻(s)
:param t2: 平台截止时刻(s)
:param t3: 下坡截止时刻(s)
:param dt: 采样间隔(s)
:return:
- **wave** - 波形幅值序列
'''
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):
'''
生成Ricker子波
:param f0: 中心频率(Hz)
:param dt: 采样间隔(s)
:return:
- **wave** - 波形幅值序列
'''
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