-
Notifications
You must be signed in to change notification settings - Fork 0
/
18-34_test_sig.py
87 lines (63 loc) · 2.43 KB
/
18-34_test_sig.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import chirp
from scipy.io.wavfile import write
from nptdms import TdmsWriter, ChannelObject
import fcwt
# Signal parameters
fs = 96000 # Sampling frequency
t1 = 0.004 # Chirp duration 4 ms
t2 = 0.002 # Chirp duration 2 ms
pause = 0.008 # Pause 8 ms
# Chirp generation
def generate_chirp(f0, f1, t, fs):
t = np.linspace(0, t, int(fs * t))
return chirp(t, f0=f0, f1=f1, t1=t[-1], method="linear")
# Function to generate the signal
def generate_signal(fs, t1, t2, pause):
signal = []
# First chirp 18-34 kHz, 4 ms, pause 8 ms
signal.extend(generate_chirp(18000, 34000, t1, fs))
signal.extend(np.zeros(int(fs * pause)))
# Second and third chirps 34-18 kHz, 4 ms, pause 8 ms
for _ in range(2):
signal.extend(generate_chirp(34000, 18000, t1, fs))
signal.extend(np.zeros(int(fs * pause)))
# Remaining chirps 34-18 kHz, 2 ms, no pause
for _ in range(129):
signal.extend(generate_chirp(34000, 18000, t2, fs))
return np.array(signal)
if __name__ == "__main__":
f0 = 18000
f1 = 34000
# Signal generation
signal = generate_signal(fs, t1, t2, pause)
fn = 128
# Normalize the signal to the range [-1, 1]
signal = signal / np.max(np.abs(signal))
# write("1834_cs1.wav", fs, signal.astype(np.float32))
signal = signal * 8192
signal = signal.astype(np.int16)
# Save the signal as a WAV file
# write("1834_cs1.wav", fs, signal)
# with TdmsWriter("1834_cs1.tdms") as tdms_writer:
# channel = ChannelObject("Group", "Signal", signal)
# tdms_writer.write_segment([channel])
# Calculate the duration of the signal
duration = len(signal) / fs
print(f"Total duration of the signal: {duration} seconds")
print(len(signal))
fig, ax = plt.subplots(2, 1, sharex=True, figsize=(12, 8))
# Display the resulting signal
ax[0].plot(signal)
ax[0].set_title("Resulting Signal")
ax[0].set_xlabel("Sample")
ax[0].set_ylabel("Amplitude")
# Calculate the Continuous Wavelet Transform (CWT) of the signal
freqs, cwt_matrix = fcwt.cwt(signal, fs, f0, f1, fn)
ax[1].imshow(np.abs(cwt_matrix), extent=[0, len(signal), 1, 128], cmap='PRGn', aspect='auto',
vmax=abs(cwt_matrix).max(), vmin=-abs(cwt_matrix).max())
ax[1].set_title("CWT Matrix")
ax[1].set_xlabel("Sample")
ax[1].set_ylabel("Scale")
plt.show()