코히어런스 MATLAB 자료
파형 관계를 이해하기 위한 수학 과정의 2번째 주제에 포함된 강의입니다.
MATLAB®은 Welch 방법을 사용하여 여러 통계 추정기를 지원하는 연산자를 제공합니다. 여기에는 다음이 포함됩니다.
|
msco여기(…) |
일반적인 코히어런스를 추정합니다. |
||
|
펠치(…) |
전력 스펙트럼 밀도를 추정합니다. |
||
|
cpsd(…) |
교차 전력 스펙트럼 밀도를 추정합니다. |
MATLAB의 예제 코드
복소 코히어런스는 아래에 설명된 대로 CSD(교차 스펙트럼 밀도)와 PSD(전력 스펙트럼 밀도)를 사용하여 MATLAB에서 계산할 수 있습니다.
clear % clear all variables
format long g; % set format of text output
N = 16; % length of input data sequence x
Fs = 1; % sample rate (used for scaling)
percent = 50; % percent overlap
Nfft = N * (1-percent/100);
x= [0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0]';
y= [0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0]';
% 0 3 7 11 13 15
%----------------------------------------------------------------------------
% smoothing window
%----------------------------------------------------------------------------
window = hanning(Nfft); % Hanning window
%----------------------------------------------------------------------------
% calculate estimates
%----------------------------------------------------------------------------
[Sxy,freq]=cpsd( x,y,window,Noverlap,Nfft,Fs); % estimate Sxy
[Sxx,freq]=pwelch( x, window,Noverlap,Nfft,Fs); % estimate Sxx
[Syy,freq]=pwelch( y,window,Noverlap,Nfft,Fs); % estimate Syy
[Cms,freq]=mscohere(x,y,window,Noverlap,Nfft,Fs); % estimate ordinary coherence
% | | | | | | | | |_____ sample rate
% | | | | | | | |_________ estimate length
% | | | | | | |_________________ num. overlapping positions
% | | | | | |__________________________ window type
% | | | | |_____________________________ data sequence y
% | | | |_______________________________ data sequence x
% | | |_____________________________________ estimation operation
% | |__________________________________________ x-axis sequence
% |_________________________________________________ estimate sequence
Cxy = Sxy ./ sqrt( Sxx .* Syy ); % estimate complex coherence
%----------------------------------------------------------------------------
% perform integrity check
%----------------------------------------------------------------------------
if norm(Cms-abs(Cxy).^2)<1e-12
fprintf("Cxy integrity check OK!n");
else
fprintf("Cxy integrity check FAILED!!!n");
end
주의 사항
이름에서 알 수 있듯이 추정기는 추정치를 산출합니다. 일반적으로 이러한 추정에는 실제 값과 관련하여 약간의 오류가 포함되어 있습니다.
이 상황에 대한 K=1 Welch의 코히어런스 추정보다 더 놀라운 예를 찾는 것은 어려울 것입니다. 이를 이해하려면 직사각형 창 K=1 Welch의 코히어런스 추정값과 상관되지 않은 백색 잡음 신호의 실제 코히어런스를 비교하십시오.
만약:
- x[n] 및 y[n]은 평균 0의 백색 잡음 시퀀스입니다.
- x[n]과 y[n]은 상관 관계가 없습니다.
- 추정값 Ĉxy(w)는 x와 y의 K=1 Welch 추정값입니다.
그런 다음:
(1) ![]()
증거:
(2) 
(3) 
(4) ![]()
따라서 K=1 Welch의 코히어런스 추정치는 항상 1입니다! 이것은 확실히 추정치입니다. 하지만 문제는 “그것이 좋은 추정인가?”이다.
이 질문에 대답하기 위해 실제(추정되지 않은) 코히어런스를 계산해 보겠습니다.
|
(5) |
코히어런스 C의 정의에 따라xy(ω) |
|
(6) |
상호 상관 R의 정의에 따라xy |
|
(7) |
x[n]과 y[n]은 상관 관계가 없기 때문입니다. |
|
(8) |
x[n]과 y[n]의 평균은 0이기 때문입니다. |
|
(9) |
0의 푸리에 변환은 0이기 때문입니다. |
따라서 코히어런스의 실제 값은 Cxy(Ω)= 0(가능한 가장 작은 값)이지만 Welch 추정값은 Ĉxy(Ω)= 1(가능한 가장 큰 값)임을 알 수 있습니다. 대부분의 경우 Welch는 매우 "좋은" 추정치를 산출할 가능성이 높습니다. 그러나 위의 예에서 알 수 있듯이 항상 그런 것은 아니며 몇 가지 주의가 필요합니다.
ASK AN ENGINEER
시험 조건을 실제 장비에 적용해 보세요.
시편 정보와 목표 조건을 보내주시면 시험 가능 여부를 검토합니다.
