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

El espectrograma cruzado mediante transformaciones de Fourier a corto plazo

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 contiene una estimación del contenido de frecuencia localizada en el tiempo y a corto plazo común a y.sxy

s = xspectrogram(x,y,window) 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 transformada de Fourier discreta.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, expresado en términos de la frecuencia de muestreo. debe ser la sexta entrada.ffsfsxspectrogram Para introducir una frecuencia de muestreo y seguir utilizar 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 en las frecuencias normalizadas especificadas en.w

ejemplo

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

ejemplo

[___,c] = xspectrogram(___) también devuelve una matriz, que contiene una estimación del espectro transversal complejo que varía en el 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 frecuencias especificado por.freqrange Las opciones válidas para son, y.freqrange'onesided''twosided''centered'

ejemplo

[___] = xspectrogram(___,'MinThreshold',thresh) establece en cero esos elementos de tal que 10 logs10() ≤.sthresh Especifique en decibelios.thresh

[___] = 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 la figura actual.

xspectrogram(___,freqloc) especifica el eje en el que se trazan las frecuencias. Especifique como o.freqloc'xaxis''yaxis'

Ejemplos

contraer todo

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

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

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

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

Computa y traza el espectrograma cruzado de los dos Chirps. Divida las señales en segmentos de 200 muestras y ventana cada segmento con una ventana de Hamming. Especifique 80 muestras de superposición entre segmentos adyacentes y una longitud de DFT de 1024 muestras.

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

Modifique el segundo Chirp para que la frecuencia suba 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>
a la ventana de los segmentos. Especifique 450 muestras de superposición y una longitud de DFT de 256. Computa y traza 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 tienen las dos señales 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 "Justicia de la reforma."

Trace las dos señales. Equidistanciar 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"')

Calcule el espectrograma cruzado de las dos señales. Divida las señales en segmentos de 1000 muestras y utilícelos 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íable "forma" es particularmente notable.

Genere dos Chirps 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 Chirp tiene una diferencia de fase de 23 ° comparado 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);

Computa el complejo espectrograma cruzado del canto 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. Ventana de cada segmento utilizando una ventana de Kaiser con factor de forma = 18 y especifique una longitud de DFT de 128 muestras.β Utilice la funcionalidad de trazado para visualizar 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 visualice la cresta de frecuencia de tiempo máxima de 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 transversal que varía en el tiempo a lo largo de la cresta. Calcule el cambio de fase y expresarlo en grados. Mostrar 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 el ruido Gaussiano blanco. La segunda señal, también incrustada en el ruido blanco, es un chirrido con contenido de frecuencia que varía sinusoidalmente.

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;

Computa y traza 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 de Kaiser con factor de forma = 30 para la ventana de los segmentos.β Utilice el número predeterminado de puntos DFT. Centrar el espectrograma cruzado con frecuencia cero.

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

Calcule el espectro de potencia en lugar de la densidad espectral de potencia. Fije a cero los valores más pequeños que – 40 dB. Centrar la trama 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 resalta aún más las regiones de frecuencia común.

Calcule y trace el espectrograma cruzado de dos secuencias.

Especifique cada secuencia para que sea 4096 muestras de largo.

N = 4096;

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

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

  • El filtro de orden 16 pasa frecuencias normalizadas entre 0,2 π y 0,4 π Rad/sample 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 la banda.

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

  • El filtro de orden 16 detiene las frecuencias normalizadas entre 0,6 π y 0,8 π 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);

Trace las dos secuencias. Desfasar la segunda secuencia verticalmente para que ambos estén visibles.

plot([x y+2])

Computa y traza el espectrograma cruzado de y.xy Utilice una ventana de 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')

Fije a cero los valores del espectrograma cruzado más pequeño que – 50 dB.

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

El espectrograma muestra las regiones de frecuencia que los filtros han mejorado o suprimido.

Argumentos de entrada

contraer todo

Señales de entrada, especificadas como vectores.

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 las señales 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.windowxspectrogramxywindow

  • Si es un vector, a continuación, divide y en segmentos de la misma longitud que el vector y ventanas de 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, entonces se truncan en consecuencia.noverlap

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

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

Tipos de datos: double | single

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

  • Nw = if 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/sample.

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

Tipos de datos: double | single

Rango de frecuencias para la estimación de espectro cruzado, especificado como, o.'onesided''twosided''centered' Para las señales con valores reales, el valor predeterminado es.'onesided' Para las señales con valores complejos, el valor predeterminado es y se especifican los resultados en un error.'twosided''onesided'

  • : Devuelve el espectrograma cruzado unilateral de una señal de entrada real.'onesided' Si es Even, entonces tiene/2 + 1 filas y se calcula sobre el intervalonfftsnfft [0, π] RAD/sample. Si es impar, entonces tiene (+ 1)/2 filas y el intervalo esnfftsnfft [0, π) RAD/sample. Si especifica, los intervalos son respectivamente [0,/2] ciclos/unidad de tiempo y [0,/2) ciclos/unidad de tiempo.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/sample. Si especifica, el intervalo es [0,) ciclos/unidad de tiempo.fsfs

  • : Devuelve el espectrograma cruzado de dos lados centrado para una señal real o compleja. tiene filas.'centered'snfft Si es Even, entonces se calcula sobre el intervalonffts (–ππ] RAD/sample. Si es impar, entonces se calcula sobrenffts (–ππ) RAD/sample. Si especifica, los intervalos son respectivamente (–/2,/2] ciclos/unidad de tiempo y (–/2,/2) ciclos/unidad de tiempo.fsfsfsfsfs

Escala de espectro de potencia cruzada, especificada como o.'psd''power'

  • Si se omite o se especifica, se devuelve la densidad espectral de potencia cruzada.spectrumtype'psd'

  • La especificación de escalas 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.

Umbral, especificado como un escalar real expresado en decibelios. establece en cero esos elementos de tal que 10 logxspectrograms10() ≤.sthresh

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

  • : Muestra la frecuencia en el eje y la hora en el eje.'xaxis'xy

  • : Muestra la frecuencia en el eje y la hora en el eje.'yaxis'yx

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

Argumentos de salida

contraer todo

El espectrograma cruzado, devuelto como una matriz. El tiempo aumenta a través de las columnas y la frecuencia aumenta en las filas, comenzando desde cero.s

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

    • = ⌊ (–)/(–) ⌋ si es un escalar.kNnoverlapwindownoverlapwindow

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

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

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

  • Si las señales de entrada son complejas, entonces 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

Instantes de tiempo, devueltos como un vector. Los valores de hora 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 que varía 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