62 lines
2.1 KiB
Python
62 lines
2.1 KiB
Python
import numpy as np
|
|
|
|
|
|
def create_chirp(
|
|
eodf=500,
|
|
chirpsize=100,
|
|
chirpduration=0.015,
|
|
ampl_reduction=0.05,
|
|
chirptimes=[0.05, 0.2],
|
|
kurtosis=1.0,
|
|
duration=1.0,
|
|
dt=0.00001,
|
|
):
|
|
"""create a fake fish eod that contains chirps at the given times. EOF is a simple sinewave. Chirps are modeled with Gaussian profiles in amplitude reduction and frequency ecxcursion.
|
|
|
|
Args:
|
|
eodf (int, optional): The chriping fish's EOD frequency. Defaults to 500 Hz.
|
|
chirpsize (int, optional): the size of the chrip's frequency excursion. Defaults to 100 Hz.
|
|
chirpwidth (float, optional): the duration of the chirp. Defaults to 0.015 s.
|
|
ampl_reduction (float, optional): Amount of amplitude reduction during the chrips. Defaults to 0.05, i.e. 5\%
|
|
chirptimes (list, optional): Times of chirp centers. Defaults to [0.05, 0.2].
|
|
kurtosis (float, optional): The kurtosis of the Gaussian profiles. Defaults to 1.0
|
|
dt (float, optional): the stepsize of the simulation. Defaults to 0.00001 s.
|
|
|
|
Returns:
|
|
np.ndarray: the time
|
|
np.ndarray: the eod
|
|
np.ndarray: the amplitude profile
|
|
np.adarray: tha frequency profile
|
|
"""
|
|
p = 0.0
|
|
|
|
time = np.arange(0.0, duration, dt)
|
|
signal = np.zeros_like(time)
|
|
ampl = np.ones_like(time)
|
|
freq = np.ones_like(time)
|
|
|
|
ck = 0
|
|
csig = 0.5 * chirpduration / np.power(2.0 * np.log(10.0), 0.5 / kurtosis)
|
|
# csig = csig*-1
|
|
for k, t in enumerate(time):
|
|
a = 1.0
|
|
f = eodf
|
|
|
|
if ck < len(chirptimes):
|
|
if np.abs(t - chirptimes[ck]) < 2.0 * chirpduration:
|
|
x = t - chirptimes[ck]
|
|
gg = np.exp(-0.5 * np.power((x / csig) ** 2, kurtosis))
|
|
cc = chirpsize * gg
|
|
|
|
# g = np.exp( -0.5 * (x/csig)**2 )
|
|
f = chirpsize * gg + eodf
|
|
a *= 1.0 - ampl_reduction * gg
|
|
elif t > chirptimes[ck] + 2.0 * chirpduration:
|
|
ck += 1
|
|
freq[k] = f
|
|
ampl[k] = a
|
|
p += f * dt
|
|
signal[k] = -1 * a * np.sin(2 * np.pi * p)
|
|
|
|
return time, signal, ampl, freq
|