Main Content

mscohere

크기 제곱 코히어런스

설명

cxy = mscohere(x,y)는 입력 신호 xy의 크기 제곱 코히어런스 추정값 cxy를 구합니다.

  • xy가 모두 벡터인 경우 길이가 같아야 합니다.

  • 두 신호 중 하나는 행렬이고 다른 하나는 벡터인 경우, 벡터의 길이는 행렬에 포함된 행 개수와 동일해야 합니다. 이 함수는 벡터를 확장하고 열마다 크기 제곱 코히어런스 추정값을 가진 행렬을 반환합니다.

  • xy가 행 개수는 같지만 열 개수가 다른 행렬인 경우, mscohere는 다중 코히어런스 행렬을 반환합니다. cxy의 m번째 열은 모든 입력 신호와 m번째 출력 신호 간 상관도의 추정값을 포함합니다. 자세한 내용은 크기 제곱 코히어런스 항목을 참조하십시오.

  • xy가 같은 크기의 행렬인 경우, mscohere는 각 열에 대해 연산을 수행합니다. 즉, cxy(:,n) = mscohere(x(:,n),y(:,n))입니다. 다중 코히어런스 행렬을 구하려면 'mimo'를 인수 목록에 추가하십시오.

cxy = mscohere(x,y,window)window를 사용하여 xy를 세그먼트로 나누고 윈도우를 적용합니다. 최소한 두 개의 세그먼트를 사용해야 합니다. 그렇지 않으면 모든 주파수에 대해 크기 제곱 코히어런스가 1이 됩니다. MIMO의 경우, 세그먼트 개수가 입력 채널 개수보다 커야 합니다.

cxy = mscohere(x,y,window,noverlap)은 인접 세그먼트 간에 noverlap개의 샘플이 중첩되도록 적용합니다.

예제

cxy = mscohere(x,y,window,noverlap,nfft)nfft개 샘플링 점을 사용하여 이산 푸리에 변환을 계산합니다.

예제

cxy = mscohere(___,'mimo')는 행렬 입력값에 대한 다중 코히어런스 행렬을 반환합니다. 이 구문은 위에 열거된 구문에 사용할 수 있습니다.

[cxy,w] = mscohere(___)는 크기 제곱 코히어런스를 추정한 위치의 정규화 주파수로 구성된 벡터 w를 반환합니다.

예제

[cxy,f] = mscohere(___,fs)는 크기 제곱 코히어런스를 추정한 위치의 주파수(샘플 레이트 fs의 값으로 표현됨)로 구성된 벡터 f를 반환합니다. fsmscohere에 대한 6번째 숫자형 입력값이어야 합니다. 샘플 레이트를 입력하고 위에 열거된 옵션 인수의 디폴트 값을 그대로 사용하려면 이 인수를 빈 값 []로 지정하십시오.

[cxy,w] = mscohere(x,y,window,noverlap,w)w에 지정된 정규화 주파수에서의 크기 제곱 코히어런스 추정값을 반환합니다.

[cxy,f] = mscohere(x,y,window,noverlap,f,fs)f에 지정된 주파수에서의 크기 제곱 코히어런스 추정값을 반환합니다.

[___] = mscohere(x,y,___,freqrange)freqrange로 지정된 주파수 범위에 대한 크기 제곱 코히어런스 추정값을 반환합니다. freqrange에 유효한 옵션은 'onesided', 'twosided', 'centered'입니다.

예제

mscohere(___)에 출력 인수를 지정하지 않으면 현재 Figure 창에 크기 제곱 코히어런스 추정값을 플로팅합니다.

예제

모두 축소

두 개의 유색 잡음 시퀀스 사이의 코히어런스 추정값을 계산하고 플로팅합니다.

백색 가우스 잡음으로 구성된 신호를 생성합니다.

r = randn(16384,1);

첫 번째 시퀀스를 생성하기 위해 신호에 대역통과 필터를 적용합니다. 0.2π rad/sample에서 0.4π rad/sample 사이의 정규화 주파수를 통과하는 16차 필터를 설계합니다. 저지대역 감쇠량을 60dB로 지정합니다. 원래 신호에 필터를 적용합니다.

dx = designfilt('bandpassiir','FilterOrder',16, ...
    'StopbandFrequency1',0.2,'StopbandFrequency2',0.4, ...
    'StopbandAttenuation',60);
x = filter(dx,r);

