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

La coherencia de magnitud cuadrada

Descripción

cxy = mscohere(x,y) encuentra la estimación de la coherencia de magnitud cuadrada, 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, 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 de columna por columna.

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

  • Si y son matrices de igual tamaño, entonces opera en 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) 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 transformada de Fourier discreta.nfft

ejemplo

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

[cxy,w] = mscohere(___) Devuelve un vector de frecuencias normalizadas, en la que se estima la coherencia de magnitud cuadrada.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.ffsfsmscohere Para introducir una frecuencia de muestreo y seguir utilizar 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 en el intervalo de frecuencias 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 la coherencia de magnitud cuadrada en la ventana de la figura actual.

Ejemplos

contraer todo

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

Genere una señal consistente en ruido Gaussiano blanco.

r = randn(16384,1);

Para crear la primera secuencia, el paso de banda filtra la señal. Diseña un filtro de orden 16 que pase frecuencias normalizadas entre 0,2 π y 0,4 π Rad/sample. Especifique una atenuación de la banda de detención 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 orden 16 que detenga las frecuencias normalizadas entre 0,6 π y 0,8 π Rad/sample. 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);

Estimar la coherencia de magnitud cuadrada de y.xy Utilice una ventana de 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);

Graficar 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 de dos canales aleatoria,.x Genere otra señal, por paso bajo filtrando los dos canales y añadiéndolos juntos.y Especifique un filtro FIR de 30 órdenes 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 coherencia múltiple de y.xy Ventana de las señales con una ventana de Hann de 1024 muestras. Especifique 512 muestras de superposición entre segmentos adyacentes y 1024 puntos DFT. Trace 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 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

Computa y traza la estimación de la coherencia de magnitud-cuadrada de y.xy La estimación no llega a 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. Una de las sinusoides retrasa la primera señal por π/2. La otra sinusoide tiene un desfase de π/4. Ambas señales están incrustadas en el 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 de longitud de Hamming 100 para la ventana de los datos. Devuelve una función de coherencia para cada canal de salida.mscohere Las funciones de coherencia alcanzan el maxima 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 de 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')

Computa 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 la cresta 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 

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 se retrasa la otra en fase por/3 radianes.π Inserte ambas señales en el 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 computar y trazar la coherencia de magnitud cuadrada de las señales.mscohere

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

Modifique el título de la gráfica, 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 manejador de los ejes actuales.gca Cambie las ubicaciones de las marcas de graduación. Quite 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;

Alternativamente, 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 una sinusoide incrustada en el ruido Gaussiano blanco.cos(pi/4*(0:159))+randn(1,160)

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

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

  • Si es un número entero, a continuación, divide y en segmentos de longitud y ventanas de cada segmento con una ventana de Hamming de esa longitud.windowmscoherexywindow

  • Si es un vector, a continuación, divide y en segmentos de la misma longitud que el vector y ventanas de cada segmento utilizando.windowmscoherexywindow

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

Si especifica como vacío, a continuación, utiliza una ventana de Hamming tal que y se dividen en ocho segmentos con muestras superpuestas.windowmscoherexynoverlap

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

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

Tipos de datos: single | double

Número de muestras superpuestas, especificadas 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 los segmentos.noverlapmscohere Si la longitud del segmento no está especificada, la función se establece en ⌊/4,5 ⌋, donde es 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, a continuación, establece este argumento paranfftmscohere max(256,2p)Dónde p = ⌈log2 N para las señales de entrada de longitud.N

Tipos de datos: single | double

Frecuencia de muestreo, especificada como un escalar positivo. La frecuencia de muestreo es el número de muestras por unidad de tiempo. Si la unidad de tiempo es de 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/sample.

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. La hora de la unidad 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 frecuencias para la estimación de la coherencia de magnitud cuadrada, especificada como, o.'onesided''twosided''centered' El valor predeterminado es para las señales con valores reales y para las señales con valores complejos.'onesided''twosided'

  • : Devuelve la estimación unilateral de la estimación de la coherencia de magnitud cuadrada entre dos señales de entrada con valores reales y.'onesided'xy Si es Even, tiene/2 + 1 filas y se calcula en el intervalonfftcxynfft [0,π] RAD/sample. Si es impar, tiene (+ 1)/2 filas y el intervalo esnfftcxynfft [0,π) RAD/sample. Si se especifica, los intervalos correspondientes son [0,/2] ciclos/unidad de tiempo para pares y [0,/2) ciclos/unidad de tiempo para impar.fsfsnfftfsnfft

  • : Devuelve la estimación bilateral de la estimación de la coherencia de magnitud cuadrada entre dos señales de entrada con valores complejos o de valor real, y.'twosided'xy En este caso, tiene filas y se calcula a lo largo del intervalocxynfft [0,2π) RAD/sample. Si se especifica, el intervalo es [0,) ciclos/unidad de tiempo.fsfs

  • : Devuelve la estimación centrada a dos caras de la estimación de la coherencia de magnitud cuadrada entre dos señales de entrada con valores complejos o de valor real, y.'centered'xy En este caso, tiene filas y se calcula a lo largo del intervalocxynfft (–π,π] RAD/sample para Even ynfft (–π,π) RAD/sample para Odd.nfft Si especifica, los intervalos correspondientes son (–/2,/2] ciclos/unidad de tiempo para pares y (–/2,/2) ciclos/unidad de tiempo para impar.fsfsfsnfftfsfsnfft

Argumentos de salida

contraer todo

Estimación de la coherencia de magnitud cuadrada, 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

La coherencia de magnitud cuadrada

La estimación de la coherencia de magnitud cuadrada 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 sistemas de entrada múltiple/múltiples salidas, 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 TH, donde:i

  • corresponde a la matriz de entradas.Xm

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

  • PXX es la matriz 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 (†) representa la transposición compleja conjugada.

Algoritmos

estima la función de coherencia de magnitud cuadrada usando 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