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.

xspectrogram

Espectrograma cruzado con transformaciones de Fourier de corta breve data

Descripción

s = xspectrogram(x,y) devuelve el espectrograma cruzado de las señales especificadas por y .xy Las señales de entrada deben ser vectores con el mismo número de elementos. Cada columna de contiene una estimación del contenido de frecuencia localizado a corto plazo y tiempo común a y .sxy

s = xspectrogram(x,y,window) se utiliza para dividir y en segmentos y realizar ventanas.windowxy

s = xspectrogram(x,y,window,noverlap) utiliza muestras de superposición entre segmentos adyacentes.noverlap

ejemplo

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

[s,w,t] = xspectrogram(___) devuelve un vector de frecuencias normalizadas, y un vector de instantes de tiempo, , en el que se calcula el espectrograma cruzado.wt Esta sintaxis puede incluir cualquier combinación de argumentos de entrada de sintaxis anteriores.

[s,f,t] = xspectrogram(___,fs) devuelve un vector de frecuencias, expresada en términos de , la frecuencia de muestreo. debe ser la sexta entrada para .ffsfsxspectrogram Para introducir una frecuencia de muestreo y seguir utilizando los valores predeterminados de los argumentos opcionales anteriores, especifique estos argumentos como vacíos, .[]

[s,w,t] = xspectrogram(x,y,window,noverlap,w) devuelve el espectrograma cruzado a las frecuencias normalizadas especificadas en .w

ejemplo

[s,f,t] = xspectrogram(x,y,window,noverlap,f,fs) devuelve el espectrograma cruzado a las frecuencias especificadas en .f

ejemplo

[___,c] = xspectrogram(___) también devuelve una matriz, , que contiene una estimación del espectro complejo variable de tiempo de las señales de entrada.c El espectrograma cruzado, , es la magnitud de .sc

ejemplo

[___] = xspectrogram(___,freqrange) devuelve el espectrograma cruzado sobre el rango de frecuencia especificado por .freqrange Las opciones válidas para son , , y .freqrange'onesided''twosided''centered'

ejemplo

[___] = xspectrogram(___,Name,Value) especifica opciones adicionales mediante argumentos de par nombre-valor. Las opciones incluyen el umbral mínimo y la dimensión de tiempo de salida.

[___] = xspectrogram(___,spectrumtype) devuelve estimaciones de densidad espectral de potencia cruzada a corto plazo si se especifica como y devuelve estimaciones de espectro de potencia cruzada a corto plazo si se especifica como .spectrumtype'psd'spectrumtype'power'

xspectrogram(___) sin argumentos de salida traza el espectrograma cruzado en la ventana de figura actual.

xspectrogram(___,freqloc) especifica el eje en el que se trazará la frecuencia. Especifique como uno o .freqloc'xaxis''yaxis'

Ejemplos

contraer todo

Genere dos chirridos lineales muestreados a 1 MHz durante 10 milisegundos.

  • El primer chirrido tiene una frecuencia inicial de 150 kHz que aumenta a 350 kHz al final de la medición.

  • El segundo chirrido tiene una frecuencia inicial de 200 kHz que aumenta a 300 kHz al final de la medición.

Agregue el ruido gaussiano blanco de tal forma que la relación señal-ruido sea de 40 dB.

nSamp = 10000; Fs = 1000e3; SNR = 40; t = (0:nSamp-1)'/Fs;  x1 = chirp(t,150e3,t(end),350e3); x1 = x1+randn(size(x1))*std(x1)/db2mag(SNR);  x2 = chirp(t,200e3,t(end),300e3); x2 = x2+randn(size(x2))*std(x2)/db2mag(SNR);

Calcular y trazar el espectrograma cruzado de los dos chirridos. Divida las señales en segmentos de 200 muestras y avíselos en cada segmento con una ventana Hamming. Especifique 80 muestras de superposición entre segmentos adyacentes y una longitud DFT de 1024 muestras.

xspectrogram(x1,x2,hamming(200),80,1024,Fs,'yaxis')

Modifique el segundo chirrido para que la frecuencia aumente de 50 kHz a 350 kHz durante la medición. Utilice una ventana Kaiser de 500 muestras con factor de forma

<math display="block">
<mrow>
<mi>β</mi>
<mo>=</mo>
<mn>5</mn>
</mrow>
</math>
para adelanto de los segmentos. Especifique 450 muestras de solapamiento y una longitud DFT de 256. Calcular y trazar el espectrograma cruzado.

