Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

mscohere

Coherencia de magnitud cuadrada

Descripción

cxy = mscohere(x,y) encuentra la estimación de la coherencia de magnitud cuadrada, cxy, de las señales de entrada, x e y.

  • Si x e y son ambos vectores, deben tener la misma longitud.

  • Si una de las señales es una matriz y la otra es un vector, la longitud del vector debe ser igual al número de filas de la matriz. La función expande el vector y devuelve una matriz de estimaciones de coherencia de magnitud cuadrada columna por columna.

  • Si x e y son matrices con el mismo número de filas, pero con diferente número de columnas, mscohere devuelve una matriz de coherencia múltiple. La columna m de cxy contiene una estimación del grado de correlación entre todas las señales de entrada y la señal de salida m. Para obtener más información, consulte Coherencia de magnitud cuadrada.

  • Si x e y son matrices del mismo tamaño, mscohere opera por columnas: cxy(:,n) = mscohere(x(:,n),y(:,n)). Para obtener una matriz de coherencia múltiple, añada 'mimo' a la lista de argumentos.

cxy = mscohere(x,y,window) utiliza window para dividir x e y en segmentos y aplicar ventanas. Debe usar al menos dos segmentos. En caso contrario, la coherencia de magnitud cuadrada es 1 en todas las frecuencias. En el caso MIMO, el número de segmentos debe ser mayor que el número de canales de entrada.

cxy = mscohere(x,y,window,noverlap) utiliza muestras de solapamiento noverlap entre segmentos contiguos.

ejemplo

cxy = mscohere(x,y,window,noverlap,nfft) utiliza puntos de muestreo nfft para calcular la transformada discreta de Fourier.

ejemplo

cxy = mscohere(___,'mimo') calcula una matriz de coherencia múltiple para las entradas de matriz. Esta sintaxis puede incluir cualquier combinación de argumentos de entrada de las sintaxis anteriores.

[cxy,w] = mscohere(___) devuelve un vector de frecuencias normalizadas, w, en el que se estima la coherencia de magnitud cuadrada.

ejemplo

[cxy,f] = mscohere(___,fs) devuelve un vector de frecuencias, f, expresado en términos de la tasa de muestreo, fs, a la que se estima la coherencia de magnitud cuadrada. fs debe ser la sexta entrada numérica a mscohere. Para introducir una tasa de muestreo y seguir utilizando los valores predeterminados de los argumentos opcionales anteriores, especifique estos argumentos como vacíos, [].

[cxy,w] = mscohere(x,y,window,noverlap,w) devuelve la estimación de la coherencia de magnitud cuadrada en las frecuencias normalizadas especificadas en w.

[cxy,f] = mscohere(x,y,window,noverlap,f,fs) devuelve la estimación de la coherencia de magnitud cuadrada en las frecuencias especificadas en f.

[___] = mscohere(x,y,___,freqrange) devuelve la estimación de la coherencia de magnitud cuadrada a lo largo del rango de frecuencia especificado por freqrange. Las opciones válidas para freqrange son 'onesided', 'twosided' y 'centered'.

ejemplo

mscohere(___) sin argumentos de salida representa la estimación de la coherencia de magnitud cuadrada en la ventana de figura actual.

Ejemplos

contraer todo

Calcule y represente la estimación de la coherencia entre dos secuencias de ruido de color.

Genere una señal que consista en ruido blanco gaussiano.

r = randn(16384,1);

Para crear la primera secuencia, utilice un filtro paso banda en la señal. Diseñe un filtro de 16.º orden que pase las frecuencias normalizadas entre 0,2π y 0,4π rad/muestra. Especifique una atenuación de la banda de parada de 60 dB. Filtre la señal original.

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

Para crear la segunda secuencia, diseñe un filtro de 16.º orden que detenga las frecuencias normalizadas entre 0,6π y 0,8π rad/muestra. Especifique una ondulación de banda de paso de 0,1 dB. Filtre la señal original.

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

Estime la coherencia de la magnitud cuadrada de x e y. Utilice una ventana de Hamming de 512 muestras. Especifique 500 muestras de solapamiento entre segmentos contiguos y 2048 puntos de la DFT.

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

Represente la función de coherencia y superponga las respuestas en frecuencia de los filtros.

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

Genere una señal aleatoria de dos canales, x. Genere otra señal, y, filtrando en paso bajo los dos canales y sumándolos. Especifique un filtro FIR de 30.º orden con una frecuencia de corte de 0,3π y diseñado con una ventana rectangular.

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

