我有一个一维信号,其中一些部分处于基线,一些部分由于刺激而处于更高的幅度。我想将受刺激的部分分开。 这是附加信号的图像 从图像中显示的信号中,我想获得受激信号的起点和终点。 可以使用以下代码生成信号
import numpy as np
import matplotlib.pyplot as plt
import random
def generate_random_decimal_array(start, end, size):
random_array = [random.uniform(start, end) for _ in range(size)]
return random_array
# Simulation parameters
fs = 200 # Sampling frequency (Hz)
t_total = 5 # Total simulation time (seconds)
# Time vector
t = np.linspace(0, t_total, int(fs * t_total), endpoint=False)
# Signal parameters
baseline_amplitude = 0.05
stimulus_amplitude = 0.75
stimulus_duration = 1 # Duration of the stimulus (seconds)
recovery_duration = 1 # Duration of the recovery period after stimulus (seconds)
num_stimuli = 3 # Number of stimulated regions
# Initialize signal with baseline noise
signal = baseline_amplitude * np.random.randn(len(t))
# Randomly choose start times for each stimulated region
stimulus_periods = []
for _ in range(num_stimuli):
start = random.randint(0, len(t) - int(fs * (stimulus_duration + recovery_duration)))
end = start + int(fs * stimulus_duration)
stimulus_periods.append((start, end))
# Apply stimulus and recovery for each period
for start, end in stimulus_periods:
signal[start:end] = generate_random_decimal_array(0.3, 1.5, (end - start))
recovery_start = end
recovery_end = recovery_start + int(fs * recovery_duration)
signal[recovery_start:recovery_end] = baseline_amplitude * np.random.randn(recovery_end - recovery_start)
# Plot the simulated signal
plt.plot(t, signal)
plt.title('Simulated Signal with Multiple Stimuli')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.grid(True)
plt.show()