x2 = chirp(t,50e3,t(end),350e3); x2 = x2+randn(size(x2))*std(x2)/db2mag(SNR);  xspectrogram(x1,x2,kaiser(500,5),450,256,Fs,'yaxis')

En ambos casos, la función resalta el contenido de frecuencia que las dos señales tienen en común.

Cargue un archivo que contenga dos señales de voz muestreadas a 44.100 Hz.

  • La primera señal es una grabación de una voz femenina que dice "función de transformación".

  • La segunda señal es una grabación de la misma voz femenina que dice "reforma de la justicia".

Traza las dos señales. Desplazar la segunda señal verticalmente para que ambas sean visibles.

load(fullfile(matlabroot,'examples','signal','voice.mat'))  % To hear, type soundsc(transform,fs),pause(2),soundsc(reform,fs)  t = (0:length(reform)-1)/fs;  plot(t,transform,t,reform+0.3) legend('"Transform function"','"Reform justice"')

Calcular el espectrograma cruzado de las dos señales. Divida las señales en segmentos de 1000 muestras y anólelas con una ventana de Hamming. Especifique 800 muestras de superposición entre segmentos adyacentes. Incluya solo frecuencias de hasta 4 kHz.

nwin = 1000; nvlp = 800; fint = 0:4000;  [s,f,t] = xspectrogram(transform,reform,hamming(nwin),nvlp,fint,fs);  mesh(t,f,20*log10(s)) view(2) axis tight

El espectrograma cruzado resalta los intervalos de tiempo en los que las señales tienen más contenido de frecuencia en común. La sílaba "forma" es particularmente notable.

Genere dos chirridos cuadráticos, cada uno muestreado a 1 kHz durante 2 segundos. Ambos chirridos tienen una frecuencia inicial de 100 Hz que aumenta a 200 Hz a mitad de la medición. El segundo chirrido tiene una diferencia de fase de 23o en comparación con el primero.

fs = 1e3; t = 0:1/fs:2;  y1 = chirp(t,100,1,200,'quadratic',0); y2 = chirp(t,100,1,200,'quadratic',23);

Calcular el espectrograma cruzado complejo de los chirridos para extraer el cambio de fase entre ellos. Divida las señales en segmentos de 128 muestras. Especifique 120 muestras de superposición entre segmentos adyacentes. Anote cada segmento utilizando una ventana Kaiser con el factor de forma 18 y especifique una longitud DFT de 128 muestras.β Utilice la funcionalidad de trazado de para mostrar el espectrograma cruzado.xspectrogram

[~,f,xt,c] = xspectrogram(y1,y2,kaiser(128,18),120,128,fs);  xspectrogram(y1,y2,kaiser(128,18),120,128,fs,'yaxis')

Extraiga y muestre la cresta de frecuencia de tiempo de máxima energía del espectrograma cruzado.

[tfr,~,lridge] = tfridge(c,f);  hold on plot(xt,tfr,'k','linewidth',2) hold off

El cambio de fase es la relación entre la parte imaginaria y la parte real del espectro cruzado que varía en el tiempo a lo largo de la cresta. Calcular el cambio de fase y expresarlo en grados. Muestre su valor medio.

pshft = angle(c(lridge))*180/pi;  mean(pshft)
ans = -23.0000 

Genere dos señales, cada una muestreada a 3 kHz durante 1 segundo. La primera señal es un chirp cuadrático cuya frecuencia aumenta de 300 Hz a 1300 Hz durante la medición. El chirp está incrustado en ruido gaussiano blanco. La segunda señal, también incrustada en ruido blanco, es un chirp con contenido de frecuencia sinusoidalmente variable.

fs = 3000; t = 0:1/fs:1-1/fs;  x1 = chirp(t,300,t(end),1300,'quadratic')+randn(size(t))/100;  x2 = exp(2j*pi*100*cos(2*pi*2*t))+randn(size(t))/100;

Calcular y trazar el espectrograma cruzado de las dos señales. Divida las señales en segmentos de 256 muestras con 255 muestras de superposición entre segmentos adyacentes. Utilice una ventana Kaiser con el factor de forma 30 para adelantar los segmentos.β Utilice el número predeterminado de puntos DFT. Centrar el espectrograma cruzado a frecuencia cero.

nwin = 256;  xspectrogram(x1,x2,kaiser(nwin,30),nwin-1,[],fs,'centered','yaxis')

Calcular el espectro de potencia en lugar de la densidad espectral de potencia. Establezca en cero los valores menores que –40 dB. Centra la parcela en la frecuencia Nyquist.

