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.

tfridge

Crestas de frecuencia de tiempo

Descripción

fridge = tfridge(tfm,f) extrae la cresta de frecuencia de tiempo de máxima energía de la matriz de frecuencia de tiempo, y el vector de frecuencia, y genera la frecuencia dependiente del tiempo, .tfmffridge

[fridge,iridge] = tfridge(tfm,f) también devuelve el vector de índice de fila correspondiente a la cresta de máxima energía.

ejemplo

[fridge,iridge,lridge] = tfridge(tfm,f) también devuelve los índices lineales, tales que son los valores de a lo largo de la cresta de máxima energía.lridgetfm(lridge)tfm

ejemplo

[___] = tfridge(tfm,f,penalty) penaliza los cambios de frecuencia escalando la distancia cuadrada entre los contenedores de frecuencia por .penalty

[___] = tfridge(___,'NumRidges',nr) extrae las crestas de frecuencia de tiempo con la energía más alta.nr Esta sintaxis acepta cualquier combinación de argumentos de entrada de sintaxis anteriores.

ejemplo

[___] = tfridge(___,'NumRidges',nr,'NumFrequencyBins',nbins) especifica el número de contenedores de frecuencia alrededor de una cresta que se eliminan al extraer varias crestas.tfm

Ejemplos

contraer todo

Cree una matriz que se asemeje a una matriz de frecuencia de tiempo con una cresta afilada. Visualice la matriz en tres dimensiones.

t = 0:0.05:10; f = 0:0.2:8; rv = 1;  [F,T] = ndgrid(f,t);  S = zeros(size(T)); S(abs((F-4)-cos((T-6).^2))<0.1) = rv;  mesh(T,F,S) view(-30,60)

Añada ruido a la matriz y vuelva a mostrar el trazado.

S = S+rand(size(S))/10;  mesh(T,F,S) view(-30,60) xlabel('Time') ylabel('Frequency')

Extraiga la cresta y trace el resultado.

[fridge,~,lridge] = tfridge(S,f);  rvals = S(lridge);  hold on plot3(t,fridge,rvals,'k','linewidth',4) hold off

Genere una señal que se muestree a 3 kHz durante un segundo. La señal consta de dos tonos y un chirrido cuadrático.

  • El primer tono tiene una frecuencia de 1000 Hz y amplitud de unidad.

  • El segundo tono tiene una frecuencia de 1200 Hz y amplitud de unidad.

  • El chirrido tiene una frecuencia inicial de 500 Hz y alcanza los 750 Hz al final del muestreo. Tiene una amplitud de seis.

fs = 3000; t = 0:1/fs:1-1/fs;  x1 = 6*chirp(t,fs/6,t(end),fs/4,'quadratic'); x2 = sin(2*pi*fs/3*t); x3 = sin(2*pi*fs/2.5*t);  x = x1+x2+x3;

Calcular y mostrar la transformación sincronaexprimida de Fourier de la señal.

[sst,f] = fsst(x,fs); mx = max(abs(sst(:)))*ones(size(t));  mesh(t,f,abs(sst)) view(2)

Extraiga y trace los dos componentes de señal de mayor energía. No establezca ninguna penalización por cambiar la frecuencia.

penval = 0;  fridge = tfridge(sst,f,penval,'NumRidges',2);  hold on plot3(t,fridge,mx,'w','linewidth',5) hold off

Los dos tonos tienen la misma amplitud, y el algoritmo salta entre ellos. Establezca la penalización para cambiar la frecuencia en 1.

penval = 1;  fridge = tfridge(sst,f,penval,'NumRidges',2);  mesh(t,f,abs(sst)) view(2) xlabel('Time (s)') ylabel('Frequency (Hz)')  hold on plot3(t,fridge,mx,'w','linewidth',5) hold off

Establezca la penalización en un valor alto para la comparación. El chirrido es penalizado porque su frecuencia no es constante.

penval = 1000;  fridge = tfridge(sst,f,penval,'NumRidges',2);  mesh(t,f,abs(sst)) view(2) xlabel('Time (s)') ylabel('Frequency (Hz)')  hold on plot3(t,fridge,mx,'w','linewidth',5) hold off

Generar una señal compuesta de dos chirridos cuadráticos. La señal se muestrea a 1 kHz durante 3 segundos. Los chirridos son tales que la frecuencia instantánea es simétrica sobre el punto medio del intervalo de muestreo. Un chirrido es cóncavo y el otro chirrido es convexo. El chirp cóncavo tiene el doble de amplitud del chirrido convexo.

