仅当某个时间序列使另一个时间序列黯然失色时,才对该时间序列使用 findpeaks 函数



我有一个关于查找峰的问题。我想使用它来检测信号时间序列(信号 1(中的峰值。这工作正常,但我也有代理数据,作为等长的显著性阈值(信号 2(。我现在想在信号 1 上使用查找峰值,但前提是信号 1 在该时间点大于信号 2。我尝试使用 findpeaks 的常规属性,但到目前为止没有任何效果......这是我现在拥有的:

GPDC是9x9x512的双人间。Dim 1 包含通过多变量自回归模型在方向 xi - xj 上估计的部分有向相干值,Dim 2 包含相同的 xj -xi 值,Dim 3 表示频率箱的数量。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

下面是一个应该完成您所描述的示例。您没有指定"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

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

如果您只想要第二个时间序列具有较低值的峰值,"只需遍历所有峰值 - 检查 locs(i( 处的峰值 (i( 值是否低于第二个序列的值 - 删除低于相同位置处第二个序列值的峰值"。

希望这有帮助。

最新更新