xspectrogram(x1,x2,kaiser(nwin,30),nwin-1,[],fs, ...     'power','MinThreshold',-40,'yaxis') title('Cross-Spectrogram of Quadratic Chirp and Complex Chirp')

El umbral destaca aún más las regiones de frecuencia común.

Calcular y trazar el espectrograma cruzado de dos secuencias.

Especifique que cada secuencia tiene 4096 muestras de longitud.

N = 4096;

Para crear la primera secuencia, genere un chirp cuadrático convexo incrustado en el ruido gaussiano blanco y el paso de banda lo filtre.

  • El chirrido tiene una frecuencia normalizada inicial de 0,1o que aumenta a 0,8o al final de la medición.

  • El filtro de 16o orden pasa las frecuencias normalizadas entre 0,2o y 0,4o rad/muestra y tiene una atenuación de banda de parada de 60 dB.

rx = chirp(0:N-1,0.1/2,N,0.8/2,'quadratic',[],'convex')'+randn(N,1)/100; dx = designfilt('bandpassiir','FilterOrder',16, ...     'StopbandFrequency1',0.2,'StopbandFrequency2',0.4, ...     'StopbandAttenuation',60); x = filter(dx,rx);

Para crear la segunda secuencia, genere un chirp lineal incrustado en el ruido gaussiano blanco y filtre el bandstop.

  • El chirrido tiene una frecuencia normalizada inicial de 0,9o que disminuye a 0,1o al final de la medición.

  • El filtro de orden 16 detiene las frecuencias normalizadas entre 0,6o y 0,8o rad/sample y tiene una ondulación de banda de paso de 1 dB.

ry = chirp(0:N-1,0.9/2,N,0.1/2)'+randn(N,1)/100; dy = designfilt('bandstopiir','FilterOrder',16, ...     'PassbandFrequency1',0.6,'PassbandFrequency2',0.8, ...     'PassbandRipple',1); y = filter(dy,ry);

Trazar las dos secuencias. Desfase la segunda secuencia verticalmente para que ambas sean visibles.

plot([x y+2])

Calcular y trazar el espectrograma cruzado de y .xy Utilice una ventana Hamming de 512 muestras. Especifique 500 muestras de superposición entre segmentos adyacentes y 2048 puntos DFT.

xspectrogram(x,y,hamming(512),500,2048,'yaxis')

Establezca en cero los valores de espectrograma cruzado menores que –50 dB.

xspectrogram(x,y,hamming(512),500,2048,'MinThreshold',-50,'yaxis')

El espectrograma muestra las regiones de frecuencia que se mejoran o suprimen mediante los filtros.

Argumentos de entrada

contraer todo

Señales de entrada, especificadas como vectores.

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 las señales en segmentos.window

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

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

Si las señales de entrada no se pueden dividir exactamente en un número entero de segmentos con muestras superpuestas, se truncan en consecuencia.noverlap

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

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.noverlapxspectrogram 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.noverlapNN

Tipos de datos: double | single

Número de puntos DFT, especificado como un escalar entero positivo. Si especifica como vacío, establece la longitud de DFT ennfftxspectrogram max(256,2p)Dónde p = ⌈log2 Nw Y

  • Nw Si es un escalar.windowwindow

  • Nw = length(window) si es un vector.window

Tipos de datos: single | double

Frecuencias normalizadas, especificadas como vector. debe tener al menos dos elementos.w Las frecuencias normalizadas están en rad/muestra.

Ejemplo: pi./[2 4]

Tipos de datos: double | single

Frecuencias, especificadas como vector. debe tener al menos dos elementos.f Las unidades de se especifican por la frecuencia de muestreo, .ffs

Tipos de datos: double | single

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 está en Hz.

Tipos de datos: double | single

Rango de frecuencia para la estimación entre espectros, especificado como , , o .'onesided''twosided''centered' Para las señales de valor real, el valor predeterminado es .'onesided' Para las señales de valores complejos, el valor predeterminado es , y especificar resultados en un error.'twosided''onesided'

  • — Devuelve el espectrograma cruzado unilateral de una señal de entrada real.'onesided' Si es par, entonces tiene /2 + 1 filas y se calcula en el intervalonfftsnfft [0, π] rad/muestra. Si es impar, entonces tiene ( + 1)/2 filas y el intervalo esnfftsnfft [0, π) rad/muestra. Si especifica , los intervalos son respectivamente [0, /2] ciclos/tiempo unitario y [0, /2) ciclos/tiempo unitario.fsfsfs

  • — Devuelve el espectrograma cruzado de dos lados de una señal real o compleja. tiene filas y se calcula a lo largo del intervalo'twosided'snfft [0, 2π) rad/muestra. Si especifica , el intervalo es [0, ) ciclos/tiempo unitario.fsfs

  • — Devuelve el espectrograma cruzado de dos lados centrado para una señal real o compleja. tiene filas.'centered'snfft Si es par, entonces se calcula a lo largo del intervalonffts (–ππ] rad/muestra. Si es extraño, entonces se calcula sobrenffts (–ππ) rad/muestra. Si especifica , los intervalos son respectivamente (– /2, /2] ciclos/tiempo unitario y (– /2, /2) ciclos/tiempo unitario.fsfsfsfsfs

