교차 상관을 사용하여 오실로스코프 신호의 시간 지연 추정


12

스코프에서 2 개의 신호를 녹음했습니다. 그들은 다음과 같이 보입니다 : 여기에 이미지 설명을 입력하십시오

Matlab에서 그들 사이의 시간 지연을 측정하고 싶습니다. 각 신호에는 샘플링 주파수가 2001000.5 인 2000 개의 샘플이 있습니다.

데이터는 csv 파일에 있습니다. 이것이 내가 지금까지 가진 것입니다.
전압 레벨 만 csv 파일에 있도록 csv 파일에서 시간 데이터를 삭제했습니다.

x1 = csvread('C://scope1.csv');
x2 = csvread('C://scope2.csv');  
cc = xcorr(x1,x2);
plot(cc);  

결과는 다음과 같습니다. 여기에 이미지 설명을 입력하십시오

내가 읽은 것에서 나는 이들 신호의 상호 상관을 취해야하며 이것은 시간 지연과 관련된 피크를 제공해야합니다. 그러나이 신호의 상호 상관을 취하면 2000에서 피크를 얻습니다. 정확하지 않습니다. 신호를 상호 연관시키기 전에이 신호에 대해 어떻게해야합니까? 방향을 찾고 있습니다.

편집 : DC 오프셋을 제거한 후 이것이 내가 얻는 결과입니다.
여기에 이미지 설명을 입력하십시오

좀 더 정의 된 시간 지연을 얻기 위해 이것을 정리할 수있는 방법이 있습니까?

편집 2 : 파일은 다음과 같습니다.
http://dl.dropbox.com/u/10147354/scope1col.csv
http://dl.dropbox.com/u/10147354/scope2col.csv


정확히 어떻게 상호 상관을하고 있습니까? 직접적인 질문에 대한 답으로, 상호 상관을하기 전에 신호에 대해 아무 것도 할 필요가 없지만, 경우에 따라 필터링하면 먼저 결과를 왜곡 할 수있는 노이즈를 제거하는 데 도움이됩니다.
Jim Clay

1
사용한 코드와 더 중요한 교차 상관 신호 플롯을 게시하십시오. 일부 도구 / 라이브러리는 그래프 중간에 (lag = 0) 점수를 표시합니다. Matlab이 그렇게하는지 기억하지 않습니다.
pichenettes

@pichenettes : 업데이트 된 게시물
Nick Sinas

@JimClay : 게시물 업데이트
Nick Sinas

@NickS. 신호가 완벽하게 정렬되면 cc 플롯 중간에 피크가 나타납니다. 2000에서 피크는 지연이 없음을 의미합니다. 이제 10 개의 샘플 지연이 있다고하겠습니다. 즉, signal2는 signal1에서 10 개의 샘플입니다. 이렇게하면 cc의 피크가 2000에서 2010 (또는 1990)으로 이동합니다. 따라서 시간 지연은 실제 최고 위치 인 MINUS 2000에 해당합니다.
Spacey

답변:


11

N

이 플롯에서 상기 제 2 신호는 사실상 멀리 특정 행하기 때문에 전적으로 고전 상호 상관 게다가 제, 다른 방법의 지연된 버전을 시도해야한다. 신호가 서로 지연된 버전 인 경우 교차 상관 (CC)은 단지 최대 가능성 추정기이기 때문입니다. 이 경우, 그들은 비정규성에 대해서도 아무 말도하지 않습니다.

이 경우, 작동 할 수 있는 것은 신호 의 상당한 에너지 에 대한 시간 추정이라고 생각 합니다. 물론 '유의적인'은 다소 주관적 일 수는 없지만 통계적 관점에서 신호를 보면 '유의적인'을 정량화하고 거기에서 갈 수 있다고 믿습니다.

이를 위해 다음을 수행했습니다.

1 단계 : 신호 엔벨로프를 계산합니다.

이 단계는 각 신호 의 힐버트 변환 출력의 절대 값 이 계산 되므로 간단 합니다. 엔벨로프를 계산하는 다른 방법이 있지만 이것은 매우 간단합니다. 이 방법은 본질적으로 신호의 분석 형식, 즉 위상 표현을 계산합니다. 당신이 절대 가치를 취할 때, 당신은 단계 이후에 에너지를 파괴하고 있습니다.

또한 신호 에너지의 시간 지연 추정을 추구하기 때문에이 접근 방식이 보장됩니다.

여기에 이미지 설명을 입력하십시오

2 단계 : 에지 보존 비선형 중간 필터로 노이즈 제거 :

