You are here : matlabSignal Processingmscohere

mscohere() - Signal Processing

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
nfftFFT length which determines the frequencies at which
the coherence is estimatedFor 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
fsSampling frequency1
windowWindowing function and number of samples to use for each
sectionPeriodic Hamming window of sufficient length to obtain
eight equal sections of x and y
noverlapNumber of samples by which the sections overlapValue to obtain 50% overlap

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

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.


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')mscohere(...)


Coherence Estimate of Two SequencesOpen This Example
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);


Modify mscohere Default PlotOpen This ExampleGenerate 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.mscohere(um,un,[],[],[],fs)

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 = 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 ExamplesCross Spectrum and Magnitude-Squared Coherence

Output / Return Value


Alternatives / See Also