广义互相关(Generalized Cross-Correlation, GCC)方法是一种改进的互相关分析技术,用于更准确地估计信号的时间延迟。这种方法特别适用于噪声环境中的时延估计,因为它通过特定的加权处理提高了互相关函数的峰值的显著性,从而更容易准确地确定时延。
提出一种基于频率滑动广义互相关的信号时延估计方法,压缩包=程序+数据+参考文献。
demo代码如下:
clear all;
set(0,'defaulttextinterpreter','latex')
close all;
load teo4.mat
x1 = x(:,4);
x2 = x(:,1);
SNR = 25;
Px = 0.5*(mean([x1(:); x2(:)].^2));
Pn = Px*10^(-SNR/10);
rng('default')
x2 = x2 + sqrt(Pn)*randn(size(x2));
x1 = x1 + sqrt(Pn)*randn(size(x1));
trueTDOA = 92;
%% Short-Time Windowing
wlen = 2048;
hop = 512;
w = hann(wlen);
x1ef = enframe(x1,w,hop).';
x2ef = enframe(x2,w,hop).';
%% Compute FS-GCC for three speech frames (39, 35 and 55)
Nfft = 2048;
B = 128;
M = 32;
ntest = [39, 35, 55];
Ntest = length(ntest);
for n = 1:Ntest
%% Compute FS-GCC Matrix
xinput = [x1ef(:,ntest(n)), x2ef(:,ntest(n))];
[FSGCCmat,lags,tpwin] = msrpfsgcc(xinput,Nfft,B,M);
figure(1), subplot(3,4,(n-1)*4+1);
imagesc(lags,[],abs(FSGCCmat.'));
xticks([-200 -100 0 100 200])
pbaspect([1 1 1])
xlim([-200 200])
xlabel('$\tau$')
ylabel('$l$');
if n == 1
title({'FS-GCC','','$|\mathbf{R}|^{T}$'});
else
title('$|\mathbf{R}|^{T}$');
end
%% Compute Conventional GCC-PHAT
GCC = fftshift(real(ifft(exp(1i*angle(fft(xinput(:,1),Nfft).*conj(fft(xinput(:,2),Nfft)))))));
figure(1), subplot(3,4,(n-1)*4+2);
GCCn = GCC/max(GCC);
plot(lags,GCCn);
hold on, line([trueTDOA trueTDOA],[min(GCCn) 1],'color','red');
axis tight;
xlim([-200 200])
xticks([-200 -100 0 100 200])
pbaspect([1 1 1])
xlabel('$\tau$')
if n == 1
title({'Conventional GCC-PHAT','',''});
end
%% Compute SVD FS-GCC
[GCCsvd,lags] = getsvdfsgcc(FSGCCmat,200);
figure(1), subplot(3,4,(n-1)*4+3);
GCCsvdn = GCCsvd/max(GCCsvd);
plot(lags,GCCsvdn);
hold on, line([trueTDOA trueTDOA],[min(GCCsvdn) 1],'color','red');
axis tight;
pbaspect([1 1 1])
xlabel('$\tau$')
if n == 1
title({'SVD FS-GCC','',''});
end
%% Compute WSVD FS-GCC
[GCCwsvd,lags] = getwsvdfsgcc(FSGCCmat,tpwin,200);
figure(1), subplot(3,4,(n-1)*4+4);
GCCwsvdn = GCCwsvd/max(GCCwsvd);
plot(lags,GCCwsvdn);
hold on, line([trueTDOA trueTDOA],[min(GCCwsvdn) 1],'color','red');
axis tight;
pbaspect([1 1 1])
xlabel('$\tau$')
if n == 1
title({'WSVD FS-GCC','',''});
end
end
程序出图如下:
工学博士,担任《Mechanical System and Signal Processing》审稿专家,担任
《《控制与决策》,《系统工程与电子技术》,《电力系统保护与控制》等EI期刊审稿专家。
擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。