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.

spectrogram

Espectrograma utilizando la transformada de Fourier de tiempo corto

Descripción

ejemplo

s= spectrogram(x)devuelve laTransformada de Fourier de tiempo corto(STFT) de la señal de entradax.Cada columna descontiene una estimación del contenido de la frecuencia de tiempo corto localizada en el tiempo dex.La magnitud al cuadrado desse conoce como la representación de tiempo-frecuencia delespectrogramadex[1]

ejemplo

s= spectrogram(x,window)utilizawindow帕拉dividir la senal en segmentos y disponerlos en ventanas.

ejemplo

s= spectrogram(x,window,noverlap)utiliza muestras de solapamientonoverlapentre segmentos contiguos.

ejemplo

s= spectrogram(x,window,noverlap,nfft)utiliza puntos de muestreonfftpara calcular la transformada discreta de Fourier.

ejemplo

[s,w,t] = spectrogram(___)devuelve un vector de frecuencias normalizadas,w, y un vector de instantes de tiempo,t, en los que se calcula la STFT. Esta sintaxis puede incluir cualquier combinación de argumentos de entrada de las sintaxis anteriores.

ejemplo

[s,f,t] = spectrogram(___,fs)devuelve un vector de frecuencias cíclicas,f, expresado en términos de la tasa de muestreofsfsdebe ser la quinta entrada paraspectrogram.帕拉introducir una tasa de muestreo y seguir utilizando los valores predeterminados de los argumentos opcionales anteriores, especifique estos argumentos como vacíos,[]

ejemplo

[s,w,t] = spectrogram(x,window,noverlap,w)devuelve la STFT en las frecuencias normalizadas especificadas enwwdebe tener al menos dos elementos porque, de lo contrario, la función lo interpreta comonfft

ejemplo

[s,f,t] = spectrogram(x,window,noverlap,f,fs)devuelve la STFT en las frecuencias cíclicas especificadas enffdebe tener al menos dos elementos porque, de lo contrario, la función lo interpreta comonfft

ejemplo

[___,ps] = spectrogram(___,spectrumtype)también devuelve una matriz,ps, proporcional al espectrograma dex

  • Si se especificaspectrumtypecomo"psd", cada columna depscontiene una estimación de la densidad espectral de potencia (PSD) de un segmento con ventana.

  • Si se especificaspectrumtypecomo"power", cada columna depscontiene una estimación del espectro de potencia de un segmento con ventana.

ejemplo

[___] = spectrogram(___,"reassigned")reasigna cada estimación de la PSD o del espectro de potencia a la ubicación de su centro de energía. Si su señal contiene componentes temporales o espectrales bien ubicados, esta opción genera un espectrograma más nítido.

ejemplo

[___,ps,fc,tc] = spectrogram(___)también devuelve dos matrices,fcytc, que contienen la frecuencia y el tiempo del centro de energía de cada estimación de la PSD o del espectro de potencia.

ejemplo

[___] = spectrogram(___,freqrange)devuelve la estimación de la PSD o del espectro de potencia a lo largo del rango de frecuencia especificado porfreqrange.Las opciones válidas parafreqrangeson"onesided","twosided"y"centered"

ejemplo

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

ejemplo

spectrogram(___)sin argumentos de salida representapsen decibelios en la ventana de figura actual.

ejemplo

spectrogram(___,freqloc)especifica el eje en el que se desea representar la frecuencia.

Ejemplos

contraer todo

Genere muestras N x = 1 0 2 4 de una señal que consista en una suma de sinusoides. Las frecuencias normalizadas de las sinusoides son 2 π / 5 rad/muestra y 4 π / 5 rad/muestra. La sinusoide de frecuencia superior tiene 10 veces la amplitud de la otra sinusoide.

N = 1024; n = 0:N-1; w0 = 2*pi/5; x = sin(w0*n)+10*sin(2*w0*n);

Calcule la transformada de Fourier de tiempo corto utilizando los valores predeterminados de la función. Represente el espectrograma.

s = spectrogram(x); spectrogram(x,'yaxis')

Figure contains an axes object. The axes object contains an object of type image.

Repita el cálculo.

  • Divida la señal en secciones de longitud n s c = N x / 4 5

  • Disponga en ventanas las secciones utilizando una ventana Hamming.

  • Especifique el 50% de solapamiento entre las secciones contiguas.

  • Para calcular la FFT, utilice max ( 2 5 6 , 2 p ) puntos, donde p = log 2 n s c

Verifique que los dos enfoques dan resultados idénticos.

Nx = length(x); nsc = floor(Nx/4.5); nov = floor(nsc/2); nff = max(256,2^nextpow2(nsc)); t = spectrogram(x,hamming(nsc),nov,nff); maxerr = max(abs(abs(t(:))-abs(s(:))))
maxerr = 0

Divida la senal en ocho secciones de igual longitud, con un 50% de solapamiento entre las secciones. Especifique la misma longitud de FFT que en el paso anterior. Calcule la transformada de Fourier de tiempo corto y verifique que ofrece el mismo resultado que los dos procedimientos anteriores.

ns = 8; ov = 0.5; lsc = floor(Nx/(ns-(ns-1)*ov)); t = spectrogram(x,lsc,floor(ov*lsc),nff); maxerr = max(abs(abs(t(:))-abs(s(:))))
maxerr = 0

Genere una señal compuesta por un chirp cuadrático convexo de valor complejo muestreado a 600 Hz durante 2 segundos. El chirp tiene una frecuencia inicial de 250 Hz y una final de 50 Hz.

