【问题标题】:Calculate all peak-to-peak amplitudes in a signal in MATLAB在 MATLAB 中计算信号中的所有峰峰值幅度
【发布时间】:2016-05-03 02:56:20
【问题描述】:

我已经从信号中提取了所有峰值(最大值和最小值),现在有 2 个包含它们的电压值的向量和两个包含它们的索引的向量。

我想根据这个信号计算所有不同的峰峰值(最小值到最大值和最大值到最小值)。最终,这是为了找到这个信号的最大峰峰值。因为信号在漂移,而且我没有“被允许”对它进行高通滤波,所以这是我能想到找到这个值的唯一方法。然而,我正在挠头来实现它。

对于构建此代码的任何帮助或实现我的目标的其他想法,我将不胜感激。提前非常感谢。

这是我的数据点的示例。 PosVol 是正峰值的电压,NegVol 是负峰值的电压。 PosIndNegInd 分别是索引。

PosVol = [ 0.0437   0.1680  0.2089  0.5719  0.9146  0.8306  0.8646 1.0000  0.6541  0.1628 -0.3038 -0.0990   0.3602   0.4707  0.2968  0.1793];
NegVol = [ 1.2838   1.6351  1.5026  1.1441  1.2331  1.2732  0.9188  0.1841  0.0412  0.6215  1.1444  1.0828  0.5687   0.2590   0.3917   0.5605];
PosInd = [ 1533  4057  6609 9038  11426 13831  16403  19009  21206 23609 27015   29758   32294  34789   37147   39642];
NegInd = [ 2304 4733 7283  9768  12291  14817   17397  20105   22899    25851  28218   30706  33317   36211  38628    41123];

【问题讨论】:

    标签: matlab signals signal-processing


    【解决方案1】:

    我建议为了得到所有 - 比如说下降的侧翼 - 峰值到峰值,你迭代正指数并做:

    PeakPeakFalling = zeros(1,size(PosInd,2));
    for ii=1:size(PosInd,2)
        neg_index = find(NegInd(1,:)>PosInd(1,ii),1);
        PeakPeakFalling(1,ii)=PosVol(1,ii)+NegVol(1,neg_index);
    end
    

    这会找到以下最小值的下一个索引,并以此计算值的差异。

    以同样的方式,您也可以构建PeakPeakRising 向量,然后找到所有峰峰值的最大值。我在这里假设NegVol 值实际上是负电压。

    【讨论】:

    • 太棒了!非常感谢您的快速回答。它就像一种享受!
    • 需要更多的智慧!如果我的峰值数量不均匀,我会收到错误Assignment has more non-singleton rhs dimensions than non-singleton subscripts。可能会出现负峰值比正峰值少一个,反之亦然。我该如何解决这个问题?
    • @user3406207 可能find 实际上没有找到任何东西,因此返回一个空数组。您可以使用if(~isempty(neg_index)) 检查并动态创建PeakPeakFalling 并仅在find 返回某些内容时添加峰到峰距离。
    • 是的,这正是问题所在!谢谢一百万!
    猜你喜欢
    • 1970-01-01
    • 2014-12-02
    • 1970-01-01
    • 2017-08-14
    • 2019-08-12
    • 1970-01-01
    • 2017-06-09
    • 2020-04-16
    • 1970-01-01
    相关资源
    最近更新 更多