Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

mscohere

Coherencia magnitude-cuadrada

Descripción

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

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

  • Si una de las señales es una matriz y la otra es un vector, entonces 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 cuadrada de magnitud por columna.

  • Si y son matrices con el mismo número de filas pero diferentes números de columnas, devuelve una matriz de coherencia múltiple.xymscohere La ésima columna de contiene una estimación del grado de correlación entre todas las señales de entrada y la ésima señal de salida.mcxym Consulte para obtener más información.Coherencia magnitude-cuadrada

  • Si y son matrices de igual tamaño, entonces opera columna: .xymscoherecxy(:,n) = mscohere(x(:,n),y(:,n)) Para obtener una matriz de coherencia múltiple, anexe a la lista de argumentos.'mimo'

cxy = mscohere(x,y,window) se utiliza para dividir y en segmentos y realizar ventanas.windowxy Debe utilizar al menos dos segmentos. De lo contrario, la coherencia de magnitud cuadrada es 1 para 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 superposición entre segmentos adyacentes.noverlap

ejemplo

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

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 sintaxis anteriores.

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

ejemplo

[cxy,f] = mscohere(___,fs) devuelve un vector de frecuencias, expresado en términos de la frecuencia de muestreo, en el que se estima la coherencia de magnitud cuadrada. debe ser la sexta entrada numérica para .ffsfsmscohere Para introducir una frecuencia 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 coherencia cuadrada de magnitud a las frecuencias normalizadas especificadas en .w

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

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

ejemplo

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

Ejemplos

contraer todo

Calcular y trazar la estimación de coherencia entre dos secuencias de ruido de color.

Generar una señal que consiste en ruido gaussiano blanco.

r = randn(16384,1);

Para crear la primera secuencia, el paso de banda filtra la señal. Diseñe un filtro de 16o orden que pase las frecuencias normalizadas entre 0,2o y 0,4o rad/muestra. Especifique una atenuación de banda de parada de 60 dB. Filtrar 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 16o orden que detenga las frecuencias normalizadas entre 0,6o y 0,8o rad/muestra. Especifique una ondulación de banda de paso de 0,1 dB. Filtrar la señal original.

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

Estimar la coherencia cuadrada de magnitud de y .xy Utilice una ventana Hamming de 512 muestras. Especifique 500 muestras de superposición entre segmentos adyacentes y 2048 puntos DFT.

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

Trazar la función de coherencia y superponer las respuestas de 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

Genere una señal aleatoria de dos canales, .x Generar otra señal, , mediante el paso bajo filtrando los dos canales y sumando juntos.y Especifique un filtro FIR de 30o orden con una frecuencia de corte de 0,3o y diseñado mediante una ventana rectangular.

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

Calcular la estimación de coherencia múltiple de y .xy Ventana las señales con una ventana Hann de 1024 muestras. Especifique 512 muestras de superposición entre segmentos adyacentes y 1024 puntos DFT. Trazar la estimación.

noverlap = 512; nfft = 1024;  mscohere(x,y,hann(nfft),noverlap,nfft,'mimo')

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

[H,f] = freqz(h);  hold on yyaxis right plot(f/pi,20*log10(abs(H))) hold off

Calcular y trazar la estimación ordinaria de coherencia cuadrada de magnitud de y .xy La estimación no alcanza 1 para ninguno de los canales.

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

Genere dos señales multicanal, cada una muestreada a 1 kHz durante 2 segundos. La primera señal, la entrada, consta de tres sinusoides con frecuencias de 120 Hz, 360 Hz y 480 Hz. La segunda señal, la salida, se compone de dos sinusoides con frecuencias de 120 Hz y 360 Hz. Uno de los sinusoides se relaga la primera señal por el número 2. El otro sinusoides tiene un desenlace de 4 o 4 euros. Ambas señales están incrustadas en ruido gaussiano blanco.

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

Estimar el grado de correlación entre todas las señales de entrada y cada uno de los canales de salida. Utilice una ventana Hamming de longitud 100 para asebodar los datos. devuelve una función de coherencia para cada canal de salida.mscohere Las funciones de coherencia alcanzan el máximo 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

Cambie las señales de entrada y salida y calcule la función de coherencia múltiple. Usa la misma ventana hamming. No hay correlación entre la entrada y la salida a 480 Hz. Por lo 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

Repita el cálculo, utilizando la funcionalidad de trazado de .mscohere

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

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

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

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 

Generar dos señales sinusoidales muestreadas durante 1 segundo cada una a 1 kHz. Cada sinusoides tiene una frecuencia de 250 Hz. Una de las señales se relag la otra en fase por /3 radianes.π Incruste ambas señales en ruido gaussiano blanco de la varianza de la unidad.

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

