2013-08-01 392 views
1

我會試着更具體一點:我有幾個時間歷史的信號幾乎都有相同的行爲(正弦波),但都在不同的時間點開始。我如何自動檢測初始時間延遲並將其刪除,以便所有正弦波在同一時刻開始?如何在MATLAB中同步兩個或更多波形?

+0

聽起來像你試圖重新示波器的行爲。您可以發佈可用於重現信號的圖像或代碼嗎? 「幾乎相同」不是很有幫助。正弦波開始前信號是靜態的嗎? –

+0

我可以在評論中發佈圖片嗎?但無論如何,只要想象你有3個相同振幅和頻率的正弦波,它們在不同的瞬間開始。我想要做的是「同步」他們,使他們都在同一時刻開始。我已經完成了這個手動切割3個向量,以消除初始偏移量,但我正在尋找一個自動完成相同事情的函數。我也嘗試使用'xcorr',但是我得到的回報要麼不是很有用,要麼我不知道如何使用它。任何幫助? – S88S

回答

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中心爲實例。

+0

謝謝您的輸入!我一直在努力!一切都是自動的,除了門檻!有時我必須因噪音而調整它!我也使用低通濾波器來減少噪音,但有時還不夠!不管怎樣,謝謝你 – S88S

2

如果你有兩個信號,x和y,每個ANX 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 

(演示僅供參考 - 我不建議你circshift實際數據)。與x和y的長度相比,在這種情況下你所尋找的變化應該相對較小。很大程度上取決於噪聲水平和偏移的性質。

相關問題