目录
finddelay函数的功能是估计信号之间的延迟。
语法
d = finddelay(x,y)
d = finddelay(x,y,maxlag)
说明
d = finddelay(x,y)得出输入信号x和y之间的延迟d的估计值,x和y中的延迟可以通过在前面加零来引入。
d = finddelay(x,y,maxlag)使用maxlag来查找x和y之间的估计延迟。
示例
x和Y是向量,没有指定maxlag
下面显示Y相对于X延迟了两个样本。
X = [1 2 3];
Y = [0 0 1 2 3];
D = finddelay(X,Y)
D = 2
这是Y相对于X超前三个样本的情况。
X = [0 0 0 1 2 3 0 0]';
Y = [1 2 3 0]';
D = finddelay(X,Y)
D = -3
下图说明了Y与X对齐但有噪声的情况。
X = [0 0 1 2 3 0];
Y = [0.02 0.12 1.08 2.21 2.95 -0.09];
D = finddelay(X,Y)
D = 0
如果Y是X的周期版本,则返回最小的可能延迟。
X = [0 1 2 3];
Y = [1 2 3 0 0 0 0 1 2 3 0 0];
D = finddelay(X,Y)
D = -1
x是向量,Y是矩阵,maxlag是标量
maxlag被指定为标量(相同的最大窗口大小)。
X = [0 1 2];
Y = [0 1 0 0;
1 2 0 0;
2 0 1 0;
0 0 2 1];
maxlag = 3;
D = finddelay(X,Y,maxlag)
D = 1×4
0 -1 1 1
x和Y是矩阵,没有指定maxlag
指定相同大小的X和Y。finddelay逐列工作。
X = [0 1 0 0;
1 2 0 0;
2 0 1 0;
1 0 2 1;
0 0 0 2];
Y = [0 0 1 0;
1 1 2 0;
2 2 0 1;
1 0 0 2;
0 0 0 0];
D = finddelay(X,Y)
D = 1×4
0 1 -2 -1
重复计算,但是现在添加一行额外的零作为y的第二行。
Y = [0 0 1 0;
0 0 0 0;
1 1 2 0;
2 2 0 1;
1 0 0 2;
0 0 0 0];
D = finddelay(X,Y)
D = 1×4
1 2 -1 0
X和Y是矩阵,并且指定了maxlag
创建两个多声道信号X和Y,使得Y的每个声道都有X的每个声道的延迟的相同副本。
X = [1 3 2 0 0 0 0 0;
0 0 0 0 0 1 3 2]';
Y = [0 0 0 1 3 2;
1 3 2 0 0 0]';
计算逐列延迟。为每个通道设置最大相关窗口大小8。
maxlag = [8 8];
D = finddelay(X,Y,maxlag)
D = 1×2
3 -5
将第一通道的相关窗口大小减小到3,第二通道的相关窗口大小减小到5。
maxlag = [3 5];
D = finddelay(X,Y,maxlag)
D = 1×2
3 -5
将第一个通道的相关窗口大小增加到5,将第二个通道的相关窗口大小减少到3。
maxlag = [5 3];
D = finddelay(X,Y,maxlag)
D = 1×2
3 -3
算法:
finddelay函数使用xcorr函数来确定用户指定的所有可能延迟下每对信号之间的互相关。然后计算每对信号之间的归一化互相关。估计的延迟由归一化互相关具有最大绝对值的滞后的负值给出。
如果一个以上的滞后导致互相关的最大绝对值,例如在周期信号的情况下,延迟被选择为这些滞后中最小的(绝对值)的负值。
成对的信号不必是彼此精确延迟的副本。然而,只有在至少一对延迟信号之间有足够的相关性时,估计的延迟才有意义。