Algorithm “a”是什么;“好”;使用互相关比较2个信号时的R值?

Algorithm “a”是什么;“好”;使用互相关比较2个信号时的R值?,algorithm,matlab,statistics,signal-processing,Algorithm,Matlab,Statistics,Signal Processing,我为事先有点罗嗦而道歉:如果你想跳过所有复杂的背景,你可以在下面看到我的问题 这几乎是我之前发布的关于如何比较两个1D(时间相关)信号的问题的后续。我得到的答案之一是使用互相关函数(MATLAB中的xcorr),我做到了 背景资料 也许一点背景信息会有用:我正在尝试实现一个独立的组件分析算法。我的一个非正式测试是:(1)通过(a)生成2个随机向量(1x1000),(b)将向量组合成2x1000矩阵(称为“S”),并将其乘以2x2混合矩阵(称为“a”),生成一个新矩阵(称为“T”) 简言之:T=A

我为事先有点罗嗦而道歉:如果你想跳过所有复杂的背景,你可以在下面看到我的问题

这几乎是我之前发布的关于如何比较两个1D(时间相关)信号的问题的后续。我得到的答案之一是使用互相关函数(MATLAB中的xcorr),我做到了

背景资料 也许一点背景信息会有用:我正在尝试实现一个独立的组件分析算法。我的一个非正式测试是:(1)通过(a)生成2个随机向量(1x1000),(b)将向量组合成2x1000矩阵(称为“S”),并将其乘以2x2混合矩阵(称为“a”),生成一个新矩阵(称为“T”)

简言之:T=A*S

(2) 然后,我运行ICA算法生成混合矩阵的逆矩阵(称为“W”),(3)将“T”乘以“W”,以(希望)重建原始信号矩阵(称为“X”)

简言之:X=W*T

(4) 我现在想比较“S”和“X”。虽然“S”和“X”是2x1000,但我只是将
S(1,:)
X(1,:)
S(2,:)
X(2,:)
,每一个都是1x1000,使它们成为1D信号。(我还有另一个步骤,确保这些向量是相互比较的适当向量,并且我还将信号标准化)

因此,我目前的困惑是如何对
S(1,:)
X(1,:)
的匹配程度进行“分级”,同样地,对
S(2,:)
X(2,:)
的匹配程度进行“分级”

到目前为止,我已经使用了类似的东西:
r1=max(abs(xcorr(S(1,:),X(1,:))

我的问题 假设使用互相关函数是比较两个信号相似性的有效方法,那么什么才是对信号相似性进行评级的良好R值呢?维基百科指出,这是一个非常主观的领域,因此我遵从那些可能在该领域有经验的人的更好判断


正如你可能意识到的,我根本不是EE/DSP/统计学背景(我是一名医科学生),所以我正在经历一场“火中洗礼”现在,我非常感谢能得到的所有帮助。谢谢!

因为它们应该相等,所以相关系数应该很高,介于.99和1之间。我也会从你的计算中去掉max和abs函数

编辑:
我说得太早了。我把互相关和相关系数混淆了,这是完全不同的。我的答案可能没有多大价值。

一个好的起点是通过计算每个信号的自相关来了解完美匹配的情况(即做“互相关”)我同意,结果是主观的。涉及到元素对元素的差异平方和的东西会有一些值。两个相同的数组会给出该形式的值0。你必须决定什么值会变为“坏”.组成两个“不太糟糕”的不同向量,并找到它们的互相关系数作为指导


(旁白:如果你在做一个相关系数,其中1或-1会很好,0会很糟糕,生物统计学家告诉我,现实生活中的值0.7非常好。我知道这并不完全是你在做的事情,但有关相关系数的评论早就提到了。)

这是一个完全的猜测,但我猜max(abs(xcorr(S(1,:),X(1,:)))>0.8意味着成功。只是出于好奇,你对max(abs(xcorr(S(1,:),X(2,:))得到了什么样的值

验证算法的另一种方法可能是比较A和W。如果W计算正确,它应该是A^-1,那么您可以计算像|
A*W
-I |这样的度量吗?也许您必须通过跟踪
A*W
来进行规范化


回到你最初的问题,我来自DSP背景,所以我要处理相当无噪声的信号。我知道这不是生物学上的奢侈:)所以我的0.8猜测可能是非常乐观的。也许看看你所在领域的一些文献,即使它们没有准确地使用互相关,也可能有用。

通常在这种情况下,人们会谈论“错误接受率”和“错误拒绝率”。 第一个描述了算法对非相似信号表示“相似”的次数,第二个则相反

因此,选择阈值成为这些标准之间的权衡。要使FAR=0,阈值应为1;要使FRR=0,阈值应为-1

因此,您可能需要决定在您的情况下,FAR和FRR之间的哪种权衡是可接受的,这将为阈值提供正确的值

从数学上讲,这可以用不同的方式表示。仅举几个例子: 1.将一些费率固定在可接受的值,并将另一个费率最小化 2.最小化最大值(FRR,FAR) 3.尽量减少aFRR+bFAR

编辑:直接回答您关于R值的问题,见下文)

一种方法是使用互相关。请记住,您必须规范化振幅并校正延迟:如果您有信号S1,信号S2的形状相同,但振幅的一半并延迟了3个样本,那么它们仍然是完全相关的

例如:

>> t = 0:0.001:1;
>> y = @(t) sin(10*t).*exp(-10*t).*(t > 0);
>> S1 = y(t);
>> S2 = 0.4*y(t-0.1);
>> plot(t,S1,t,S2);

这些应该有一个完美的相关系数。一种计算方法是使用最大互相关:

>> f = @(S1,S2) max(xcorr(S1,S2));

f = 

    @(S1,S2) max(xcorr(S1,S2))

>>  disp(f(S1,S1)); disp(f(S2,S2)); disp(f(S1,S2));
   12.5000

    2.0000

    5.0000
xcorr()
的最大值负责信号之间的时间延迟。就振幅校正而言,您可以对信号进行规格化,使其自互相关为1.0,或者您可以将等效步骤折叠为以下步骤:

ρ2=f(S1,S2)2/(f(S1,S1)*f(S2,S2)<
>> t = 0:0.001:1;
>> y = @(a,t) sin(a*t).*exp(-a*t).*(t > 0);
>> S1=y(10,t);
>> S2=0.4*y(9,t-0.1);
>> f(S1,S2)/sqrt(f(S1,S1)*f(S2,S2))

ans =

    0.9959
>> [A,i]=max(xcorr(S1,S2)); tshift = i-length(S1);
>> S2fit = zeros(size(S2)); S2fit(1-tshift:end) = A/f(S1,S1)*S1(1:end+tshift);
>> plot(t,[S2; S2fit]); % fit S2 using S1 as a basis
>> plot(t,[S2-S2fit]);  % residual
>> S2res=S2-S2fit;
>> dot(S2res,S2res)/dot(S2,S2)

ans =

    0.0081

>> sqrt(dot(S2res,S2res)/dot(S2,S2))

ans =

    0.0900