이것은 중요한 단계입니다. 여기서 목표는 에너지 엔벌 로프를 부드럽게하는 것이지만, 가장자리를 빠르게하거나 매끄럽게 만들지 않고 상승 시간을 단축합니다. 실제로 이것에 전념하는 전체 필드가 ​​있지만 여기서는 비선형 Medial 필터를 쉽게 구현할 수 있습니다 . (중앙 필터링). 평균 필터링 과 달리 중간 필터링은 에지를 무효화 하지 않지만 중요한 에지를 크게 저하시키지 않으면 서 신호를 '부드럽게'만들 수 있기 때문에 강력한 기술 입니다. (창 길이가 홀수 인 경우). 여기서는 창 크기 25 샘플의 중간 필터를 선택했습니다.

여기에 이미지 설명을 입력하십시오

3 단계 : 시간 제거 : 가우스 커널 밀도 추정 함수 구성 :

위의 그림을 일반적인 방법 대신 옆으로 보면 어떻게 될까요? 수학적으로 말하면, 우리의 노이즈가 제거 된 신호의 모든 샘플을 y- 진폭 축에 투영하면 무엇을 얻을 수 있습니까? 이를 통해 우리는 말할 시간을 없애고 신호 통계를 연구 할 수있을 것입니다.

직관적으로 위의 그림에서 무엇이 나타 납니까? 소음 에너지는 낮지 만 '인기'라는 장점이 있습니다. 반대로, 에너지를 갖는 신호 엔벨로프는 잡음보다 더 에너지가 많은 반면, 임계 값에 걸쳐 조각화됩니다. 우리가 '인기'를 에너지의 척도로 간주한다면 어떨까요? 이것이 가우시안 커널 을 사용하여 커널 밀도 함수 (KDE)를 구현하는 것입니다 .

이를 위해 모든 샘플을 수집하고 그 값을 평균으로 사용하여 가우시안 함수를 구성하고 사전 설정된 대역폭 (분산)을 사전에 선택합니다. 가우스의 분산을 설정하는 것은 중요한 매개 변수이지만 응용 프로그램 및 일반적인 신호를 기반으로 한 노이즈 통계를 기반으로 설정할 수 있습니다. (나는 당신의 2 개의 파일 만 가지고 있습니다). KDE 추정값을 구성하면 다음 그림이 표시됩니다.

여기에 이미지 설명을 입력하십시오

KDE를 연속적인 형태의 히스토그램으로 생각하고 그 차이를 빈 너비로 생각할 수 있습니다. 그러나 첫 번째와 두 번째 데타 비타 미적분을 수행 할 수있는 부드러운 PDF를 보장하는 이점이 있습니다. 가우시안 KDE가 있으므로 노이즈 샘플의 인기가 가장 높은 곳을 확인할 수 있습니다. 여기서 x 축은 진폭 공간에 대한 데이터의 투영을 나타냅니다. 따라서, 노이즈가 가장 '에너지가 많은'임계 값을 볼 수 있으며 어떤 임계 값을 피해야하는지 알려줍니다.

두 번째 줄거리에서 가우스 KDE 의 첫 번째 파생물 이 취해지고, 가우스 혼합의 피크 이후 첫 번째 파생물 이후 첫 번째 샘플의 가로 좌표를 선택하여 0에 가까운 특정 값을 얻습니다. (또는 첫 번째 제로 크로싱). 우리는 KDE가 적당한 대역폭의 부드러운 가우스로 만들어졌으며이 부드럽고 잡음이 적은 기능의 첫 번째 파생물을 사용했기 때문에이 방법을 사용하고 '안전'할 수 있습니다. (일반적으로 1 차 파생어는 노이즈를 확대하기 때문에 높은 SNR 신호 이외의 문제에는 문제가 될 수 있습니다).

검은 선은 전체 노이즈 플로어를 피하기 위해 이미지를 '세그먼트'하는 것이 현명한 임계 값을 보여줍니다. 그런 다음 원래 신호에 적용하면 신호의 에너지 시작을 나타내는 검은 선으로 다음 플롯을 얻습니다.

여기에 이미지 설명을 입력하십시오

δt=241

이것이 도움이 되었기를 바랍니다.


와. 정말 고맙습니다. 이것들은 제가 연구를 시작할 새로운 기술입니다. 사용한 matlab 코드를 살펴볼 수있는 방법이 있습니까?
Nick Sinas

따라서 Matlab에서 1 단계와 2 단계가 완료되었으며 결과가 귀하의 결과와 일치하지만 3 단계에 문제가 있습니다. 어떤 기능을 사용 했습니까?
Nick Sinas

@NickS. 물어봐 .. 그러면 너는 이메일을 받고, 내가 사용한 코드를 보낼 수있다.
Spacey

