1.首先介绍gccphat函数
- 语法:
tau = gccpaht(sig, refsig)
计算信号sig与参考信号refsig之间的时间延迟tau。该函数假设信号和参考信号来自同一个源。为了估计延迟,gccphat找到sig和refsig之间相互关联的峰值的位置,互相关性计算采用广义交叉相关相位变换(GCC-PHAT)算法,时间延迟时对应于默认采样频率为1Hz的采样间隔的倍数。
tau = gccphat(sig, refsig, fs)
指定信号的采样率。时延是采样频率对应的采样间隔的倍数,所有输入信号应具有相同的采样率。
[tau, R, lag] = gccphat(__)
返回互相关值和相关时间滞后,使用以前语法中的任何参数,滞后是采样间隔的倍数。互相关信道数等于sig中的信道数
% 两个信号与参考信号的互相关性
% 加载一个锣声信号
load gong;
% 用锣信号作为参考信号
refsig = y;
% 将信号复制两次,引入5秒和25秒的时间延迟
delay1 = 5;
delay2 = 25;
sig1 = delayseq(refsig,delay1);
sig2 = delayseq(refsig,delay2);
tau_est = gccphat([sig1,sig2],refsig)
% 信号与参考信号之间的互相关性
load gong;
delay = 0.005;
refsig = y;
sig = delayseq(refsig,delay,Fs);
tau_est = gccphat(sig,refsig,Fs)
% 画三个信号与参考信号之间的互相关性
% 加载一个采样率8192Hz的音乐声音信号。然后将信号复制三次,并在信号之间引入时间延迟。
% 估计延迟信号和参考信号之间的时间延迟。绘制相关值
% 画三个信号与参考信号之间的互相关性
% 加载一个采样率8192Hz的音乐声音信号。然后将信号复制三次,并在信号之间引入时间延迟。
% 估计延迟信号和参考信号之间的时间延迟。绘制相关值
load handel;
dt = 1/Fs;
refsig = y;
delay1 = -5.2*dt;
delay2 = 10.3*dt;
delay3 = 7*dt;
sig1 = delayseq(refsig,delay1,Fs);
sig2 = delayseq(refsig,delay2,Fs);
sig3 = delayseq(refsig,delay3,Fs);
[tau_est,R,lags] = gccphat([sig1,sig2,sig3],refsig,Fs);
% gccpaht函数估计延迟到最近的样本间隔
disp(tau_est*Fs)
% 画相关性函数
plot(1000*lags,real(R(:,1)))
xlabel('Lag Times (ms)')
ylabel('Cross-correlation')
axis([-5,5,-.4,1.1])
hold on
plot(1000*lags,real(R(:,2)))
plot(1000*lags,real(R(:,3)))
hold off
% 画几个信号之间的相关性
% 加载一个采样率8192Hz的音乐声音信号。然后将信号复制两次,并在两个信号和参考信号之间引入时间延迟。估计时间
% 延迟,并绘制所有信号对之间的互相关函数
load handel;
dt = 1/Fs;
refsig = y;
delay1 = -5.7*dt;
delay2 = 10.2*dt;
sig1 = delayseq(refsig,delay1,Fs);
sig2 = delayseq(refsig,delay2,Fs);
[tau_est,R,lags] = gccphat([refsig,sig1,sig2],Fs);
% 以样本间隔为单位显示时间延迟。该算法估计时间延迟量化到最近的样本间隔。三个信号的互相关产生9个可能的延时
disp(tau_est*Fs)
for n=1:9
plot(1000*lags,real(R(:,n)))
if n==1
hold on
xlabel('Lag Times (ms)')
ylabel('Correlation')
axis([-5,5,-.4,1.1])
end
end
hold off