fs = 6e2; ts = 0:1/fs:2; x = chirp(ts,250,ts(end),50,"quadratic",0,"convex","complex");

Funciónspectrogram

Utilice la funciónspectrogrampara calcular la STFT de la señal.

  • Divida la señal en segmentos, cada uno de M = 49 muestras.

  • Especifique L = 11 muestras de solapamiento entre segmentos contiguos.

  • Descarte el último segmento, el más corto.

  • Aplique una ventana de Bartlett a cada segmento.

  • Evalúe la transformada discreta de Fourier de cada segmento en N DFT = 1024 puntos. De forma predeterminada,spectrogramcalcula transformadas bilaterales en señales de valor complejo.

M = 49; L = 11; g = bartlett(M); Ndft = 1024; [s,f,t] = spectrogram(x,g,L,Ndft,fs);

Calcule y muestre el espectrograma, definido como la magnitud al cuadrado de la STFT, con la funciónwaterplot

waterplot(s,f,t)

Figure contains an axes object. The axes object contains an object of type patch.

Definición de STFT

Calcule la STFT de la señal de N x muestras con la definición. Divida la señal en N x - L M - L segmentos superpuestos. Aplique una ventana a cada segmento y evalúe la transformada discreta de Fourier en N DFT puntos.

[segs,~] = buffer(1:length(x),M,L,"nodelay"); X = fft(x(segs).*g,Ndft);

Calcule los intervalos de tiempo y frecuencia de la STFT.

  • Para encontrar los valores de tiempo, divida el vector tiempo en segmentos superpuestos. Los valores de tiempo son los puntos medios de los segmentos, y cada segmento se trata como un intervalo abierto en el extremo inferior.

  • Para encontrar los valores de frecuencia, especifique un intervalo de Nyquist cerrado en la frecuencia cero y abierto en el extremo inferior.

tbuf = ts(segs); tint = mean(tbuf(2:end,:)); fint = 0:fs/Ndft:fs-fs/Ndft;

Compare la salida despectrogramcon la definición. Muestre el espectrograma.

maxdiff = max(max(abs(s-X)))
maxdiff = 0
waterplot(X,fint,tint)

Figure contains an axes object. The axes object contains an object of type patch.