@Mohammed 시간 지연을 추정하기 위해 코드를 게시하십시오. 이 문제와 관련하여 이메일을 보냈습니다. 도와주세요

6

자기 상관과 관련하여 몇 가지 문제가 있습니다

  1. 거대한 DC 오프셋 (이미 수정 됨)
  2. 시간 창 : Matlab의 xcorr ()에는 시간 지연을 슬라이드 할 때 양쪽 끝에서 신호를 "제로 패드"하는 성가신 규칙이 있습니다. 즉, 데이터 창은 시간 지연의 함수입니다. 그러면 고정 신호 (사인파 포함)에 대해 삼각형 모양이 만들어집니다. 더 나은 선택은 창 크기와 최대 시간 지연이 전체 데이터 창에 맞도록 상관 창을 선택하거나 패딩되지 않은 샘플 수로 교차 상관을 정규화하는 것입니다.
  3. 두 신호는 특히 상관이 없어 보입니다. 모양은 다소 비슷하지만 피크와 딥의 특정 간격이 상당히 다르기 때문에 적절한 자동 상관 관계조차도 여기에서 많은 통찰력을 얻을 것이라고 의심합니다.

훨씬 간단한 방법은 임계 값 감지기를 사용하여 시작점을 찾고 단순히이 지점들 간의 차이를 지연으로 사용하는 것입니다.


4

피케 네트가 지시 한 바와 같이,이 경우 출력 중간의 피크는 0 래그를 나타냅니다. 중간 지점으로부터의 피크 오프셋은 시간 지연입니다.

편집 : 상관 관계가 거의 완벽한 삼각형이라는 사실에 관심이 있습니다. 이는 상호 상관이 전력 정규화를 수행하지 않음을 나타냅니다. 이는 큰 지연에 비해 작은 지연에 대한 불공정 한 편견을 제공합니다. "cc = xcorr (x1, x2, 'unbiased');"로 xcorr 호출을 수정하겠습니다.

큰 지연 결과가 적은 데이터를 기반으로하기 때문에 낮은 지연 결과보다 불안정하기 때문에 완벽한 솔루션은 아닙니다. 사지에서 큰 봉우리는 몇 가지 동전 던지기에 100 % 머리와 꼬리를 얻을 수없는 것과 같은 이유로 가짜가 될 수 있지만 많은 던지기에서 일어날 가능성은 거의 없습니다.


신호가 지연되지 않았다는 의미입니까?
Nick Sinas

확실하지 않습니다-피크는 어디에 있습니까? 중간에 가깝다는 것을 알 수 있지만 실제로 중간에 있는지 확실하지 않습니다. 또한 답변을 편집하여 해결 할 전원 정규화 문제가 있습니다.
Jim Clay

'편견없는'매개 변수가 분명히 더 좋아 보입니다. 내가 기대하는 것의 더 많은. 나는 이것을 계속 조사 할 것이다. 감사.
Nick Sinas

@JimClay 아마도 Nick S는 실제 신호가 아닌 그의 신호의 엔벨로프를 상관시킵니다 (Nick is this?). 이것은 내가 상상하는 삼각형 모양을 (거의) 산출 할 것입니다.
Spacey

2
@NickS. Mohammad의 의견에 따르면 결과를 엉망으로 만드는 거대한 DC 오프셋이 있음을 알았습니다. 두 신호에서 평균을 빼고 xcorr을 실행하십시오. 먼저 "편견없는"옵션없이 시도해 보았습니다.
Jim Clay

4

다른 사람들이 지적했듯이 질문에 대한 마지막 편집 내용을 바탕으로 깨달은 것처럼 보이지만 교차 상관이 표시된 데이터 세트의 시간 지연에 대한 적절한 추정치를 제공하지는 않습니다. 상관은 시간 지연의 범위에 대해 서로를 가로 질러 하나를 미끄러 뜨리고 각 지연에서 두 시리즈 사이의 내부 제품을 계산하여 두 시계열의 모양의 유사성을 측정합니다. 두 계열이 질적으로 유사하거나 서로 "상관"된 경우 결과가 크게 나타납니다. 이것은 두 벡터가 같은 방향을 가리킬 때 두 벡터의 내부 곱이 가장 큰 방법과 유사합니다.

표시 한 데이터의 문제점은 (적어도 우리가 볼 수있는 스 니펫의 경우) 모양이 많이 유사하지 않다는 것입니다. 신호 중 하나에 적용하여 다른 신호처럼 보이게 할 수있는 지연은 없습니다. 이는 교차 상관을 계산하여 수행하는 작업입니다.

그러나 상호 상관이 유용한 경우가 있습니다. 두 번째 신호는 약간의 추가 노이즈가 추가 되었더라도 실제로 시간이 이동 된 원본 버전이라고 가정하십시오.

