Main Content

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.

stft

Transformación de Fourier a corto tiempo

Descripción

s = stft(x) devuelve la transformación de Fourier (STFT) de poco tiempo de .x

ejemplo

s = stft(x,fs) devuelve el STFT de utilizar la frecuencia de muestreo.xfs

s = stft(x,ts) devuelve el STFT del uso del tiempo de muestra.xts

ejemplo

s = stft(___,Name,Value) especifica opciones adicionales mediante argumentos de par nombre-valor. Las opciones incluyen la ventana y la longitud de FFT. Estos argumentos se pueden agregar a cualquiera de las sintaxis de entrada anteriores.

[s,f] = stft(___) devuelve las frecuencias en las que se evalúa el STFT.f

ejemplo

[s,f,t] = stft(___) devuelve los tiempos en los que se evalúa el STFT.

stft(___) sin argumentos de salida traza la magnitud del STFT en la ventana de figura actual. El STFT se traza como de dos lados y centrado.

Ejemplos

contraer todo

Generar dos segundos de una salida de oscilador controlada por voltaje, controlada por un sinusoides muestreado a 10 kHz.

fs = 10e3; t = 0:1/fs:2; x = vco(sin(2*pi*t),[0.1 0.4]*fs,fs);

Calcular y trazar el STFT de la señal. Utilice una ventana Kaiser de longitud 256 y un parámetro de forma

<math display="inline">
<mrow>
<mi>β</mi>
<mo>=</mo>
<mn>5</mn>
</mrow>
</math>
. Especifique la longitud de superposición como 220 muestras y la longitud DFT como 512 puntos. Trazar el STFT con el mapa de colores y la vista predeterminados.

stft(x,fs,'Window',kaiser(256,5),'OverlapLength',220,'FFTLength',512);

Cambie la vista para mostrar el STFT como un trazado de cascada. Establezca el mapa de colores en .jet

view(-45,65) colormap jet

Genere un chirrido cuadrático muestreado a 1 kHz durante 2 segundos. La frecuencia instantánea es de 100 Hz a

<math display="inline">
<mrow>
<mi mathvariant="italic">t</mi>
<mo>=</mo>
<mn>0</mn>
</mrow>
</math>
y cruza 200 Hz a
<math display="inline">
<mrow>
<mi mathvariant="italic">t</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
</math>
Segundo.

ts = 0:1/1e3:2;  f0 = 100; f1 = 200;  x = chirp(ts,f0,1,f1,'quadratic',[],'concave');

Calcular y mostrar el STFT de la chirritura cuadrática con una duración de 1 ms.

d = seconds(1e-3); win = hamming(100,'periodic');  stft(x,d,'Window',win,'OverlapLength',98,'FFTLength',128);

Genere una señal de tres canales que consta de tres chirridos diferentes muestreados a 1 kHz durante un segundo.

  1. El primer canal consiste en un chirp cuadrático cóncavo con frecuencia instantánea 100 Hz a 0 y cruza 300 Hz a 1 segundo.t = t = Tiene una fase inicial igual a 45 grados.

  2. El segundo canal consiste en un chirrido cuadrático convexo con frecuencia instantánea 200 Hz a 0 y cruza 600 Hz a 1 segundo.t = t =

  3. El tercer canal consiste en un chirrido logarítmico con frecuencia instantánea 300 Hz a 0 y cruza 500 Hz a 1 segundo.t = t =

Calcular el STFT de la señal multicanal utilizando una ventana hamming periódica de longitud 128 y una longitud de superposición de 50 muestras.

fs = 1e3; t = 0:1/fs:1-1/fs;  x = [chirp(t,100,1,300,'quadratic',45,'concave');       chirp(t,200,1,600,'quadratic',[],'convex');       chirp(t,300,1,500,'logarithmic')]';      [S,F,T] = stft(x,fs,'Window',hamming(128,'periodic'),'OverlapLength',50);

Visualice el STFT de cada canal como una gráfica de cascada. Controle el comportamiento de los ejes mediante la función auxiliar .helperGraphicsOpt

