【问题标题】:How to break up a signal into equal blocks based on a threshold如何根据阈值将信号分成相等的块
【发布时间】:2019-09-10 20:55:50
【问题描述】:

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

(https://imgur.com/IZuqgMM)

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

【问题讨论】:

    标签: matlab signals signal-processing


    【解决方案1】:

    假设您的信号位于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

    【讨论】:

    • 谢谢!我认为这应该适用于我的信号,因为在小波降噪后它的噪声非常低。我也会看看信号处理工具箱。干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    相关资源
    最近更新 更多