Calcule la estimación de la coherencia múltiple de x e y. Aplique una ventana de Hann de 1024 muestras a las señales. Especifique 512 muestras de solapamiento entre segmentos contiguos y 1024 puntos de la DFT. Represente la estimación.

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.

Compare la estimación de la coherencia con la respuesta en frecuencia del filtro. Las caídas de coherencia se corresponden con los ceros de la respuesta en frecuencia.

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

Calcule y represente la estimación de la coherencia de magnitud cuadrada ordinaria de x e y. La estimación no llega a 1 en ninguno de los canales.

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.

Genere dos señales multicanal, cada una de ellas muestreada a 1 kHz durante 2 segundos. La primera señal, la de entrada, está compuesta por tres sinusoides con frecuencias de 120 Hz, 360 Hz y 480 Hz. La segunda señal, la de salida, está compuesta por dos sinusoides con frecuencias de 120 Hz y 360 Hz. Una de las sinusoides se retrasa respecto a la primera señal en π/2. La otra sinusoide tiene un desfase de π/4. Ambas señales están integradas en ruido blanco gaussiano.

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

Estime el grado de correlación entre todas las señales de entrada y cada uno de los canales de salida. Aplique una ventana de Hamming de longitud 100 a los datos. mscohere devuelve una función de coherencia para cada canal de salida. Las funciones de coherencia alcanzan los máximos en las frecuencias compartidas por la entrada y la salida.

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

Cambie las señales de entrada y salida y calcule la función de coherencia múltiple. Utilice la misma ventana de Hamming. No hay correlación entre la entrada y la salida a 480 Hz. Por tanto, no hay picos en la tercera función de correlación.

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

Repita el cálculo, utilizando la funcionalidad de representación gráfica de 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.

Calcule la función de coherencia ordinaria de la segunda señal y los dos primeros canales de la primera señal. Los valores fuera del pico difieren de la función de coherencia múltiple.

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

Encuentre las diferencias de fase calculando el ángulo del espectro cruzado en los puntos de máxima coherencia.

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

Genere dos señales sinusoidales muestreadas durante 1 segundo cada una a 1 kHz. Cada sinusoide tiene una frecuencia de 250 Hz. Una de las señales tiene un desfase de π/3 radianes con respecto a la otra. Inserte ambas señales en ruido blanco gaussiano de varianza unitaria.

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

Utilice mscohere para calcular y representar la coherencia de magnitud cuadrada de las señales.

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.

Modifique el título de la gráfica, la etiqueta del eje x y los límites del eje 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.

Utilice gca para obtener un identificador de los ejes actuales. Cambie la ubicación de las marcas de verificación. Elimine la etiqueta del eje 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.

Llame a la propiedad Children del identificador para cambiar el color y el ancho de la línea representada.

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.

También puede utilizar set y get para modificar las propiedades de la línea.

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.

Argumentos de entrada

contraer todo

Señales de entrada, especificadas como vectores o matrices.

Ejemplo: cos(pi/4*(0:159))+randn(1,160) especifica una sinusoide integrada en ruido blanco gaussiano.

Tipos de datos: single | double
Soporte de números complejos:

Ventana, especificada como un entero o como un vector fila o vector columna. Utilice window para dividir la señal en segmentos:

  • Si window es un entero, mscohere divide x e y en segmentos de longitud window y aplica una ventana de Hamming de esa longitud a cada segmento.

  • Si window es un vector, mscohere divide x e y en segmentos de la misma longitud que el vector y aplica ventanas a cada segmento con window.

Si la longitud de x e y no puede dividirse exactamente en un número entero de segmentos con muestras solapadas noverlap, las señales se truncan en consecuencia.

Si se especifica window como vacío, mscohere utiliza una ventana de Hamming de forma que x e y se dividen en ocho segmentos con muestras solapadas noverlap.

Para obtener una lista de las ventanas disponibles, consulte Ventanas.