두 번째 시퀀스를 생성하기 위해 0.6π rad/sample에서 0.8π rad/sample 사이의 정규화 주파수를 저지하는 16차 필터를 설계하십시오. 통과대역 리플을 0.1dB로 지정합니다. 원래 신호에 필터를 적용합니다.

dy = designfilt('bandstopiir','FilterOrder',16, ...
    'PassbandFrequency1',0.6,'PassbandFrequency2',0.8, ...
    'PassbandRipple',0.1);
y = filter(dy,r);

xy의 크기 제곱 코히어런스를 추정합니다. 512개 샘플을 갖는 해밍 윈도우를 사용합니다. 인접 세그먼트 간에 500개 샘플이 중첩되도록 지정하고 2048개 DFT 점을 지정합니다.

[cxy,fc] = mscohere(x,y,hamming(512),500,2048);

코히어런스 함수를 플로팅하고 필터의 주파수 응답을 겹쳐 놓습니다.

[qx,f] = freqz(dx);
qy = freqz(dy);

plot(fc/pi,cxy)
hold on
plot(f/pi,abs(qx),f/pi,abs(qy))
hold off

Figure contains an axes object. The axes object contains 3 objects of type line.

2채널 랜덤 신호 x를 생성합니다. 두 채널에 저역통과 필터를 적용하고 이를 모두 더하여 또 다른 신호 y를 생성합니다. 사각 윈도우를 사용하여 설계된 0.3π의 차단 주파수를 갖는 30차 FIR 필터를 지정합니다.

h = fir1(30,0.3,rectwin(31));
x = randn(16384,2);
y = sum(filter(h,1,x),2);

xy의 다중 코히어런스 추정값을 계산합니다. 1024개 샘플을 갖는 핸 윈도우를 사용하여 신호에 윈도우를 적용합니다. 인접 세그먼트 간에 512개 샘플이 중첩되도록 지정하고 1024개 DFT 점을 지정합니다. 추정값을 플로팅합니다.

noverlap = 512;
nfft = 1024;

mscohere(x,y,hann(nfft),noverlap,nfft,'mimo')

Figure contains an axes object. The axes object with title Coherence Estimate via Welch, xlabel Normalized Frequency ( times pi blank rad/sample), ylabel Multiple Coherence contains an object of type line.

코히어런스 추정값을 필터에 대한 주파수 응답과 비교합니다. 코히어런스가 뚝 떨어지는 지점은 주파수 응답의 영점에 해당합니다.

[H,f] = freqz(h);

hold on
yyaxis right
plot(f/pi,20*log10(abs(H)))
hold off

Figure contains an axes object. The axes object with title Coherence Estimate via Welch, xlabel Normalized Frequency ( times pi blank rad/sample) contains 2 objects of type line.

xy의 일반 크기 제곱 코히어런스 추정값을 계산하고 플로팅합니다. 이 추정값은 어떠한 채널에 대해서도 1에 도달하지 않습니다.

figure
mscohere(x,y,hann(nfft),noverlap,nfft)

Figure contains an axes object. The axes object with title Coherence Estimate via Welch, xlabel Normalized Frequency ( times pi blank rad/sample), ylabel Magnitude-Squared Coherence contains 2 objects of type line.

2초 동안 각각 1kHz로 샘플링된 다중채널 신호 두 개를 생성합니다. 첫 번째 신호인 입력값은 각각 120Hz, 360Hz, 480Hz의 주파수를 갖는 세 개의 정현파로 구성됩니다. 두 번째 신호인 출력값은 각각 120Hz와 360Hz의 주파수를 갖는 두 개의 정현파로 구성됩니다. 이 중 한 정현파는 첫 번째 신호보다 π/2만큼 지연된 상태입니다. 다른 정현파는 지연이 π/4입니다. 두 신호 모두 백색 가우스 잡음에 묻혀 있습니다.

fs = 1000;
f = 120;
t = (0:1/fs:2-1/fs)';

inpt = sin(2*pi*f*[1 3 4].*t);
inpt = inpt+randn(size(inpt));
oupt = sin(2*pi*f*[1 3].*t-[pi/2 pi/4]);
oupt = oupt+randn(size(oupt));

모든 입력 신호와 각 출력 채널 간 상관도를 추정합니다. 길이가 100인 해밍 윈도우를 사용하여 데이터에 윈도우를 적용합니다. mscohere는 출력 채널당 하나씩 코히어런스 함수를 반환합니다. 코히어런스 함수는 입력값과 출력값이 공유하는 주파수에서 최댓값에 도달합니다.

[Cxy,f] = mscohere(inpt,oupt,hamming(100),[],[],fs,'mimo');