fs = 1e3; t = 0:1/fs:3;  x =   chirp(t-1.5,100,1.1,200,'quadratic',[],'convex'); y = 2*chirp(t-1.5,300,1.1,400,'quadratic',[],'concave');  % To hear, type soundsc(x+y,fs)

Calcular y mostrar la transformación sincronaexprimida de Fourier de la señal.

sig = x+y;  [sst,f,t] = fsst(sig,fs);  fsst(sig,fs,'yaxis')

Extraiga las dos crestas de frecuencia de tiempo que tienen la energía más alta. Especifique una penalización de 1 para los cambios de frecuencia. Retire 1 cubo de frecuencia alrededor de la cresta con la energía más alta antes de extraer la segunda cresta. Traza las crestas.

nfb = 1; [fr,ir] = tfridge(sst,f,1,'NumRidges',2,'NumFrequencyBins',nfb);  plot(t,fr)

Una ubicación es insuficiente: La función encuentra una segunda cresta que está en parte en la pendiente de la primera. Aumente a 50 el número de ubicaciones para eliminar y repetir el cálculo.

nfb = 50; [fr,ir] = tfridge(sst,f,1,'NumRidges',2,'NumFrequencyBins',nfb);  plot(t,fr)

La eliminación de demasiados contenedores distorsiona las crestas de menor energía. Disminuya el número a 15 y repita el cálculo.

nfb = 15; [fr,ir] = tfridge(sst,f,1,'NumRidges',2,'NumFrequencyBins',nfb);  plot(t,fr)

Invierta la transformación correspondiente a las dos crestas. Añade las crestas para reconstruir la señal. Trazar la diferencia entre la señal reconstruida y los chirridos.

