如何根据阈值将信号分成相等的块

How to break up a signal into equal blocks based on a threshold

我有一个保存为 csv 文件的信号。当超过阈值时,我试图将信号分解成固定长度(比如 100 个样本)的单独块以进行分析(fft、小波、振幅等)。如果将阈值设置为 5,我仍然需要在块中包含的阈值之前一点(比如主峰前 100 个样本中的 30 个,主峰后 70 个)。我该怎么做,每个信号脉冲只得到 1 个块输出? 非常感谢!

(https://imgur.com/IZuqgMM)

我尝试遍历数组以找到高于阈值的数据点,但我正在努力将其减少到每个脉冲一个点。

假设您的信号在 x 中,以下将找到超过阈值的第一个峰值的索引。

threshold = 5;
n_pre = 30;
n_post = 70;

ind_first_peak = find(x > threshold, 1, 'first');
ind_pre = ind_first_peak - n_pre
ind_end = ind_first_peak + n_post;

ind_selection = ind_start:ind_end;
x_selection = x(ind_selection);

现在我们可以从原始信号中去除第一个峰值,然后重复:

x_new = x;
x_new(x_selection) = []; % remove the first peak, so x_new can be used by find again.

这不是很可靠,但根据您的信号和阈值可能会起作用。如果您有权访问信号处理工具箱,则可以检查 findpeaks