Se utiliza para calcular y trazar la coherencia cuadrada de magnitud de las señales.mscohere

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

Modifique el título del trazado, la etiqueta del eje y los límites del eje.xy

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

Se utiliza para obtener un asa de los ejes actuales.gca Cambie la ubicación de las marcas de graduación. Retire la etiqueta del eje.y

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

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

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

Como alternativa, utilice y modifique las propiedades de línea.setget

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

Argumentos de entrada

contraer todo

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

Ejemplo: especifica un sinusoides incrustado en el ruido gaussiano blanco.cos(pi/4*(0:159))+randn(1,160)

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

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

  • Si es un entero, divide y en segmentos de longitud y ventanas cada segmento con una ventana Hamming de esa longitud.windowmscoherexywindow

  • Si es un vector, se divide y se divide en segmentos de la misma longitud que el vector y windows cada segmento utilizando .windowmscoherexywindow

Si la longitud de y no se puede dividir exactamente en un número entero de segmentos con muestras superpuestas, entonces las señales se truncan en consecuencia.xynoverlap

Si especifica como vacío, utilice una ventana Hamming de forma que y se dividan en ocho segmentos con muestras superpuestas.windowmscoherexynoverlap

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

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

Tipos de datos: single | double

Número de muestras superpuestas, especificada como un entero positivo.

  • Si es escalar, debe ser menor que .windownoverlapwindow

  • Si es un vector, debe ser menor que la longitud de .windownoverlapwindow

Si especifica como vacío, utiliza un número que produce una superposición del 50% entre segmentos.noverlapmscohere Si la longitud del segmento no está especificada, la función se establece en /4.5 , donde está la longitud de las señales de entrada y salida.noverlapNN

Tipos de datos: double | single

Número de puntos DFT, especificado como un entero positivo. Si especifica como vacío, establece este argumento ennfftmscohere max(256,2p)Dónde p = ⌈log2 N para señales de entrada de longitud .N

Tipos de datos: single | double

Frecuencia de muestreo, especificada como escalar positiva. La frecuencia de muestreo es el número de muestras por unidad de tiempo. Si la unidad de tiempo es segundos, entonces la frecuencia de muestreo tiene unidades de Hz.

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

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

Tipos de datos: double

Frecuencias, especificadas como un vector de fila o columna con al menos dos elementos. Las frecuencias están en ciclos por unidad de tiempo. El tiempo unitario se especifica mediante la frecuencia de muestreo, .fs Si tiene unidades de muestras/segundo, entonces tiene unidades de Hz.fsf

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

Tipos de datos: double

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

  • — Devuelve la estimación unilateral de la estimación de coherencia cuadrada de magnitud entre dos señales de entrada de valor real, y .'onesided'xy Si es par, tiene /2 + 1 filas y se calcula en el intervalonfftcxynfft [0,π] rad/muestra. Si es impar, tiene ( + 1)/2 filas y el intervalo esnfftcxynfft [0,π) rad/muestra. Si especifica , los intervalos correspondientes son [0, /2] ciclos/tiempo unitario para ciclos pares y [0, /2) ciclos/tiempo unitario para impares .fsfsnfftfsnfft

  • — Devuelve la estimación de dos lados de la estimación de coherencia cuadrada de magnitud entre dos señales de entrada de valor real o de valor complejo, y .'twosided'xy En este caso, tiene filas y se calcula a lo largo del intervalocxynfft [0,2π) rad/muestra. Si especifica , el intervalo es [0, ) ciclos/tiempo unitario.fsfs

  • — Devuelve la estimación centrada a dos lados de la estimación de coherencia cuadrada de magnitud entre dos señales de entrada de valor real o de valor complejo, y .'centered'xy En este caso, tiene filas y se calcula a lo largo del intervalocxynfft (–π,π] rad/muestra para par ynfft (–π,π) rad/muestra para odd .nfft Si especifica , los intervalos correspondientes son (– /2, /2] ciclos/tiempo unitario para ciclos pares y (– /2, /2) ciclos/tiempo de unidad para impares .fsfsfsnfftfsfsnfft

Argumentos de salida

contraer todo

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

Frecuencias normalizadas, devueltas como un vector de columna de valor real.

Frecuencias, devueltas como un vector de columna de valor real.

Más acerca de

contraer todo

Coherencia magnitude-cuadrada

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

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

Para los sistemas de entrada múltiple/multisalida, 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, donde:i

  • corresponde a la matriz de entradas.Xm

  • PXyi es el vector dimensional de las densidades espectrales de potencia cruzada entre las entradas ym y yi.

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

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

  • La daga significa la compleja transposición conjugada.

Algoritmos

estima la función de coherencia cuadrada de magnitud utilizando el método de periodograma promedio superpuesto de Welch, .mscohere[2][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™.

Introducido antes de R2006a