编写一段matlab的代码,找出功率高于预选功率阈值的所有局部最大值,计算这些峰值之间的成对频率距离,并仅保留成对距离在有效人类心率范围内的对,找出成对距离大致相等并且形成连续路径的峰值
时间: 2024-05-31 12:07:52 浏览: 13
以下是一个可能的matlab代码示例:
% 输入信号为x,采样率为fs,预选功率阈值为threshold
% 假设x是一个行向量
% 计算功率谱密度
[Pxx, freq] = pwelch(x, [], [], [], fs);
% 找出所有局部最大值
[peaks, locs] = findpeaks(Pxx);
% 找出功率高于阈值的峰值
selected_peaks = peaks(peaks > threshold);
selected_locs = locs(peaks > threshold);
% 计算成对频率距离
freq_diffs = diff(freq(selected_locs));
% 仅保留成对距离在有效人类心率范围内的对
valid_pairs = (freq_diffs >= 40) & (freq_diffs <= 200);
% 找出成对距离大致相等并且形成连续路径的峰值
connected_pairs = bwconncomp(valid_pairs);
for i = 1:connected_pairs.NumObjects
idxs = connected_pairs.PixelIdxList{i};
if length(idxs) > 1
freq_diff_mean = mean(freq_diffs(idxs));
% 假设有效人类心率范围为60-100 bpm
if (freq_diff_mean >= 0.6*fs/100) && (freq_diff_mean <= 1*fs/60)
% 在原始功率谱密度曲线上标记这些峰值
hold on;
plot(freq(selected_locs(idxs)), selected_peaks(idxs), 'rx', 'MarkerSize', 10);
end
end
end