a = csvread('scope1col.csv');
a = a - mean(a);               % to remove DC offset
b = a(200:end) + sqrt(0.05)*randn(1801,1);
figure; subplot(211); plot(a); subplot(212); plot(b)

여기에 이미지 설명을 입력하십시오

이제 두 신호가 시간 지연과 관련이 있다는 것이 확실하지 않습니다. 그러나 상호 상관을 취하면 다음과 같은 결과를 얻습니다.

[c,lags] = xcorr(a,b);
igure; plot(lags,c); grid on; xlabel('Lag'); ylabel('Cross-correlation');

여기에 이미지 설명을 입력하십시오

200 개 샘플의 정확한 지연에서 피크를 보여줍니다. 상관 관계는 올바른 유형의 유사성을 포함하는 데이터 집합에 적용될 때 시간 지연을 결정하는 데 유용한 도구가 될 수 있습니다.


내가 할 수있는 다른 아이디어가 있습니까? 교차 상관 또는 다른 유형의 필터 이외의 다른 기술이 있습니까? 감사.
Nick Sinas

@NickS. 나는 또한 그것을 보았고 서로의 사본이 지연되지 않았습니다. 에너지 지연을 추정하고 싶 습니까? 나는이 경우 신호의 VS 지연보다 더 의미가 있다고 생각합니다 . 실행중인 기본 채널 / 실험에 대해 자세히 알려 주면 가능한 경로에 대해 더 자세히 알려줄 수 있습니다.
Spacey

@Mohammad 감사합니다. 기본 채널은 강철입니다. 에너지 지연을 추정하는 방법에 대한 아이디어가 있습니까?
Nick Sinas

@Mohammad 당신은 신호의 왜곡이 필터링으로 정리 될 수있는 일종의 잔향 일 수 있다고 생각합니까?
Nick Sinas

@NickS. 거기에 리버브 청소 트릭이있을 수 있지만 (어떻게 달성 될지 잘 모르겠습니다), 당신이 살펴보고 싶다면 에너지 견적자가 될 간단한 것을 모았습니다.
Spacey

0

Muhammad의 제안에 따라 Matlab 스크립트를 만들려고했습니다. 그러나 분산에 기초하여 가우시안 분포를 구성한 다음 KDE 추정을 취하거나 가우시안 가정을 ​​사용하여 KDE 추정을 수행하는지 여부를 추론 할 수 없습니다.

또한 그가 KDE 오프셋 시간을 시간 영역으로 변환하는 방법을 추론하기는 어렵습니다. 여기 내 시도가 있습니다. 스크립트 사용에 관심이있는 모든 사용자는 무료로 개선 된 버전을 무료로 업데이트 할 수 있습니다.

%% Initialising data

Ws1 = data1;
Ws2 = data2;
mWs1 = nanmean(Ws1);
mWs2 = nanmean(Ws2);
sdWs1 = nanstd(Ws1);
sdWs2 = nanstd(Ws2);

%% Computing the signal envelopes
Ws1d = Ws1 - mWs1;
Ws2d = Ws2 - mWs2;
h1 = abs(hilbert(Ws1d));
h2 = abs(hilbert(Ws2d));
figure();
subplot(211)
plot([Ws1d, h1])
subplot(212)
plot([Ws2d, h2])

%% Denoise the signal with edge preserving nonlinear medial filtering
w = 25;
mf1 = medfilt1(h1, w);
mf2 = medfilt1(h2, w);
figure();
subplot(211)
plot(mf1)
subplot(212)
plot(mf2)

<%% Remove time: construct the gaussian kernel density estimation functions>
% Using the kde from Matlab central directly on the filtered data
data1 = mf1;
[bw1, den1, xmesh1, cdf1] = kde(data1, 2^14);
der1 = diff(den1);
data2 = mf2;
[bw2, den2, xmesh2, cdf2] = kde(data2, 2^14);
der2 = diff(den2);
figure();
plot([der1, der2]);
legend('Sig1', 'Sig2')

% the other method as explained in Muhammad's post
for i = 1:length(mf1)
gf1(:,i) = mf1(i) + sdWs1*randn(1000,1);
gf2(:,i) = mf2(i) + sdWs2*randn(1000,1);
end
[bwM1, denM1, xmeshM1, cdfM1] = kde(gf1(:,1), 2.^11);
dd1 = diff(denM1);
[bwM2, denM2, xmeshM2, cdfM2] = kde(gf2(:,1), 2.^11);
dd2 = diff(denM2);
figure();
plot([dd1, dd2]);
legend('Sig1', 'Sig2')
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.