for k = 1:size(oupt,2)
    subplot(size(oupt,2),1,k)
    plot(f,Cxy(:,k))
    title(['Output ' int2str(k) ', All Inputs'])
end

Figure contains 2 axes objects. Axes object 1 with title Output 1, All Inputs contains an object of type line. Axes object 2 with title Output 2, All Inputs contains an object of type line.

입력 신호와 출력 신호를 서로 바꾸고 다중 코히어런스 함수를 계산합니다. 동일한 해밍 윈도우를 사용합니다. 480Hz에서는 입력값과 출력값 간에 상관관계가 없습니다. 따라서 세 번째 상관 함수에는 피크가 없습니다.

[Cxy,f] = mscohere(oupt,inpt,hamming(100),[],[],fs,'mimo');

for k = 1:size(inpt,2)
    subplot(size(inpt,2),1,k)
    plot(f,Cxy(:,k))
    title(['Input ' int2str(k) ', All Outputs'])
end

Figure contains 3 axes objects. Axes object 1 with title Input 1, All Outputs contains an object of type line. Axes object 2 with title Input 2, All Outputs contains an object of type line. Axes object 3 with title Input 3, All Outputs contains an object of type line.

mscohere의 플로팅 기능을 사용하여 계산을 반복합니다.

clf
mscohere(oupt,inpt,hamming(100),[],[],fs,'mimo')

Figure contains an axes object. The axes object with title Coherence Estimate via Welch, xlabel Frequency (Hz), ylabel Multiple Coherence contains 3 objects of type line.

두 번째 신호의 일반 코히어런스 함수와 첫 번째 신호의 처음 두 채널을 계산합니다. 피크가 아닌 값은 다중 코히어런스 함수와 다릅니다.

[Cxy,f] = mscohere(oupt,inpt(:,[1 2]),hamming(100),[],[],fs);
plot(f,Cxy)

Figure contains an axes object. The axes object contains 2 objects of type line.

최대 코히어런스를 갖는 점에서 상호 스펙트럼 각도를 계산하여 위상차를 구합니다.

Pxy = cpsd(oupt,inpt(:,[1 2]),hamming(100),[],[],fs);
[~,mxx] = max(Cxy);
for k = 1:2
    fprintf('Phase lag %d = %5.2f*pi\n',k,angle(Pxy(mxx(k),k))/pi)
end
Phase lag 1 = -0.51*pi
Phase lag 2 = -0.22*pi

1kHz에서 각각 1초 동안 샘플링된 두 개의 정현파 신호를 생성합니다. 각 정현파는 250Hz의 주파수를 갖습니다. 이 중 한 신호가 다른 신호의 위상을 π/3라디안만큼 지연시킵니다. 두 신호 모두에 단위 분산의 백색 가우스 잡음을 포함시킵니다.

fs = 1000;
f = 250;
t = 0:1/fs:1-1/fs;
um = sin(2*pi*f*t)+rand(size(t));
un = sin(2*pi*f*t-pi/3)+rand(size(t));

mscohere를 사용하여 신호의 크기 제곱 코히어런스를 계산하고 플로팅합니다.

mscohere(um,un,[],[],[],fs)

Figure contains an axes object. The axes object with title Coherence Estimate via Welch, xlabel Frequency (Hz), ylabel Magnitude-Squared Coherence contains an object of type line.

플롯 제목, x축의 레이블, y축의 제한을 수정합니다.

title('Magnitude-Squared Coherence')
xlabel('f (Hz)')
ylim([0 1.1])

Figure contains an axes object. The axes object with title Magnitude-Squared Coherence, xlabel f (Hz), ylabel Magnitude-Squared Coherence contains an object of type line.

gca를 사용하여 현재 좌표축에 대한 핸들을 구합니다. 눈금 표시의 위치를 변경합니다. y축의 레이블을 제거합니다.

ax = gca;
ax.XTick = 0:250:500;
ax.YTick = 0:0.25:1;
ax.YLabel.String = [];

Figure contains an axes object. The axes object with title Magnitude-Squared Coherence, xlabel f (Hz) contains an object of type line.

핸들에 대한 Children 속성을 호출하여 플로팅된 선의 색과 너비를 변경합니다.

ln = ax.Children;
ln.Color = [0.8 0 0];
ln.LineWidth = 1.5;

Figure contains an axes object. The axes object with title Magnitude-Squared Coherence, xlabel f (Hz) contains an object of type line.

또는, setget을 사용하여 line 속성을 수정할 수 있습니다.

