You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB如何计算两个信号的相似度并获取正确的一致性/相干性指标

信号一致性度量问题解答

首先可以明确你对这类指标的基础认知是正确的:信号一致性度量的核心作用就是量化两个信号的相似性、对等性,常被用于同源信号判断、故障特征匹配、信号同步校验等场景。
针对你提到的几个阈值和异常值问题,逐一说明:

  • 若你使用的是归一化后取值范围落在[0,1]区间的一致性指标(比如归一化互相关系数、幅值平方相干系数),0.5~1的区间确实代表两个信号的匹配度高、相似性强,大概率是变化规律高度一致或同源的信号。
  • 同样针对[0,1]区间的归一化指标,0.1~0.43的区间确实说明信号相干性弱、相似性低,两个信号不同的概率更高。但注意不能直接下绝对结论:如果信号未做时间对齐、其中一路叠加了强噪声,也可能导致指标偏低,建议先做预处理后再重新计算校验。
  • 计算得到小于0的指标值,不能证明两个信号完全不同,这个假设不成立。首先未归一化的互相关、协方差类指标本身就存在负数值的可能,负数一般代表两个信号呈反相相关关系,并不是“完全不相关”,完全不相关的独立信号归一化后的相关指标应该趋近于0,而非负数。
测试代码问题修正

你贴出的代码存在多处逻辑问题,这也是你可能得到异常指标值的原因,问题点标注如下:

s1 = signal3
s2 = signal4     

% 问题1:向量直接用~=判断会返回逻辑数组,if判断逻辑错误,应改为isequal(s1,s2)
if  s1 ~= s2
    % 问题2:xcorr未做归一化,输出的C1、C2是未归一化互相关序列,取值范围不在[0,1]
    [C1] = xcorr(s1);        
    [C2] = xcorr(s2);
    signal_mix = C1.*C2   %mixing vector
    signal_mix1 = signal_mix
else
    % 问题3:此处仅做相等判断无赋值操作,属于冗余代码
    s1(1,:) == s2(1,:)
    s3 = s1
    % 问题4:连续赋值直接覆盖了s3的原值,上一行s3=s1无意义
    s3= s2
    signal_mix = s2
end

n =2;
   
% 问题5:循环仅遍历了最后一个索引,应改为for i = 1:length(signal_mix1)
for i = length(signal_mix1)
    % 问题6:若C1、C2存在负数,min/max的比值会出现负数,就是你得到负指标的直接原因
    signal_mix1(i) = min(C1(i),C2(i))/ max(C1(i),C2(i)) % consistency score
    % 问题7:仅对单个元素求和无意义,应把求和操作放到循环外计算sum(signal_mix1)
    signal_mix2 = sum(signal_mix1(i))
end

你提供的信号波形示意图如下:
信号波形示意图

内容的提问来源于stack exchange,提问作者Natra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 04:21:01