Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 仅当此时间序列与另一个时间序列重叠时,才对该时间序列使用findpeaks函数_Matlab_Threshold_Significance - Fatal编程技术网

Matlab 仅当此时间序列与另一个时间序列重叠时,才对该时间序列使用findpeaks函数

Matlab 仅当此时间序列与另一个时间序列重叠时,才对该时间序列使用findpeaks函数,matlab,threshold,significance,Matlab,Threshold,Significance,我有一个关于FindPeak的问题。我想用它来检测信号时间序列(信号1)中的峰值。这很好,但我也有代理数据,作为重要的阈值,长度相等(信号2)。现在我想在信号1上使用FindPeak,但前提是信号1在该时间点大于信号2。我尝试使用FindPeak的常规属性,但到目前为止没有任何效果……以下是我现在所拥有的: GPDC是一款9x9x512双卡。DIM 1包含在Xi-XJ方向上通过多变量自回归模型估计的部分定向相干值,DIM 2包含XJ席席相同的信息,而DIM 3代表频率箱的数目。code>eEPD

我有一个关于FindPeak的问题。我想用它来检测信号时间序列(信号1)中的峰值。这很好,但我也有代理数据,作为重要的阈值,长度相等(信号2)。现在我想在信号1上使用FindPeak,但前提是信号1在该时间点大于信号2。我尝试使用FindPeak的常规属性,但到目前为止没有任何效果……以下是我现在所拥有的:

GPDC
是一款9x9x512双卡。DIM 1包含在Xi-XJ方向上通过多变量自回归模型估计的部分定向相干值,DIM 2包含XJ席席相同的信息,而DIM 3代表频率箱的数目。code>eEPDCsth是一个9x9x512双精度文件,包含相应的代理数据
f
是包含频率值的1x512双精度编码。我认为现在>=引用不起作用,因为它不是特定于时间的,也就是说,它不是逐点比较信号,而是总体比较信号。这是我的主要问题,我想

Sz=9;
for i=1:Sz
    for j=1:Sz
    if squeeze(GPDC(i,j,:)) >= squeeze(eEPDCsth(i,j,:))
       [pks_1{i,j},locs_1{i,j}] = findpeaks(squeeze(GPDC(i,j,:)),f,'npeaks',5,'MinPeakHeight', .1);
    end
    end
end

不确定我是否正确理解了这个问题。从您的代码中可以清楚地看到,您有峰值的数据以及这些峰值出现的坐标

如果您只想要第二个时间序列值较低的峰值,“只需循环遍历所有峰值-检查峰值(i)是否低于LOC(i)处的第二个序列值-删除低于同一LOC处第二个序列值的峰值”


希望这有帮助。

不确定我是否正确理解了这个问题。从您的代码中可以清楚地看到,您有峰值的数据以及这些峰值出现的坐标

如果您只想要第二个时间序列值较低的峰值,“只需循环遍历所有峰值-检查峰值(i)是否低于LOC(i)处的第二个序列值-删除低于同一LOC处第二个序列值的峰值”


希望这能有所帮助。

这里有一个例子,可以完成您所描述的内容。您没有指定“f”向量的实际内容,因此在本例中,我将其设置为1:512

% data for testing
GPDC = rand(9,9,512);
eEPDCsth = rand(9,9,512);
f = 1:512; % the value of the 'f' vector wasn't specified in question

Sz=9;
for i=1:Sz
    for j=1:Sz
        % find the 'raw' peaks below thresholding
        [peak_val_raw, peak_indices_raw] = findpeaks(squeeze(GPDC(i,j,:)),'npeaks',5,'MinPeakHeight', .1);

        % only keep peaks that are above the corresponding threshold value
        peaks_above_threshold = squeeze(GPDC(i,j,peak_indices_raw)) > squeeze(eEPDCsth(i,j,peak_indices_raw));
        peak_values_thresholded = peak_val_raw(peaks_above_threshold);
        peak_indices_thresholded = peak_indices_raw(peaks_above_threshold);

        pks_1{i,j} = peak_values_thresholded;
        % index into 'f' vector to match code in original question
        locs_1{i,j} = f(peak_indices_thresholded); 

    end
end

下面是一个例子,可以完成您所描述的内容。您没有指定“f”向量的实际内容,因此在本例中,我将其设置为1:512

% data for testing
GPDC = rand(9,9,512);
eEPDCsth = rand(9,9,512);
f = 1:512; % the value of the 'f' vector wasn't specified in question

Sz=9;
for i=1:Sz
    for j=1:Sz
        % find the 'raw' peaks below thresholding
        [peak_val_raw, peak_indices_raw] = findpeaks(squeeze(GPDC(i,j,:)),'npeaks',5,'MinPeakHeight', .1);

        % only keep peaks that are above the corresponding threshold value
        peaks_above_threshold = squeeze(GPDC(i,j,peak_indices_raw)) > squeeze(eEPDCsth(i,j,peak_indices_raw));
        peak_values_thresholded = peak_val_raw(peaks_above_threshold);
        peak_indices_thresholded = peak_indices_raw(peaks_above_threshold);

        pks_1{i,j} = peak_values_thresholded;
        % index into 'f' vector to match code in original question
        locs_1{i,j} = f(peak_indices_thresholded); 

    end
end

那你到底做了什么?显示一些代码。不要用代码注释。正是因为这个原因,你的问题下面有一个编辑按钮。请把它变成一个完全可回答的问题,遵循网站规则。我的坏!我现在更新了。希望这更好你的实际投入是什么?它们有多大?尺寸代表什么?也就是说,你认为代码在做什么?(在问题中回答,完成后用评论ping我)谢谢,我现在更详细地说明了。那么你实际上做了什么?显示一些代码。不要用代码注释。正是因为这个原因,你的问题下面有一个编辑按钮。请把它变成一个完全可回答的问题,遵循网站规则。我的坏!我现在更新了。希望这更好你的实际投入是什么?它们有多大?尺寸代表什么?也就是说,你认为代码在做什么?(回答问题并在完成后使用评论ping我)谢谢,我现在详细说明了。嘿,非常感谢。我试过了,但findpeaks函数中的“f”向量不见了吗?因为我还想在FindPeak中指定频率范围……如果“f”向量(FindPeak的MATLAB文档称之为“位置向量”)特定于FindPeak,那么返回的位置将是f,而不是它们的原始索引。但是在这里,我们需要知道原始索引,以便我们可以索引到信号和比较数据集中进行阈值比较。循环的最后一行将超过阈值的值的位置索引回“f”向量。嘿,非常感谢。我试过了,但findpeaks函数中的“f”向量不见了吗?因为我还想在FindPeak中指定频率范围……如果“f”向量(FindPeak的MATLAB文档称之为“位置向量”)特定于FindPeak,那么返回的位置将是f,而不是它们的原始索引。但是在这里,我们需要知道原始索引,以便我们可以索引到信号和比较数据集中进行阈值比较。然后,循环的最后一行将超过阈值的值的位置索引回“f”向量。