waterfall(F,T,abs(S(:,:,1))') helperGraphicsOpt(1)

waterfall(F,T,abs(S(:,:,2))') helperGraphicsOpt(2)

waterfall(F,T,abs(S(:,:,3))') helperGraphicsOpt(3)

Esta función auxiliar establece la apariencia y el comportamiento de los ejes actuales.

function helperGraphicsOpt(ChannelId) ax = gca; ax.XDir = 'reverse'; str = ['Input Channel: ',num2str(ChannelId)]; ax.Title.String = str; ax.YLabel.String = 'Frequency (Hz)'; ax.XLabel.String = 'Time (S)'; ax.View = [30 45]; end

Argumentos de entrada

contraer todo

Señal de entrada, especificada como vector, matriz o archivo .MATLAB®timetable

Nota

Si invierte utilizando y desea que el resultado tenga la misma longitud que , el valor de debe ser un entero.sistftx(length(x)-noverlap)/(length(window)-noverlap)

  • Si la entrada tiene varios canales, especifique como una matriz donde cada columna corresponde a un canal.x

  • Para la entrada de horario, debe contener tiempos de fila finitos uniformemente crecientes.x Si falta un horario o se duplican los puntos de tiempo, puede corregirlo con las sugerencias de .Clean Timetable with Missing, Duplicate, or Nonuniform Times

  • Para la entrada de horario multicanal, especifique como un calendario con una sola variable que contenga una matriz o un calendario con varias variables cada una que contenga un vector de columna.x Todas las variables deben tener la misma precisión.

Cada canal de debe tener una longitud mayor que la longitud de la ventana.x

Ejemplo: especifica un chirrido de un solo canal.chirp(0:1/4e3:2,250,1,500,'quadratic')

Ejemplo: especifica una variable aleatoria de dos canales muestreada a 1 Hz durante 4 segundos.timetable(rand(5,2),'SampleRate',1)

Ejemplo: especifica una variable aleatoria de dos canales muestreada a 1 Hz durante 4 segundos.timetable(rand(5,1),rand(5,1),'SampleRate',1)

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

Frecuencia de muestreo, especificada como escalar positiva. Este argumento solo se aplica cuando es un vector o una matriz.x

Tipos de datos: double | single

Tiempo de muestra, especificado como escalar.duration Este argumento sólo se aplica cuando es un vector o una matrizx

Ejemplo: es unseconds(1) duration escalar que representa una diferencia de tiempo de 1 segundo entre muestras de señal consecutivas.

Tipos de datos: duration

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: ventanas de los datos utilizando la ventana , con 50 muestras se superponen entre segmentos adyacentes y 128 puntos FFT.stft('Window',win,'OverlapLength',50,'FFTLength',128)win

Ventana espectral, especificada como el par separado por comas que consta de un vector y un vector.'Window' Si no especifica la ventana o la especifica como vacía, la función utiliza una ventana Hann de longitud 128. La longitud de debe ser mayor o igual que 2.Window

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: double | single

Número de muestras superpuestas, especificada como el par separado por comas que consta de un entero positivo menor que la longitud de .OverlapLengthwindow Si lo omite o especifica como vacío, se establece en el entero más grande inferior al 75% de la longitud de la ventana, que resulta ser 96 muestras para la ventana Den predeterminada.'OverlapLength'

Tipos de datos: double | single

Número de puntos DFT, especificado como el par separado por comas que consta de y un entero positivo.FFTLength El valor debe ser mayor o igual que la longitud de la ventana. Si la longitud de la señal de entrada es menor que la longitud DFT, los datos se rellenan con ceros.

Tipos de datos: double | single

Rango de frecuencia, especificado como el par separado por comas que consta de y o .Centeredtruefalse Si esta opción se establece en , el espectro se centra y se calcula a lo largo del intervalotrue π Para.π De lo contrario, el espectro se calcula en el intervalo 0 a 2.π

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 que la dimensión de tiempo de las filas y la dimensión de frecuencia a lo largo de las columnas.downrowss Establezca este valor en , si desea que la dimensión de tiempo se encuentre en las columnas y la dimensión de frecuencia a lo largo de las filas.acrosscolumnss Esta entrada se omite si se llama a la función sin argumentos de salida.

Argumentos de salida

contraer todo

Transformación de Fourier de corta distancia, devuelta como una matriz o una matriz 3D. El tiempo aumenta en las columnas y la frecuencia aumenta las filas.s La tercera dimensión, si está presente, corresponde a los canales de entrada.

  • Si la señal tienex Nx muestras de tiempo, luego tiene columnas, dondesk k = ⌊(NxL)/(ML)⌋, es la longitud de , es el , y los símbolos de la función de suelo denotan la función de suelo.M'Window'L'OverlapLength'

  • El número de filas en es igual al valor especificado en .s'FFTLength'

Tipos de datos: double | single

Frecuencias en las que se evalúa el STFT, devueltos como vector.

Tipos de datos: double | single

Instantáneas de tiempo, devueltas como vector. contiene los valores de tiempo correspondientes a los centros de los segmentos de datos utilizados para calcular estimaciones de espectro de potencia de corto plazo.t

  • Si se proporciona una frecuencia de muestreo, el vector contiene valores de tiempo en segundos.fs

  • Si se proporciona un tiempo de muestra, el vector es una matriz de duración con el mismo formato de tiempo que la entrada.ts

  • Si no se proporciona información de tiempo, el vector contiene números de muestra.

Tipos de datos: double | single

Más acerca de

contraer todo

Transformación de Fourier de corta distancia

La transformación de Fourier (STFT) de corta distancia se utiliza para analizar cómo cambia el contenido de frecuencia de una señal no estacionaria con el tiempo.

El STFT de una señal se calcula deslizando una longitudventana de análisis M sobre la señal y el cálculo de la transformación discreta de Fourier de los datos en ventana. La ventana salta sobre la señal original a intervalos de R Muestras. La mayoría de las funciones de la ventana se estrechan en los bordes para evitar el timbre espectral. Si una longitud de superposición distinta de cero L se especifica, la adición de superposición de los segmentos con ventanas compensa la atenuación de la señal en los bordes de la ventana. El DFT de cada segmento con ventanas se agrega a una matriz que contiene la magnitud y la fase para cada punto en el tiempo y la frecuencia. El número de filas de la matriz STFT es igual al número de puntos DFT, y el número de columnas

k=NxLML,

Dónde Nx es la longitud de la señal original x(n) y el ⌊⌋ símbolos denotan la función de suelo.

La matriz STFT es dada por X(f)=[X1(f)X2(f)X3(f)Xk(f)] de tal forma que el mth elemento de esta matriz es

Xm(f)=n=x(n)g(nmR)ej2πfn,

Dónde

  • g(n) — Función de longitud de la ventana M.

  • Xm(f) — DFT de datos con ventanas centradas en el tiempo mR.

  • R — Tamaño de salto entre los DDF sucesivos. El tamaño del salto es la diferencia entre la longitud de la ventana My la longitud de solapamiento L.

La magnitud cuadrada del STFT produce la representación de la densidad espectral de potencia de la función.Espectrograma

Reconstrucción perfecta

En general, calcular el STFT de una señal de entrada e invertirlo no da lugar a una reconstrucción perfecta. Si desea que la salida de ISTFT coincida lo más estrechamente posible con la señal de entrada original, la señal y la ventana deben cumplir las siguientes condiciones:

  • Tamaño de entrada — Si invierte la salida de using y desea que el resultado tenga la misma longitud que la señal de entrada, el valor destftistftx k = (length(x)-noverlap)(length(window)-noverlap) debe ser un entero.

  • Cumplimiento de COLA: utilice las ventanas compatibles con COLA, suponiendo que no ha modificado la transformación de Fourier de la señal de corta distancia.

  • Relleno — Si la longitud de la señal de entrada es tal que el valor de no es un entero, cero-pad la señal antes de calcular la transformación de Fourier de corto tiempo.k Retire los ceros adicionales después de invertir la señal.

Referencias

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

[2] Smith, J. O. Spectral Audio Signal Processing. https://ccrma.stanford.edu/~jos/sasp/, online book, 2011 edition, accessed Nov 2018.

[3] Sharpe, Bruce. Invertibility of Overlap-Add Processing. https://gauss256.github.io/blog/cola.html, accessed July 2019.

Capacidades ampliadas

Consulte también

Funciones

Introducido en R2019a