Ejemplo: hann(N+1) y (1-cos(2*pi*(0:N)'/N))/2 especifican ambas una ventana de Hann de longitud N + 1.

Tipos de datos: single | double

Número de muestras solapadas, especificado como entero positivo.

  • Si window es escalar, noverlap debe ser menor que window.

  • Si window es un vector, noverlap debe ser menos que la longitud de window.

Si especifica noverlap como vacío, mscohere utiliza un número que genera un 50% de solapamiento entre segmentos. Si no se especifica la longitud del segmento, la función establece noverlap en ⌊N/4,5⌋, donde N es la longitud de las señales de entrada y salida.

Tipos de datos: double | single

Número de puntos DFT, especificado como entero positivo. Si se especifica nfft como vacío, mscohere establece este argumento en max(256,2p), donde p = ⌈log2 N para las señales de entrada de longitud N.

Tipos de datos: single | double

Tasa de muestreo, especificada como un escalar positivo. La tasa de muestreo es el número de muestras por unidad de tiempo. Si la unidad de tiempo es el segundo, la tasa de muestreo tendrá unidades de Hz.

Frecuencias normalizadas, especificadas como vector fila o vector columna con al menos dos elementos. Las frecuencias normalizadas están en rad/muestra.

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

Tipos de datos: double | single

Frecuencias, especificadas como vector fila o vector columna con al menos dos elementos. Las frecuencias están en ciclos por unidad de tiempo. La unidad de tiempo viene especificada por la tasa de muestreo, fs. Si las unidades de fs son muestras/segundo, las unidades de f son Hz.

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

Tipos de datos: double | single

Rango de frecuencia para la estimación de la coherencia de magnitud cuadrada, especificado como 'onesided', 'twosided' o 'centered'. El valor predeterminado es 'onesided' para señales de valor real y 'twosided' para señales de valor complejo.

  • 'onesided': Devuelve la estimación unilateral de la coherencia de magnitud cuadrada entre dos señales de entrada de valor real, x e y. Si nfft es par, cxy tiene nfft/2 + 1 filas y se calcula en el intervalo [0,π] rad/muestra. Si nfft es impar, cxy tiene (nfft + 1)/2 filas y el intervalo es [0,π) rad/muestra. Si se especifica fs, los intervalos correspondientes son [0,fs/2] ciclos/unidad de tiempo cuando nfft es par y [0,fs/2) ciclos/unidad de tiempo cuando nfft es impar.

  • 'twosided': Devuelve la estimación bilateral de la coherencia de magnitud cuadrada entre dos señales de entrada de valor real o complejo, x e y. En este caso, cxy tiene nfft filas y se calcula en el intervalo [0,2π) rad/muestra. Si se especifica fs, el intervalo es [0, fs] ciclos/unidad de tiempo.

  • 'centered': Devuelve la estimación bilateral centrada de la coherencia de magnitud cuadrada entre dos señales de entrada de valor real o complejo, x e y. En este caso, cxy tiene nfft filas y se calcula en el intervalo (–π,π] rad/muestra cuando nfft es par y (–π,π) rad/muestra cuando nfft es impar. Si se especifica fs, los intervalos correspondientes son (–fs/2, fs/2] ciclos/unidad de tiempo cuando nfft es par y (–fs/2, fs/2) ciclos/unidad de tiempo cuando nfft es impar.

Argumentos de salida

contraer todo

Estimación de la coherencia de magnitud cuadrada, devuelta como vector, matriz o arreglo tridimensional.

Frecuencias normalizadas, devueltas como vector columna de valor real.

Frecuencias, devueltas como vector columna de valor real.

Más acerca de

contraer todo

Coherencia de magnitud cuadrada

La estimación de la coherencia de magnitud cuadrada es una función de la frecuencia con valores entre 0 y 1. Estos valores indican lo bien que x corresponde a y en cada frecuencia. La coherencia de magnitud cuadrada es una función de las densidades espectrales de potencia, Pxx(f) y Pyy(f), y de la densidad espectral de potencia cruzada, Pxy(f), de x e y:

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

En los sistemas de multi-entrada y multi-salida, la función de coherencia múltiple se convierte en

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)

para la señal de salida i, donde:

  • X se corresponde con el arreglo de m entradas.

  • PXyi es el vector de m dimensiones de densidades espectrales de potencia cruzada entre las entradas e yi.

  • PXX es la matriz m por m de densidades espectrales de potencia y densidades espectrales de potencia cruzada de las entradas.

  • Pyiyi es la densidad espectral de potencia de la salida.

  • La cruz (†) representa la traspuesta conjugada compleja.

Algoritmos

mscohere estima la función de coherencia de magnitud cuadrada [2] utilizando el método del periodograma superpuesto de Welch [3], [5].

Referencias

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

Capacidades ampliadas

Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.

Historial de versiones

Introducido antes de R2006a

expandir todo