2013-08-01 6 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 central의 파형 처리 도구 상자를 살펴 보는 것도 좋습니다.

+0

입력 해 주셔서 감사합니다. 나는 일종의 일을했습니다! 임계 값을 제외한 모든 항목이 자동으로 실행됩니다. 때로는 잡음 때문에 조정해야합니다! 나는 또한 노이즈를 줄이기 위해 로우 패스 필터를 사용하고 있지만 때로는 충분하지 않습니다. 어쨌든 고마워. – S88S

2

두 개의 신호, x와 y, Y는 X의 이동 버전 각되는 ANX 1 매트릭스가있는 경우 :

[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의 길이에 비해 상대적으로 작아야합니다. 많은 것은 잡음 레벨과 오프셋의 특성에 달려 있습니다.