functionwaterplot(s,f,t)% Waterfall plot of spectrogramwaterfall(f,t,abs(s)'.^2) set(gca,XDir="reverse",View=[30 50]) xlabel("Frequency (Hz)") ylabel("Time (s)")end

Genere una señal compuesta por un chirp muestreado a 1,4 kHz durante 2 segundos. La frecuencia del chirp disminuye linealmente de 600 Hz a 100 Hz durante el tiempo de medición.

fs = 1400; x = chirp(0:1/fs:2,600,2,100);

Valores predeterminados destft

Calcule la STFT de la señal con las funcionesspectrogramystft.Utilice los valores predeterminados de la funciónstft:

  • Divida la señal en segmentos de 128 muestras y aplique una ventana periódica de Hann a cada segmento.

  • Especifique 96 muestras de solapamiento entre segmentos contiguos. Esta longitud equivale al 75% de la longitud de la ventana.

  • Especifique 128 puntos de la DFT y centre la STFT en la frecuencia cero, con la frecuencia expresada en hercios.

Compruebe que los dos resultados son iguales.

M = 128; g = hann(M,"periodic"); L = 0.75*M; Ndft = 128; [sp,fp,tp] = spectrogram(x,g,L,Ndft,fs,"centered"); [s,f,t] = stft(x,fs); dff = max(max(abs(sp-s)))
dff = 0

Represente las dos salidas con la funciónmesh

subplot(2,1,1) mesh(tp,fp,abs(sp).^2) title("spectrogram") view(2), axistightsubplot(2,1,2) mesh(t,f,abs(s).^2) title("stft") view(2), axistight

Figure contains 2 axes objects. Axes object 1 with title spectrogram contains an object of type surface. Axes object 2 with title stft contains an object of type surface.

Valores predeterminados despectrogram

Repita el cálculo utilizando los valores predeterminados de la funciónspectrogram:

  • Divida la señal en segmentos de longitud M = N x / 4 5 , donde N x es la longitud de la señal. Aplique una ventana de Hamming a cada segmento.

  • Especifique el 50% de solapamiento entre segmentos.

  • Para calcular la FFT, utilice max ( 256 , 2 log 2 M ) puntos. Calcule el espectrograma solo para las frecuencias normalizadas positivas.

M = floor(length(x)/4.5); g = hamming(M); L = floor(M/2); Ndft = max(256,2^nextpow2(M)); [sx,fx,tx] = spectrogram(x); [st,ft,tt] = stft(x,Window=g,OverlapLength=L,FFTLength=Ndft,FrequencyRange="onesided"); dff = max(max(sx-st))
dff = 0

Represente las dos salidas con la funciónwaterplot.Divida el eje de la frecuencia por π en ambos casos. Para la salida destft, divida los números de muestra por la tasa de muestreo efectiva, 2 π

subplot(2,1,1) waterplot(sx,fx/pi,tx) title("spectrogram") subplot(2,1,2) waterplot(st,ft/pi,tt/(2*pi)) title("stft")

Figure contains 2 axes objects. Axes object 1 with title spectrogram contains an object of type patch. Axes object 2 with title stft contains an object of type patch.

functionwaterplot(s,f,t)% Waterfall plot of spectrogramwaterfall(f,t,abs(s)'.^2) set(gca,XDir="reverse",View=[30 50]) xlabel("Frequency/\pi") ylabel("Samples")end

Utilice la funciónspectrogrampara medir y realizar un seguimiento de la frecuencia instantánea de una señal.

Genere un chirp cuadrático muestreado a 1 kHz durante dos segundos. Especifique el chirp de forma que su frecuencia sea inicialmente 100 Hz y aumente a 200 Hz al pasar un segundo.

fs = 1000; t = 0:1/fs:2-1/fs; y = chirp(t,100,1,200,'quadratic');

Calcule el espectro del chirp utilizando la transformada de Fourier de tiempo corto implementada en la funciónspectrogram.Divida la señal en secciones de longitud 100, dispuestas en ventanas con una ventana Hamming. Especifique 80 muestras de solapamiento entre secciones contiguas y evalúe el espectro en frecuencias 1 0 0 / 2 + 1 = 5 1

spectrogram(y,100,80,100,fs,'yaxis')

Figure contains an axes object. The axes object contains an object of type image.

Realice un seguimiento de la frecuencia del chirp buscando la cresta de tiempo-frecuencia con más energía en los puntos de tiempo ( 2 0 0 0 - 8 0 ) / ( 1 0 0 - 8 0 ) = 9 6 .Superponga la frecuencia instantánea en la gráfica del espectrograma.

[~,f,t,p] = spectrogram(y,100,80,100,fs); [fridge,~,lr] = tfridge(p,f); holdonplot3(t,fridge,abs(p(lr)),'LineWidth',4) holdoff

Figure contains an axes object. The axes object contains 2 objects of type image, line.

Genere 512 muestras de un chirp con contenido de frecuencia que varíe sinusoidalmente.

N = 512; n = 0:N-1; x = exp(1j*pi*sin(8*n/N)*32);

Calcule la transformada de Fourier de tiempo corto bilateral centrada del chirp. Divida la señal en segmentos de 32 muestras con un solapamiento de 16 muestras. Especifique 64 puntos DFT. Represente el espectrograma.

[scalar,fs,ts] = spectrogram(x,32,16,64,'centered'); spectrogram(x,32,16,64,'centered','yaxis')

Figure contains an axes object. The axes object contains an object of type image.

Obtenga el mismo resultado calculando el espectrograma en 64 frecuencias equiespaciadas a lo largo del intervalo ( - π , π ] .La opción'centered'no es necesaria.

fintv = -pi+pi/32:pi/32:pi; [vector,fv,tv] = spectrogram(x,32,16,fintv); spectrogram(x,32,16,fintv,'yaxis')

Figure contains an axes object. The axes object contains an object of type image.

Genere una señal que conste de un oscilador controlado por tensión y tres átomos gaussianos. La señal se muestrea a f s = 2 kHz durante 1 segundo.

fs = 2000; tx = (0:1/fs:2); gaussFun = @(A,x,mu,f) exp(-(x-mu).^2/(2*0.03^2)).*sin(2*pi*f.*x)*A'; s = gaussFun([1 1 1],tx',[0.1 0.65 1],[2 6 2]*100)*1.5; x = vco(chirp(tx+.1,0,tx(end),3).*exp(-2*(tx-1).^2),[0.1 0.4]*fs,fs); x = s+x';

Transformadas de Fourier de tiempo corto

Utilice la funciónpspectrumpara calcular la STFT.

  • Divida la señal de N x muestras en segmentos con longitud M = 80 muestras, correspondientes a una resolución temporal de 80 / 2000 = 40 milisegundos.

  • Especifique L = 16 muestras o el 20% de solapamiento entre los segmentos contiguos.

  • Añada una ventana de Kaiser a cada segmento y especifique un manchado de = 0 7

M = 80; L = 16; lk = 0.7; [S,F,T] = pspectrum(x,fs,"spectrogram",...TimeResolution=M/fs,OverlapPercent=L/M*100,...Leakage=lk);

Compárela con el resultado obtenido con la funciónspectrogram

  • Especifique la longitud de la ventana y el solapamiento directamente en las muestras.

  • pspectrumsiempre usa una ventana de Kaiser como g ( n ) .El manchado y el factor de forma β de la ventana están relacionados por β = 40 × ( 1 - )

  • pspectrumsiempre usa N DFT = 1024 puntos cuando calcula la transformada discreta de Fourier. Puede especificar este número si desea calcular la transformada en un rango de frecuencias bilateral o centrado. Sin embargo, en las transformadas unilaterales, que son las predeterminadas para las señales reales,spectrogramutiliza 1024 / 2 + 1 = 513 puntos. Como alternativa, puede especificar el vector de frecuencias en el que desea calcular la transformada, como en este ejemplo.

  • Si una señal no puede dividirse exactamente en k = N x - L M - L segmentos,spectrogramla trunca, mientras quepspectrumla rellena con ceros para crear un segmento extra. Para que las salidas sean equivalentes, elimine el segmento final y el elemento final del vector de tiempo.

  • spectrogramdevuelve la STFT, cuya magnitud elevada al cuadrado es el espectrograma.pspectrumdevuelve el espectro de potencia segmento a segmento, que ya está elevado al cuadrado pero se divide por un factor de n g ( n ) antes de elevarlo al cuadrado.

  • En las transformadas unilaterales,pspectrumañade un factor extra de 2 al espectrograma.

g = kaiser(M,40*(1-lk)); k = (length(x)-L)/(M-L);ifk~=floor(k) S = S(:,1:floor(k)); T = T(1:floor(k));end[s,f,t] = spectrogram(x/sum(g)*sqrt(2),g,L,F,fs);

Para mostrar los espectrogramas calculados por las dos funciones, utilice la funciónwaterplot

subplot(2,1,1) waterplot(sqrt(S),F,T) title("pspectrum") subplot(2,1,2) waterplot(s,f,t) title("spectrogram")

Figure contains 2 axes objects. Axes object 1 with title pspectrum contains an object of type patch. Axes object 2 with title spectrogram contains an object of type patch.

maxd = max(max(abs(abs(s).^2-S)))
maxd = 2.4419e-08

Espectros de potencia y gráficas de conveniencia

La funciónspectrogramtiene un cuarto argumento que se corresponde con el espectro de potencia segmento a segmento o con la densidad espectral de potencia. Al igual que la salida depspectrum, el argumentopsya está elevado al cuadrado e incluye el factor de normalización n g ( n ) .En los espectrogramas unilaterales de señales reales, hay que incluir el factor adicional de 2. Establezca el argumento de escala de la función en"power"

[~,~,~,ps] = spectrogram(x*sqrt(2),g,L,F,fs,"power"); max(abs(S(:)-ps(:)))
ans = 2.4419e-08

Cuando se llaman sin argumentos de salida, tantopspectrumcomospectrogramrepresentan el espectrograma de la señal en decibelios. Incluya el factor de 2 en los espectrogramas unilaterales. Establezca que los mapas de colores sean los mismos en ambas gráficas. Fije los límites del ejexen los mismos valores para hacer visible el segmento extra al final de la gráfica depspectrum.En la gráfica despectrogram, muestre la frecuencia en el ejey

subplot(2,1,1) pspectrum(x,fs,"spectrogram",...TimeResolution=M/fs,OverlapPercent=L/M*100,...Leakage=lk) title("pspectrum") cc = clim; xl = xlim; subplot(2,1,2) spectrogram(x*sqrt(2),g,L,F,fs,"power","yaxis") title("spectrogram") clim(cc) xlim(xl)

Figure contains 2 axes objects. Axes object 1 with title pspectrum contains an object of type image. Axes object 2 with title spectrogram contains an object of type image.

functionwaterplot(s,f,t)% Waterfall plot of spectrogramwaterfall(f,t,abs(s)'.^2) set(gca,XDir="reverse",View=[30 50]) xlabel("Frequency (Hz)") ylabel("Time (s)")end

Genere una señal de chirp muestreada durante 2 segundos a 1 Hz. Especifique el chirp de forma que su frecuencia sea inicialmente 100 Hz y aumente a 200 Hz al pasar 1 segundo.

Fs = 1000; t = 0:1/Fs:2; y = chirp(t,100,1,200,'quadratic');

Calcule el espectrograma reasignado de la señal.

  • Divida la señal en secciones de longitud 128, dispuestas en ventanas con una ventana de Kaiser con el parámetro de forma β = 1 8

  • Especifique 120 muestras de solapamiento entre secciones contiguas.

  • Evalúe el espectro en frecuencias 1 2 8 / 2 = 6 5 y bins de tiempo ( l e n g t h ( x ) - 1 2 0 ) / ( 1 2 8 - 1 2 0 ) = 2 3 5

spectrogram(y,kaiser(128,18),120,128,Fs,'reassigned','yaxis')

Figure contains an axes object. The axes object contains an object of type image.

Genere una señal de chirp muestreada durante 2 segundos a 1 Hz. Especifique el chirp de forma que su frecuencia sea inicialmente 100 Hz y aumente a 200 Hz al pasar 1 segundo.

Fs = 1000; t = 0:1/Fs:2; y = chirp(t,100,1,200,'quadratic');

Calcule la densidad espectral de potencia (PSD) dependiente del tiempo de la señal.

  • Divida la señal en secciones de longitud 128, dispuestas en ventanas con una ventana de Kaiser con el parámetro de forma β = 1 8

  • Especifique 120 muestras de solapamiento entre secciones contiguas.

  • Evalúe el espectro en frecuencias 1 2 8 / 2 = 6 5 y bins de tiempo ( l e n g t h ( x ) - 1 2 0 ) / ( 1 2 8 - 1 2 0 ) = 2 3 5

Obtenga como salida la frecuencia y el tiempo del centro de gravedad de cada estimación de PSD. Establezca en cero los elementos de la PSD inferiores a - 3 0 dB.

[~,~,~,pxx,fc,tc] = spectrogram(y,kaiser(128,18),120,128,Fs,...'MinThreshold',-30);

Represente los elementos distintos de cero como funciones de las frecuencias y tiempos del centro de gravedad.

plot(tc(pxx>0),fc(pxx>0),'.')

Figure contains an axes object. The axes object contains an object of type line.

Genere una señal compuesta por un chirp de valor real muestreado a 2 kHz durante 2 segundos.

fs = 2000; tx = 0:1/fs:2; x = vco(-chirp(tx,0,tx(end),2).*exp(-3*(tx-1).^2),[0.1 0.4]*fs,fs).*hann(length(tx))';

Espectrograma bilateral

Calcule y represente la STFT bilateral de la señal.

  • Divida la señal en segmentos, cada uno de M = 73 muestras.

  • Especifique L = 24 muestras de solapamiento entre segmentos contiguos.

  • Descarte el último segmento, el más corto.

  • Aplique una ventana flat-top a cada segmento.

  • Evalúe la transformada discreta de Fourier de cada segmento en N DFT = 895 puntos, teniendo en cuenta que es un número impar.

M = 73; L = 24; g = flattopwin(M); Ndft = 895; neven = ~mod(Ndft,2); [stwo,f,t] = spectrogram(x,g,L,Ndft,fs,"twosided");

Utilice la funciónspectrogramsin argumentos de salida para representar el espectrograma bilateral.

spectrogram(x,g,L,Ndft,fs,"twosided","power","yaxis");

Figure contains an axes object. The axes object contains an object of type image.

Calcule el espectrograma bilateral con la definición. Divida la señal en segmentos de M muestras con L muestras de solapamiento entre segmentos contiguos. Aplique una ventana a cada segmento y calcule la transformada discreta de Fourier en N DFT puntos.

[segs,~] = buffer(1:length(x),M,L,"nodelay"); Xtwo = fft(x(segs).*g,Ndft);

Calcule los intervalos de tiempo y frecuencia.

  • Para encontrar los valores de tiempo, divida el vector tiempo en segmentos superpuestos. Los valores de tiempo son los puntos medios de los segmentos, y cada segmento se trata como un intervalo abierto en el extremo inferior.

  • Para encontrar los valores de frecuencia, especifique un intervalo de Nyquist cerrado en la frecuencia cero y abierto en el extremo superior.

tbuf = tx(segs); ttwo = mean(tbuf(2:end,:)); ftwo = 0:fs/Ndft:fs*(1-1/Ndft);

Compare las salidas delspectrogramcon las definiciones. Visualice los espectrogramas con la funciónwaterplot

diffs = [max(max(abs(stwo-Xtwo))) max(abs(f-ftwo')) max(abs(t-ttwo))]
diffs =1×310-12× 0 0.2274 0.0002
subplot(2,1,1) waterplot(Xtwo,ftwo,ttwo) title("Two-Sided, Definition") subplot(2,1,2) waterplot(stwo,f,t) title("Two-Sided, spectrogram Function")

Figure contains 2 axes objects. Axes object 1 with title Two-Sided, Definition contains an object of type patch. Axes object 2 with title Two-Sided, spectrogram Function contains an object of type patch.

Espectrograma centrado

Calcule el espectrograma centrado de la señal.

  • Utilice los mismos valores de tiempo que utilizó en la STFT bilateral.

  • Desplace el componente de frecuencia cero de la STFT hacia el centro del espectro con la funciónfftshift

  • En los valores impares de N DFT , el intervalo de frecuencia está abierto en ambos extremos. En los valores pares de N DFT , el intervalo de frecuencia está abierto en el extremo inferior y cerrado en el extremo superior.

Compare las salidas y muestre los espectrogramas.

tcen = ttwo;if~neven Xcen = fftshift(Xtwo,1); fcen = -fs/2*(1-1/Ndft):fs/Ndft:fs/2;elseXcen = fftshift (circshift (Xtwo, 1), 1);fcen = (fs/2*(1-1/Ndft):fs/Ndft:fs/2)+fs/Ndft/2;end[scen,f,t] = spectrogram(x,g,L,Ndft,fs,"centered"); diffs = [max(max(abs(scen-Xcen))) max(abs(f-fcen')) max(abs(t-tcen))]
diffs =1×310-12× 0 0.2274 0.0002
clf subplot(2,1,1) waterplot(Xcen,fcen,tcen) title("Centered, Definition") subplot(2,1,2) waterplot(scen,f,t) title("Centered, spectrogram Function")

Figure contains 2 axes objects. Axes object 1 with title Centered, Definition contains an object of type patch. Axes object 2 with title Centered, spectrogram Function contains an object of type patch.

Espectrograma unilateral

Calcule el espectrograma unilateral de la señal.

  • Utilice los mismos valores de tiempo que utilizó en la STFT bilateral.

  • En los valores impares de N DFT , la STFT unilateral consiste en las primeras ( N DFT + 1 ) / 2 filas de la STFT bilateral. En los valores pares de N DFT , la STFT unilateral consiste en las primeras N DFT / 2 + 1 filas de la STFT bilateral.

  • En los valores impares de N DFT , el intervalo de frecuencia se cierra en la frecuencia cero y se abre en la frecuencia de Nyquist. En los valores pares de N DFT , el intervalo de frecuencia se cierra en ambos extremos.

Compare las salidas y muestre los espectrogramas. En señales de valor real, el argumento"onesided"es opcional.

tone = ttwo;if~neven Xone = Xtwo(1:(Ndft+1)/2,:);elseXone = Xtwo(1:Ndft/2+1,:);endfone = 0:fs/Ndft:fs/2; [sone,f,t] = spectrogram(x,g,L,Ndft,fs); diffs = [max(max(abs(sone-Xone))) max(abs(f-fone')) max(abs(t-tone))]
diffs =1×310-12× 0 0.1137 0.0002
clf subplot(2,1,1) waterplot(Xone,fone,tone) title("One-Sided, Definition") subplot(2,1,2) waterplot(sone,f,t) title("One-Sided, spectrogram Function")

Figure contains 2 axes objects. Axes object 1 with title One-Sided, Definition contains an object of type patch. Axes object 2 with title One-Sided, spectrogram Function contains an object of type patch.

functionwaterplot(s,f,t)% Waterfall plot of spectrogramwaterfall(f,t,abs(s)'.^2) set(gca,XDir="reverse",View=[30 50]) xlabel("Frequency (Hz)") ylabel("Time (s)")end

La funciónspectrogramtiene como cuarto argumento de salida una matriz que contiene la densidad espectral de potencia (PSD) o el espectro de potencia de cada segmento. El espectro de potencia es igual a la PSD multiplicada por el ancho de banda de ruido equivalente (ENBW) de la ventana.

Genere una señal compuesta por un chirp logarítmico muestreado a 1 kHz durante 1 segundo. El chirp tiene una frecuencia inicial de 400 Hz que disminuye a 10 Hz al final de la medición.

fs = 1000; tt = 0:1/fs:1-1/fs; y = chirp(tt,400,tt(end),10,"logarithmic");

PSD de segmentos y espectros de potencia con tasa de muestreo

Divida la señal en segmentos de 102 muestras y aplique una ventana de Hann a cada uno. Especifique 12 muestras de solapamiento entre segmentos contiguos y 1024 puntos de la DFT.

M = 102; g = hann(M); L = 12; Ndft = 1024;

Calcule el espectrograma de la señal con el tipo de espectro de la PSD predeterminado. Genere la STFT y el arreglo de densidades espectrales de potencia de los segmentos.

[s,f,t,p] = spectrogram(y,g,L,Ndft,fs);

Repita el cálculo con el tipo de espectro especificado como"power".Obtenga como salida la STFT y el arreglo de espectros de potencia de los segmentos.

[r,~,~,q] = spectrogram(y,g,L,Ndft,fs,"power");

Compruebe que el espectrograma es el mismo en ambos casos. Represente el espectrograma con una escala logarítmica para la frecuencia.

max(max(abs(s).^2-abs(r).^2))
ans = 0
waterfall(f,t,abs(s)'.^2) set(gca,XScale="log",...XDir="reverse",View=[30 50])

Figure contains an axes object. The axes object contains an object of type patch.

Compruebe que los espectros de potencia son iguales a las densidades espectrales de potencia multiplicadas por el ENBW de la ventana.

max(max(abs(q-p*enbw(g,fs))))
ans = 1.1102e-16

Compruebe que la matriz de espectros de potencia del segmento es proporcional al espectrograma. El factor de proporcionalidad es el cuadrado de la suma de los elementos de la ventana.

max(max(abs(s).^2-q*sum(g)^2))
ans = 3.4694e-18

PSD de segmentos y espectros de potencia con frecuencias normalizadas

Repita el cálculo, pero ahora trabaje en frecuencias normalizadas. Los resultados son los mismos cuando se especifica la tasa de muestreo como 2 π

[~,~,~,pn] = spectrogram(y,g,L,Ndft); [~,~,~,qn] = spectrogram(y,g,L,Ndft,"power"); max(max(abs(qn-pn*enbw(g,2*pi))))
ans = 1.1102e-16

Cargue una señal de audio que contenga dos chirps decrecientes y un sonido de salpicadura de banda ancha. Calcule la transformada de Fourier de tiempo corto. Divida la forma de onda en segmentos de 400 muestras con 300 muestras de solapamiento. Represente el espectrograma.

loadsplat% To hear, type soundsc(y,Fs)sg = 400; ov = 300; spectrogram(y,sg,ov,[],Fs,"yaxis") colormapbone

Figure contains an axes object. The axes object contains an object of type image.

Utilice la funciónspectrogrampara emitir la densidad espectral de potencia (PSD) de la señal.

[s,f,t,p] = spectrogram(y,sg,ov,[],Fs);

Realice un seguimiento de los dos chirps utilizando la funciónmedfreq.Para encontrar el chirp de baja frecuencia más potente, restrinja la búsqueda a las frecuencias por encima de 100 Hz y a los tiempos anteriores al inicio del sonido de banda ancha.

f1 = f > 100; t1 = t < 0.75; m1 = medfreq(p(f1,t1),f(f1));

Para encontrar el chirp de baja frecuencia más débil, restrinja la búsqueda a las frecuencias por encima de 2500 Hz y a tiempos entre 0,3 segundos y 0,65 segundos.

f2 = f > 2500; t2 = t > 0.3 & t < 0.65; m2 = medfreq(p(f2,t2),f(f2));

Superponga el resultado en el espectrograma. Divida los valores de frecuencia entre 1000 para expresarlos en kHz.

holdonplot(t(t1),m1/1000,LineWidth=4) plot(t(t2),m2/1000,LineWidth=4) holdoff

Figure contains an axes object. The axes object contains 3 objects of type image, line.

Genere dos segundos de una señal muestreada a 10 kHz. Especifique la frecuencia instantánea de la señal como una función triangular de tiempo.

fs = 10 e3;t = 0:1 / fs: 2;x1 = vco(锯齿(2 *π* t,0.5),[0.1 0.4]*fs,fs);

Calcule y represente el espectrograma de la señal. Utilice una ventana de Kaiser de longitud 256 y parámetro de forma β = 5 .Especifique 220 muestras de solapamiento sección a sección y 512 puntos DFT. Represente la frecuencia en el ejey.Utilice el mapa de colores y la vista predeterminados.

spectrogram(x1,kaiser(256,5),220,512,fs,'yaxis')

Figure contains an axes object. The axes object contains an object of type image.

Cambie la vista para mostrar el espectrograma como gráfica de cascada. Establezca el mapa de colores enbone

view(-45,65) colormapbone

Figure contains an axes object. The axes object contains an object of type surface.

Argumentos de entrada

contraer todo

Señal de entrada, especificada como un vector fila o vector columna.

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. Utilicewindowpara dividir la señal en segmentos:

  • Siwindowes un entero,spectrogramdividexen segmentos de longitudwindowy dispone en ventanas cada segmento con una ventana Hamming de esa longitud.

  • Siwindowes un vector,spectrogramdividexen segmentos de la misma longitud que el vector y dispone en ventanas cada segmento utilizandowindow

Si la longitud dexno puede dividirse exactamente en un número entero de segmentos con muestras solapadasnoverlap,xse trunca en consecuencia.

Si especificawindowcomo vacío,spectrogramutiliza una ventana Hamming de forma quexse divide en ocho segmentos con muestras solapadasnoverlap

Para obtener una lista de las ventanas disponibles, consulteVentanas

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

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

  • Siwindowes escalar,noverlapdebe ser menor quewindow

  • Siwindowes un vector,noverlapdebe ser menos que la longitud dewindow

Si especificanoverlapcomo vacío,spectrogramutiliza un número que genera un 50% de solapamiento entre segmentos. Si no se especifica la longitud del segmento, la función establecenoverlapenNx/4.5⌋, dondeNxes la longitud de la señal de entrada y los símbolos⌊⌋determinan la función de suelo.

Número de puntos DFT, especificado como escalar entero positivo. Si especificanfftcomo vacío,spectrogramestablece el parámetro enmax(256,2p), dondep= ⌈log2Nw, los símbolos⌈⌉determinan la función de techo, y

  • Nw=windowsiwindowes un escalar.

  • Nw=length(window)siwindowes un vector.

Frecuencias normalizadas, especificadas como vector.wdebe tener al menos dos elementos porque, de lo contrario, la función lo interpreta comonfft.Las frecuencias normalizadas están en rad/muestra.

Ejemplo:pi./[2 4]

Frecuencias cíclicas, especificadas como vector.fdebe tener al menos dos elementos porque, de lo contrario, la función lo interpreta comonfft.Las unidades defvienen especificadas por la tasa de muestreo,fs

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

Rango de frecuencia para la estimación de la PSD, especificado como"onesided","twosided"o"centered".En señales de valor real, el valor predeterminado es"onesided".En señales de valor complejo, el valor predeterminado es"twosided", y especificar"onesided"da como resultado un error.

  • "onesided"devuelve el espectrograma unilateral de una señal de entrada real. Sinfftes par,pstienenfft/2 + 1 filas y se calcula en el intervalo[0,π]rad/muestra. Sinfftes impar,pstiene (nfft+ 1)/2 filas y el intervalo es[0,π)rad/muestra. Si especificafs, los intervalos son respectivamente [0,fs/2] ciclos/unidad de tiempo y [0,fs/2) ciclos/unidad de tiempo.

  • "twosided"devuelve el espectrograma bilateral de una señal de valor real o complejo.pstienenfftfilas y se calcula en el intervalo[0, 2π)rad/muestra. Si especificafs, el intervalo es [0,fs] ciclos/unidad de tiempo.

  • "centered"devuelve el espectrograma bilateral centrado de una señal de valor real o complejo.pstienenfftfilas. Sinfftes par,psse calcula en el intervalo(–π,π]rad/muestra. Sinfftes impar,psse calcula en(–π,π)rad/muestra. Si especificafs, los intervalos son respectivamente (–fs/2,fs/2] ciclos/unidad de tiempo y (–fs/2,fs/2) ciclos/unidad de tiempo.

Escalado del espectro de potencia, especificado como"psd"o"power"

  • Omitirspectrumtypeo especificar"psd"devuelve la densidad espectral de potencia.

  • Especificando"power", se escala cada estimación de PSD por el ancho de banda de ruido equivalente de la ventana. El resultado es una estimación de la potencia en cada frecuencia. Si la opción"reassigned"está activada, la función integra la PSD en la anchura de cada bin de frecuencia antes de reasignar.

Eje de visualización de la frecuencia, especificado como"xaxis"o"yaxis"

  • "xaxis"muestra la frecuencia en el ejexy el tiempo en el ejey

  • "yaxis"muestra la frecuencia en el ejeyy el tiempo en el ejex

Este argumento se ignora si se llama aspectrogramcon argumentos de salida.

Argumentos de par nombre-valor

Especifique pares de argumentos opcionales comoName1=Value1,...,NameN=ValueN, dondeNamees el nombre del argumento yValuees el valor correspondiente. Los argumentos de nombre-valor deben aparecer después de otros argumentos. Sin embargo, el orden de los pares no importa.

Ejemplo:spectrogram(x,100,OutputTimeDimension="downrows")dividexen segmentos de longitud 100 y dispone en ventanas cada segmento con una ventana Hamming de esa longitud. La salida del espectrograma tiene una dimensión de tiempo en las filas.

En las versiones anteriores a la R2021a, utilice comas para separar cada nombre y valor, y encierreNameentre comillas.

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

Umbral, especificado como un escalar real expresado en decibelios.spectrogramestablece en cero esos elementos desde forma que 10 log10(s) ≤thresh

Dimensión de tiempo de salida, especificada como"acrosscolumns"o"downrows".Establezca este valor en"downrows"si desea la dimensión de tiempo des,ps,fcytcen las filas y la dimensión de frecuencia en las columnas. Establezca este valor en"acrosscolumns"si desea la dimensión de tiempo des,ps,fcytcen las columnas y la dimensión de frecuencia en las filas. Esta entrada se ignora si se llama a la función sin argumentos de salida.

Argumentos de salida

contraer todo

Transformada de Fourier de tiempo corto, devuelta como matriz. El tiempo aumenta en las columnas desy la frecuencia se reduce en las filas, empezando desde cero.

  • Sixes una señal de longitudNx,stiene columnask, donde

    • k= ⌊(Nxnoverlap)/(windownoverlap)⌋ siwindowes un escalar.

    • k= ⌊(Nxnoverlap)/(length(window)noverlap)⌋ siwindowes un vector.

  • Sixes real ynfftes par,stiene (nfft/2 + 1) filas.

  • Sixes real ynfftes impar,stiene (nfft+ 1)/2 filas.

  • Sixes de valor complejo,stienenfftfilas.

Nota

Cuandofreqrangese establece en"onesided",spectrogramemite los valoressen el rango positivo de Nyquist y no conserva la potencia total.

sno se ve afectada por la opción"reassigned"

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

Instantes de tiempo, devueltos como vector. Los valores de tiempo entcorresponden al punto de en medio de cada segmento.

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

Densidad espectral de potencia (PSD) o espectro de potencia, devueltos como matriz.

  • Sixes real yfreqrangese deja sin especificar o se establece en"onesided",ps" la estimacion del periodograma单方面modificada de la PSD o del espectro de potencia de cada segmento. La función multiplica la potencia por 2 en todas las frecuencias excepto 0 y la frecuencia de Nyquist para conservar la potencia total.

  • Sixes de valor complejo o sifreqrangese establece en"twosided"o"centered",pscontiene la estimación del periodograma bilateral modificada de la PSD o del espectro de potencia de cada segmento.

  • Si se especifica un vector de frecuencias normalizadas enwo un vector de frecuencias cíclicas enf,pscontiene la estimación del periodograma modificada de la PSD o espectro de potencia de cada segmento evaluado en las frecuencias de entrada.

Frecuencias y tiempos del centro de energía, devueltos como matrices del mismo tamaño que la transformada de Fourier de tiempo corto. Si no especifica una tasa de muestreo, los elementos defcse devuelven como frecuencias normalizadas.

Más acerca de

contraer todo

Transformada de Fourier de tiempo corto

傅里叶de La transformada de tiempo corto (STFT)se utiliza para analizar cómo cambia el contenido de frecuencia de una señal no estacionaria a lo largo del tiempo. La magnitud al cuadrado de la STFT se conoce como la representación de tiempo-frecuencia delespectrogramade la senal。帕拉obtener mas给尤其elespectrograma y cómo calcularlo mediante las funciones de Signal Processing Toolbox™, consulteSpectrogram Computation with Signal Processing Toolbox

La STFT de una señal se calcula deslizando unaventana de análisisg(n)de longitudMsobre la señal y calculando la transformada discreta de Fourier (DFT) de cada segmento de los datos con ventana. La ventana salta sobre la señal original en intervalos deRmuestras, lo que equivale aL=MRmuestras de solapamiento entre segmentos contiguos. La mayoría de las funciones de ventana se estrechan en los bordes para evitar el anillamiento espectral. La DFT de cada segmento con ventana se añade a una matriz de valor complejo que contiene la magnitud y la fase de cada punto en tiempo y frecuencia. La matriz STFT tiene

k = N x L M L

columnas, dondeNxes la longitud de la señalx(n)y los símbolos⌊⌋denotan la función de suelo. En las transformadas centradas y bilaterales, el número de filas de la matriz es igual aNDFT, el número de puntos de la DFT, y en las transformadas unilaterales de señales de valor real es un número impar cercano aNDFT/2

La columnamde la matriz de la STFT X ( f ) = [ X 1 ( f ) X 2 ( f ) X 3 ( f ) X k ( f ) ] contiene la DFT de los datos con ventana centrados en el tiempomR:

X m ( f ) = n = x ( n ) g ( n m R ) e j 2 π f n

  • La transformada de Fourier de tiempo corto es invertible. El proceso de inversión solapa y suma los segmentos con ventana para compensar la atenuación de la señal en los bordes de la ventana. Para obtener más información, consulteInverse Short-Time Fourier Transform

  • La funciónistftinvierte la STFT de una señal.

  • En una serie de circunstancias concretas es posible lograr la "reconstrucción perfecta" de una señal. Para obtener más información, consultePerfect Reconstruction

  • La funciónstftmag2sigdevuelve una estimación de una señal reconstruida a partir de la magnitud de su STFT.

Sugerencias

Si una transformada de Fourier de tiempo corto tiene ceros, su conversión a decibelios da como resultado infinitos negativos que no pueden representarse. Para evitar esta posible dificultad,spectrogramañadeepsa la transformada de Fourier de tiempo corto cuando la llama sin argumentos de salida.

Referencias

[1] Boashash, Boualem, ed.Time Frequency Signal Analysis and Processing: A Comprehensive Reference.Second edition. EURASIP and Academic Press Series in Signal and Image Processing. Amsterdam and Boston: Academic Press, 2016.

[2] Chassande-Motin, Éric, François Auger, and Patrick Flandrin. "Reassignment." InTime-Frequency Analysis: Concepts and Methods.Edited by Franz Hlawatsch and François Auger. London: ISTE/John Wiley and Sons, 2008.

[3] Fulop, Sean A., and Kelly Fitz. "Algorithms for computing the time-corrected instantaneous frequency (reassigned) spectrogram, with applications."Journal of the Acoustical Society of America.Vol. 119, January 2006, pp. 360–371.

[4] Oppenheim, Alan V., and Ronald W. Schafer, with John R. Buck.Discrete-Time Signal Processing.Second edition. Upper Saddle River, NJ: Prentice Hall, 1999.

[5] Rabiner, Lawrence R., and Ronald W. Schafer.Digital Processing of Speech Signals.Englewood Cliffs, NJ: Prentice-Hall, 1978.

Capacidades ampliadas

Historial de versiones

Introducido antes de R2006a