set(get(gca,'Children'),'Color',[0 0.4 0],'LineStyle','--','LineWidth',1)

Figure contains an axes object. The axes object with title Magnitude-Squared Coherence, xlabel f (Hz) contains an object of type line.

입력 인수

모두 축소

입력 신호로, 벡터나 행렬로 지정됩니다.

예: cos(pi/4*(0:159))+randn(1,160)은 백색 가우스 잡음을 포함하는 정현파를 지정합니다.

데이터형: single | double
복소수 지원 여부:

윈도우로, 정수로 지정되거나 행 벡터 또는 열 벡터로 지정됩니다. window를 사용하여 신호를 여러 세그먼트로 나눕니다.

  • window가 정수이면 mscoherexy를 길이가 window인 세그먼트로 나누고 각 세그먼트에 해당 길이의 해밍 윈도우를 적용합니다.

  • window가 벡터이면 mscoherexy를 벡터와 길이가 같은 세그먼트로 나누고 window를 사용하여 각 세그먼트에 윈도우를 적용합니다.

xy의 길이를 noverlap개의 샘플이 중첩된 정수 개수의 세그먼트로 정확히 나눌 수 없는 경우 신호가 이에 맞게 적절하게 잘립니다.

window를 빈 값으로 지정하면, mscohere는 해밍 윈도우를 사용하여 xynoverlap개의 중첩 샘플을 가지는 8개의 세그먼트로 나눕니다.

사용 가능한 윈도우 목록은 윈도우 항목을 참조하십시오.

