如何在MATLAB中同步两个或多个波形?

时间:2013-08-01 08:04:27

标签: matlab synchronization waveform

我将尝试更具体:我有几个信号的时间历史,几乎所有相同的行为(正弦波),但都是从不同的时间点开始。如何自动检测初始时间延迟并将其删除,以便所有正弦波在同一时刻开始?

2 个答案:

答案 0 :(得分:2)

如果你有两个信号,x和y,每个都是一个n x 1矩阵,其中y是x的移位版本:

[c,lags] = xcorr(x,y); % c is the correlation, should have a clear peak
s = lags(c==max(c)); % s is the shift you need
y2 = circshift(y,s); % y2 should now overlap x

(仅限演示目的 - 我建议您不要将实际数据圈起来)。在这种情况下,您正在寻找的转变理想情况下与x和y的长度相比应该相对较小。很大程度上取决于噪音水平和偏移的性质。

答案 1 :(得分:0)

以下在低噪音条件下和快速采样时效果很好,并且可能取决于您对准确度的要求。它使用简单的阈值,因此当事情变得嘈杂时会受到不准确的影响。将thresh调整为高于噪音的低值。

Nwav = 3;
Np = 100;
tmax = 50;
A = 1000;
Nz = Np/5;

%%%%%%%%%%%%%%
thresh = A/50;
%%%%%%%%%%%%%%



% generate some waveforms
t = [0:tmax/(Np-1):tmax].';
w = rand(1,Nwav);
offs = round(rand(1,Nwav)*100);
sig = [A*sin(t(1:end-Nz)*w) ; zeros(Nz,Nwav)] + randn(Np,Nwav);
for ii=1:Nwav
    sig(:,ii) = circshift(sig(:,ii),round(rand()*Nz));
end
figure, plot(t,sig)
hold on, plot(t,repmat(thresh,length(t),1),'k--')


% use the threshold and align the waveforms
for ii=1:Nwav
    [ir ic] = find(sig(:,ii)>thresh,1)
    sig(:,ii) = circshift(sig(:,ii),-ir+1);
end
figure, plot(t,sig)
hold on, plot(t,repmat(thresh,length(t),1),'k--')

还有改进的余地(噪音过滤,坡度检测),但这应该让你开始。

我还建议您在matlab中心查看波形处理工具箱。