This is machine translation

Translated by Microsoft
Mouseover text to see original. Click the button below to return to the English verison of the page.

Note: This page has been translated by MathWorks. Please click here
To view all translated materals including this page, select Japan from the country navigator on the bottom of this page.


Magnitude-squared coherence


Cxy = mscohere(x,y)
Cxy = mscohere(x,y,window)
Cxy = mscohere(x,y,window,noverlap)
[Cxy,W] = mscohere(x,y,window,noverlap,nfft)
[Cxy,F] = mscohere(x,y,window,noverlap,nfft,fs)
[Cxy,F] = mscohere(x,y,window,noverlap,f,fs)
[...] = mscohere(x,y,...,'twosided')


Cxy = mscohere(x,y) finds the magnitude-squared coherence estimate, Cxy, of the input signals, x and y, using Welch's averaged modified periodogram method.

The input signals may be either vectors or two-dimensional matrices. If both are vectors, they must have the same length. If both are matrices, they must have the same size, and mscohere operates columnwise: Cxy(:,n) = mscohere(x(:,n),y(:,n)). If one is a matrix and the other is a vector, then the vector is converted to a column vector and internally expanded so both inputs have the same number of columns.

For real x and y, mscohere returns a one-sided coherence estimate. For complex x or y, it returns a two-sided estimate.

mscohere uses the following default values:

ParameterDescriptionDefault Value


FFT length which determines the frequencies at which the coherence is estimated

For real x and y, the length of Cxy is (nfft/2 + 1) if nfft is even or (nfft + 1)/2 if nfft is odd. For complex x or y, the length of Cxy is nfft.

If nfft is greater than the signal length, the data is zero-padded. If nfft is less than the signal length, the data segment is wrapped so that the length is equal to nfft.

Maximum of 256 or the next power of 2 greater than the length of each section of x or y


Sampling frequency



Windowing function and number of samples to use for each section

Periodic Hamming window of sufficient length to obtain eight equal sections of x and y


Number of samples by which the sections overlap

Value to obtain 50% overlap

    Note   You can use the empty matrix, [], to specify the default value for any input argument except x or y. For example, Pxy = mscohere(x,y,[],[],128) uses a Hamming window, default noverlap to obtain 50% overlap, and the specified 128 nfft.

Cxy = mscohere(x,y,window) specifies a windowing function, divides x and y into equal overlapping sections of the specified window length, and windows each section using the specified window function. If you supply a scalar for window, then Cxy uses a Hamming window of that length.

Cxy = mscohere(x,y,window,noverlap) overlaps the sections of x by noverlap samples. noverlap must be an integer smaller than the length of window.

[Cxy,W] = mscohere(x,y,window,noverlap,nfft) uses the specified FFT length nfft to calculate the coherence estimate. It also returns W, which is the vector of normalized frequencies (in rad/sample) at which the coherence is estimated. For real x and y, Cxy length is (nfft/2 + 1) if nfft is even; if nfft is odd, the length is (nfft + 1)/2. For complex x or y, the length of Cxy is nfft. For real signals, the range of W is [0, π] when nfft is even and [0, π) when nfft is odd. For complex signals, the range of W is [0, 2π).

[Cxy,F] = mscohere(x,y,window,noverlap,nfft,fs) returns Cxy as a function of frequency and a vector F of frequencies at which the coherence is estimated. fs is the sampling frequency in Hz. For real signals, the range of F is [0, fs/2] when nfft is even and [0, fs/2) when nfft is odd. For complex signals, the range of F is [0, fs).

[Cxy,F] = mscohere(x,y,window,noverlap,f,fs) computes the coherence estimate at the frequencies f. f is a vector containing two or more elements.

[...] = mscohere(x,y,...,'twosided') returns a coherence estimate with frequencies that range over the whole Nyquist interval. Specifying 'onesided' uses half the Nyquist interval.

mscohere(...) plots the magnitude-squared coherence versus frequency in the current figure window.

    Note   If you estimate the magnitude-squared coherence with a single window, or section, the value is identically 1 for all frequencies [1]. You must use at least two sections.


collapse all

Compute and plot the coherence estimate between two colored noise sequences, x and y. Reset the random number generator for reproducible results. Use a Hann window to estimate the coherence.

rng default
r = randn(16384,1);

h1 = ones(1,10)/sqrt(10);
x = filter(h1,1,r);

h = fir1(30,0.2,rectwin(31));
y = filter(h,1,x);


Generate two sinusoidal signals sampled for 1 second each at 1 kHz. Each sinusoid has a frequency of 250 Hz. One of the signals lags the other in phase by π/3 radians. Embed both signals in white Gaussian noise of unit variance. Reset the random number generator for reproducible results.

rng default
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));

Use mscohere to compute and plot the magnitude-squared coherence of the signals.


Modify the title of the plot, the label of the x-axis, and the limits of the y-axis.

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

Use gca to obtain a handle to the current axes. Change the locations of the tick marks. Remove the label of the y-axis.

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

Invoke the Children property of the handle to change the color and width of the plotted line.

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

Alternatively, use set and get to modify the line properties.

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

Related Examples

More About

collapse all

Magnitude-Squared Coherence

The magnitude-squared coherence estimate is a function of frequency with values between 0 and 1 that indicates how well x corresponds to y at each frequency. The magnitude-squared coherence is a function of the power spectral densities, Pxx(f) and Pyy(f), of x and y, and the cross power spectral density, Pxy(f), of x and y:



mscohere estimates the magnitude-squared coherence function [2] using Welch's overlapped averaged periodogram method (see references [3] and [4]).


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

[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] 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.

Introduced before R2006a

Was this topic helpful?