itr = ifsst(sst,[],ir,'NumFrequencyBins',nfb); xrec = sum(itr');  plot(t,xrec-(x+y)) ylim([-.1 .1])

 % To hear, type soundsc(xrec,fs)

El acuerdo es bueno la mayor parte del tiempo, pero se deteriora en los extremos, donde las frecuencias cambian más rápidamente.

Argumentos de entrada

contraer todo

Matriz de frecuencia de tiempo, especificada como matriz.

Ejemplo: especifica la transformación sincronación de un sinusoides.fsst(cos(pi/4*(0:159)))

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

Frecuencias de muestreo, especificadas como vector. La longitud de debe ser igual al número de filas en .ftfm

Tipos de datos: single | double

Penalización por cambiar de frecuencia, especificada como un escalar real no negativo.

Tipos de datos: single | double

Número de crestas de frecuencia de tiempo que se extraerán, especificados como el par separado por comas que consta de un escalar entero positivo.'NumRidges' Puede especificar este par nombre-valor en cualquier lugar después de la lista de argumentos de entrada.tfm

Cuando es mayor que 1, :nrtfridge

  1. Extrae la cresta de frecuencia temporal con la energía más alta

  2. Elimina de la energía contenida en la cresta que extrajo y en los cubos de frecuencia adyacentes a ambos lados de la crestatfmnbins

  3. Extrae la cresta de mayor energía en eltfm

  4. Itera hasta que haya extraído crestasnr

Tipos de datos: single | double

Número de ubicaciones que se deben quitar al extraer varias crestas, especificadas como el par separado por comas que consta de un escalar entero positivo. debe ser menor que 1/4 de las frecuencias de muestreo.'NumFrequencyBins'nbins Los índices cercanos a los bordes de frecuencia que tienen menos de las bandejas en un lado se reconstruyen utilizando un número menor de ubicaciones.nbins

Tipos de datos: single | double

Argumentos de salida

contraer todo

Crestas de frecuencia de tiempo, devueltas como una matriz con columnas.nr El número de filas en es igual al número de columnas en .fridgetfm La primera columna contiene las frecuencias que corresponden a la cresta de mayor energía. Las columnas posteriores contienen las frecuencias de las otras crestas en orden decreciente de energía.

Los índices de fila de Ridge, devueltos como una matriz con columnas.nr El número de filas en es igual al número de columnas en .iridgetfm La primera columna contiene los índices que corresponden a la cresta de mayor energía. Las columnas posteriores contienen los índices de las otras crestas en orden decreciente de energía.

Los índices lineales Ridge, devueltos como una matriz con columnas. se define de tal forma que sea la amplitud de a lo largo de las crestas.nrlridgetfm(lridge)tfm El número de filas en es igual al número de columnas en .lridgetfm La primera columna contiene los índices que corresponden a la cresta de mayor energía. Las columnas posteriores contienen los índices de las otras crestas en orden decreciente de energía.

Ejemplo: es equivalente a .lridgesub2ind(size(tfm),iridge,repmat((1:size(tfm,2))',1,nr))

Algoritmos

La función utiliza un algoritmo codicioso penalizado hacia adelante para extraer las crestas de máxima energía de una matriz de frecuencia de tiempo. El algoritmo encuentra la cresta de frecuencia de tiempo máxima minimizando –ln A en cada punto de tiempo, donde está el valor absoluto de la matriz.A Minimizar –ln A equivale a maximizar el valor de .A Opcionalmente, el algoritmo restringe los saltos en frecuencia con una penalización proporcional a la distancia entre los contenedores de frecuencia.

En el ejemplo siguiente se muestra el algoritmo de cresta de frecuencia de tiempo mediante una penalización que es dos veces la distancia entre los bins de frecuencia. Específicamente, la distancia entre los elementos y se define como(j,k)(m,n) (j-m)2. La matriz de frecuencia de tiempo tiene tres bins de frecuencia y tres pasos de tiempo. Las columnas de matriz corresponden a pasos de tiempo y las filas de matriz corresponden a ubicaciones de frecuencia. Los valores de la segunda fila representan una onda sinusoidal.

  1. Supongamos que tiene la matriz:

    1   4   4 2   2   2 5   5   4

  2. Actualice el valor del elemento (1,2) de la siguiente manera.

    1. Deje los valores en el primer punto de tiempo inalterados. Comience el algoritmo con el elemento (1,2) de la matriz, que presenta el primer bin de frecuencia en el segundo punto de tiempo. El valor de ubicación es 4. Penalizar los valores de la primera columna en función de su distancia desde el elemento (1,2). Aplicar la penalización a la primera columna produce El valor mínimo de la primera columna es 1, que se encuentra en la bandeja 1.

      original value + penalty × distance  1 + 2 × 0 =  1 2 + 2 × 1 =  4 5 + 2 × 4 = 13 
       1   4  4   2 13   5

    2. Agregue el valor mínimo de la columna 1 al valor de ubicación actual, 4. El valor actualizado para (1,2) se convierte en 5, que provino de la ubicación 1.

  3. Actualice los valores de los elementos restantes de la columna 2 de la siguiente manera.

    Vuelva a calcular los valores de la columna 1 original con el factor de penalización utilizando el mismo proceso que en el paso 2a. Obtenga los valores de segunda columna restantes utilizando el mismo proceso que en el paso 2b. Por ejemplo, al actualizar el elemento (2,2), que tiene el valor de ubicación 2, aplicar la penalización a la columna produce Agregar el valor mínimo, 2, al valor de ubicación actual.

    original value + penalty × distance  1 + 2 × 1 =  3 2 + 2 × 0 =  2 5 + 2 × 1 =  7 
    El valor actualizado para (2,2) se convierte en 4. Después de actualizar el elemento (3,2), la matriz es
    1   5(1)  4
    2   4(2)  2
    5   9(2)  4
    Solo se ha actualizado la segunda columna. Los subíndices indican el índice de la ubicación en la columna anterior de la que procede un valor.

  4. Repita el paso 2 para la tercera columna. Pero ahora la penalización se aplica a la segunda columna actualizada. Por ejemplo, al actualizar el elemento (1,3), la penalización es El valor mínimo, 5, que se encuentra en la primera ubicación, se agrega al valor de ubicación (1,3).

    5 + 2 × 0 =  5 4 + 2 × 1 =  6 9 + 2 × 4 = 17 
    Después de actualizar todos los valores de la tercera columna, la matriz final es
    1   5(1)   9(1)
    2   4(2)   6(2)
    5   9(2)  10(2)

  5. A partir de la última columna de la matriz, busque el valor mínimo. Retroceda en el tiempo a través de la matriz yendo desde la ubicación actual hasta el origen de esa ubicación en el punto de tiempo anterior. Realice un seguimiento de los índices de la papelera, que forman el camino que compone la cresta. El algoritmo suaviza la transición utilizando la ubicación de origen en lugar de la ubicación con el valor mínimo. Para este ejemplo, los índices de cresta son , , , que coincide con la trayectoria de energía de la onda sinusoidal en la fila 2 de la matriz que se muestra en el paso 1.222

Si está extrayendo varias crestas, el algoritmo elimina la primera cresta de la matriz de frecuencia de tiempo y repite el proceso.

Capacidades ampliadas

Introducido en R2016b