Escalado de espectro de potencia cruzada, especificado como o .'psd''power'

  • Omitir o especificar , devuelve la densidad espectral de potencia cruzada.spectrumtype'psd'

  • La especificación escala cada estimación de la densidad espectral de potencia cruzada por el ancho de banda de resolución, que depende del ancho de banda de ruido equivalente de la ventana y la duración del segmento.'power' El resultado es una estimación de la potencia en cada frecuencia.

Eje de visualización de frecuencia, especificado como o .'xaxis''yaxis'

  • — Muestra la frecuencia en el eje y el tiempo en el eje - .'xaxis'xy

  • — Muestra la frecuencia en el eje y el tiempo en el eje - .'yaxis'yx

Este argumento se omite si se llama con argumentos de salida.xspectrogram

Argumentos de par nombre-valor

Especifique pares opcionales separados por comas de argumentos. es el nombre del argumento y es el valor correspondiente. deben aparecer entre comillas.Name,ValueNameValueName Puede especificar varios argumentos de par de nombre y valor en cualquier orden como .Name1,Value1,...,NameN,ValueN

Ejemplo: divide y en segmentos de longitud 100 y ventanas cada segmento con una ventana Hamming de esa longitud.xspectrogram(x,100,'OutputTimeDimension','downrows')xy La salida del espectrograma tiene una dimensión de tiempo en las filas.

Umbral, especificado como el par separado por comas que consta de y un escalar real expresado en decibelios. establece en cero aquellos elementos de tal que 10 registroMinThresholdxspectrograms10( ) .sthresh

Dimensión de tiempo de salida, especificada como el par separado por comas que consta de y o .OutputTimeDimensionacrosscolumnsdownrows Establezca este valor en , si desea la dimensión de tiempo de , , , y hacia abajo las filas y la dimensión de frecuencia a lo largo de las columnas.downrowsspsfctc Establezca este valor en , si desea la dimensión de tiempo de , , , y en las columnas y la dimensión de frecuencia a lo largo de las filas.acrosscolumnsspsfctc Esta entrada se omite si se llama a la función sin argumentos de salida.

Argumentos de salida

contraer todo

Espectrograma cruzado, devuelto como matriz. El tiempo aumenta a través de las columnas y la frecuencia aumenta las filas, empezando por cero.s

  • Si las señales de entrada y son de longitud, entonces tiene columnas, donde:xyNsk

    • Si es un escalar, si es un escalar, s.kNnoverlapwindownoverlapwindow

    • • ( – ) /(kNnoverlaplength(window) – ) si es un vector.noverlapwindow

  • Si las señales de entrada son reales y son uniformes, entonces tiene ( /2 + 1) filas.nfftsnfft

  • Si las señales de entrada son reales y son impares, entonces tiene ( + 1)/2 filas.nfftsnfft

  • Si las señales de entrada son complejas, tiene filas.snfft

Tipos de datos: double | single

Frecuencias normalizadas, devueltas como vector. tiene una longitud igual al número de filas de .ws

Tipos de datos: double | single

Instantáneas de tiempo, devueltas como vector. Los valores de tiempo corresponden al punto medio de cada segmento especificado mediante .twindow

Tipos de datos: double | single

Frecuencias cíclicas, devueltas como vector. tiene una longitud igual al número de filas de .fs

Tipos de datos: double | single

Espectro cruzado complejo variable en el tiempo, devuelto como una matriz. El espectrograma cruzado, , es la magnitud de .sc

Tipos de datos: double | single

Referencias

[1] Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck. Discrete-Time Signal Processing. 2nd Ed. Upper Saddle River, NJ: Prentice Hall, 1999.

[2] Mitra, Sanjit K. Digital Signal Processing: A Computer-Based Approach. 2nd Ed. New York: McGraw-Hill, 2001.

Consulte también

| |

Introducido en R2017a