예: hann(N+1)(1-cos(2*pi*(0:N)'/N))/2는 모두 길이가 N + 1인 핸 윈도우를 지정합니다.

데이터형: single | double

중첩(Overlap) 샘플의 개수로, 양의 정수로 지정됩니다.

  • window가 스칼라이면 noverlapwindow보다 작아야 합니다.

  • window가 벡터이면 noverlapwindow의 길이보다 작아야 합니다.

noverlap을 빈 값으로 지정하면 mscohere는 세그먼트 간에 50% 중첩을 만드는 값을 사용합니다. 세그먼트 길이가 지정되지 않은 경우 이 함수는 noverlap을 ⌊N/4.5⌋로 설정합니다. 여기서 N은 입력 신호와 출력 신호의 길이입니다.

데이터형: double | single

DFT를 적용할 지점의 개수로, 양의 정수로 지정됩니다. nfft를 빈 값으로 지정하면 mscohere는 이 인수를 max(256,2p)로 설정합니다. 여기서, 길이가 N인 입력 신호의 경우 p = ⌈log2 N⌉입니다.

데이터형: single | double

샘플 레이트로, 양의 스칼라로 지정됩니다. 샘플 레이트는 단위 시간당 샘플 개수입니다. 시간 단위가 초이면 샘플 레이트의 단위는 Hz입니다.

정규화 주파수로, 적어도 2개의 요소를 가진 행 벡터나 열 벡터로 지정됩니다. 정규화 주파수는 rad/sample을 단위로 사용합니다.

예: w = [pi/4 pi/2]

데이터형: double | single

주파수로, 적어도 2개의 요소를 가진 행 벡터나 열 벡터로 지정됩니다. 주파수는 단위 시간당 주기를 단위로 사용합니다. 단위 시간은 샘플 레이트 fs로 지정됩니다. fs의 단위가 샘플/초이면 f는 Hz 단위입니다.

예: fs = 1000; f = [100 200]

데이터형: double | single

크기 제곱 코히어런스 추정값의 주파수 범위로, 'onesided', 'twosided' 또는 'centered'로 지정됩니다. 디폴트 값은 실수 값을 갖는 신호의 경우 'onesided'이고, 복소수 값을 갖는 신호의 경우 'twosided'입니다.

  • 'onesided' — 실수 값을 갖는 두 개의 입력 신호 xy 사이의 크기 제곱 코히어런스 추정값을 나타내는 단측 추정값을 반환합니다. nfft가 짝수이면 cxynfft/2 + 1개의 행을 가지고 구간 [0,π] rad/sample에 대해 계산됩니다. nfft가 홀수이면 cxy가 (nfft + 1)/2개의 행을 가지고 구간은 [0,π) rad/sample이 됩니다. fs를 지정하면 이에 대응되는 구간은 nfft가 짝수인 경우 [0,fs/2] cycles/unit time이고 nfft가 홀수인 경우 [0,fs/2) cycles/unit time입니다.

  • 'twosided' — 실수 값 또는 복소수 값을 갖는 두 개의 입력 신호 xy 사이의 크기 제곱 코히어런스 추정값을 나타내는 양측 추정값을 반환합니다. 이 경우, cxynfft개의 행을 가지고 구간 [0,2π) rad/sample에 대해 계산됩니다. fs를 지정하면 구간은 [0,fs) cycles/unit time이 됩니다.

  • 'centered' — 실수 값 또는 복소수 값을 갖는 두 개의 입력 신호 xy 사이의 크기 제곱 코히어런스 추정값을 나타내는, 중심이 맞춰진 양측 추정값을 반환합니다. 이 경우, cxynfft개의 행을 가지고, nfft가 짝수이면 구간 (–π,π] rad/sample에 대해 계산되며, nfft가 홀수이면 구간 (–π,π) rad/sample에 대해 계산됩니다. fs를 지정하면 이에 대응되는 구간은 nfft가 짝수인 경우 (–fs/2, fs/2] cycles/unit time이고 nfft가 홀수인 경우 (–fs/2, fs/2) cycles/unit time입니다.

출력 인수

모두 축소

크기 제곱 코히어런스 추정값으로, 벡터, 행렬 또는 3차원 배열로 반환됩니다.

정규화 주파수로, 실수 값 열 벡터로 반환됩니다.

주파수로, 실수 값 열 벡터로 반환됩니다.

세부 정보

모두 축소

크기 제곱 코히어런스

크기 제곱 코히어런스 추정값은 0에서 1 사이의 값을 갖는 주파수의 함수입니다. 이들 값은 각 주파수에서 xy에 얼마나 잘 대응되는지를 나타냅니다. 크기 제곱 코히어런스는 xy의 파워 스펙트럼 밀도 Pxx(f)Pyy(f), 그리고 상호 파워 스펙트럼 밀도 Pxy(f)의 함수입니다.

Cxy(f)=|Pxy(f)|2Pxx(f)Pyy(f).

다중 입력/다중 출력 시스템의 경우, 다중 코히어런스 함수는 i번째 출력 신호에 대해 다음이 됩니다.

CXyi(f)=PXyi(f)PXX1(f)PXyi(f)Pyiyi(f)=[Px1yi*(f)Pxmyi*(f)][Px1x1(f)Px1x2(f)Px1xm(f)Px2x1(f)Px2x2(f)Px2xm(f)Pxmx1(f)Pxmx2(f)Pxmxm(f)]1[Px1yi(f)Pxmyi(f)]1Pyiyi(f)

여기서,

  • X는 m개의 입력값으로 구성된 배열에 해당합니다.

  • PXyi는 입력값과 yi 사이의 상호 파워 스펙트럼 밀도로 구성된 m차원 벡터입니다.

  • PXX는 입력값에 대한 파워 스펙트럼 밀도와 상호 파워 스펙트럼 밀도로 구성된 m×m 행렬입니다.

  • Pyiyi는 출력값의 파워 스펙트럼 밀도입니다.

  • 칼(†) 모양은 켤레 복소수 전치를 나타냅니다.

알고리즘

mscohere는 Welch의 평균화되고 중첩된 주기도 방법 [3], [5]을 사용하여 크기 제곱 코히어런스 함수 [2]를 추정합니다.

참고 문헌

[1] Gómez González, A., J. Rodríguez, X. Sagartzazu, A. Schumacher, and I. Isasa. “Multiple Coherence Method in Time Domain for the Analysis of the Transmission Paths of Noise and Vibrations with Non-Stationary Signals.” Proceedings of the 2010 International Conference of Noise and Vibration Engineering, ISMA2010-USD2010. pp. 3927–3941.

[2] Kay, Steven M. Modern Spectral Estimation. Englewood Cliffs, NJ: Prentice-Hall, 1988.

[3] Rabiner, Lawrence R., and Bernard Gold. Theory and Application of Digital Signal Processing. Englewood Cliffs, NJ: Prentice-Hall, 1975.

[4] Stoica, Petre, and Randolph Moses. Spectral Analysis of Signals. Upper Saddle River, NJ: Prentice Hall, 2005.

[5] Welch, Peter D. “The Use of Fast Fourier Transform for the Estimation of Power Spectra: A Method Based on Time Averaging Over Short, Modified Periodograms.” IEEE® Transactions on Audio and Electroacoustics. Vol. AU-15, 1967, pp. 70–73.

확장 기능

C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.

버전 내역

R2006a 이전에 개발됨

모두 확장