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.

findsignal

Buscar ubicación de la señal mediante la búsqueda de similitudes

Descripción

ejemplo

[istart,istop,dist] = findsignal(data,signal) devuelve los índices start y stop de un segmento de la matriz de datos, , que mejor coincide con la matriz de búsqueda, .datasignal El segmento que mejor se corresponde es que, la distancia euclidiana cuadrada entre el segmento y la matriz de búsqueda, es más pequeña.dist Si y son matrices, a continuación, busca las columnas inicial y final de la región de que mejor coincide.datasignalfindsignaldatasignal En ese caso, y debe tener el mismo número de filas.datasignal

ejemplo

[istart,istop,dist] = findsignal(data,signal,Name,Value) especifica opciones adicionales mediante argumentos de par nombre-valor. Las opciones incluyen la normalización que se va a aplicar, el número de segmentos que se va a notificar y la métrica de distancia que se va a utilizar.

ejemplo

findsignal(___) sin argumentos de salida traza y resalta las instancias identificadas de .datasignal

  • Si las matrices son vectores reales, la función se muestra como una función del número de muestra.data

  • Si las matrices son vectores complejos, la función se muestra en un diagrama de Argand.data

  • Si las matrices son matrices reales, la función se utiliza para mostrar en una subtrama y con las regiones resaltadas en otra subtrama.imagescsignaldata

  • Si las matrices son matrices complejas, la función traza sus partes reales e imaginarias en la mitad superior e inferior de cada imagen.

Ejemplos

contraer todo

Generar un conjunto de datos que consiste en un pulso gaussiano de 5 Hz con un 50% de ancho de banda, muestreado durante medio segundo a una velocidad de 1 kHz.

fs = 1e3;  t = 0:1/fs:0.5; data = gauspuls(t,5,0.5);

Cree una señal que consista en uno y medio ciclos de un sinusoides de 10 Hz. Trazar el conjunto de datos y la señal.

ts = 0:1/fs:0.15; signal = cos(2*pi*10*ts);  subplot(2,1,1) plot(t,data) title('Data') subplot(2,1,2) plot(ts,signal) title('Signal')

Encuentre el segmento de los datos que tiene la distancia euclidiana cuadrada más pequeña a la señal. Trazar los datos y resaltar el segmento.

figure findsignal(data,signal)

Agregue dos secciones claramente periféricas al conjunto de datos. Encuentre el segmento más cercano a la señal en el sentido de tener la distancia absoluta más pequeña.

dt = data; dt(t>0.31&t<0.32) = 2.1; dt(t>0.32&t<0.33) = -2.1;  findsignal(dt,signal,'Metric','absolute')

Deje que los ejes se estiren si el estiramiento da como resultado una distancia absoluta más pequeña entre el segmento de datos más cercano y la señal.x

findsignal(dt,signal,'TimeAlignment','dtw','Metric','absolute')

Agregue dos secciones periféricas más al conjunto de datos.

dt(t>0.1&t<0.11) = 2.1; dt(t>0.11&t<0.12) = -2.1;  findsignal(dt,signal,'TimeAlignment','dtw','Metric','absolute')

Encuentre los dos segmentos de datos más cercanos a la señal.

findsignal(dt,signal,'TimeAlignment','dtw','Metric','absolute', ...     'MaxNumSegments',2)

Vuelve a encontrar un segmento. Elija como criterio de estiramiento del eje.'edr'x Seleccione una tolerancia de distancia de edición de 3. La distancia de edición entre muestras no coincidentes es independiente de la separación real, lo que hace que sea robusta para los valores atípicos.'edr'

findsignal(dt,signal,'TimeAlignment','edr','EDRTolerance',3, ...     'Metric','absolute')

Repita el cálculo, pero ahora normalice los datos y la señal.

  • Defina una ventana móvil con 10 muestras a cada lado de cada dato y punto de señal.

  • Restar la media de los datos en la ventana y dividir por la desviación estándar local.

Encuentre el segmento de datos normalizado que tenga la distancia absoluta más pequeña a la señal normalizada. Visualice las versiones no normalizadas y normalizadas de los datos y la señal.

findsignal(dt,signal,'TimeAlignment','edr','EDRTolerance',3, ...     'Normalization','zscore','NormalizationLength',21, ...     'Metric','absolute','Annotate','all')

Genere una matriz de datos aleatoria donde:

  • La media es constante en cada una de las siete regiones y cambia abruptamente de una región a otra.

  • La desviación estándar es constante en cada una de las cinco regiones y cambia abruptamente de una región a otra.

lr = 20;  mns = [0 1 4 -5 2 0 1]; nm = length(mns);  vrs = [1 4 6 1 3]/2; nv = length(vrs);  v = randn(1,lr*nm*nv);  f = reshape(repmat(mns,lr*nv,1),1,lr*nm*nv); y = reshape(repmat(vrs,lr*nm,1),1,lr*nm*nv);  t = v.*y+f;

Trazar los datos, destacando los pasos de su construcción. Visualice la media y la desviación estándar de cada región.

subplot(2,2,1) plot(v) title('Original') xlim([0 700])  subplot(2,2,2) plot([f;v+f]') title('Means') xlim([0 700]) text(lr*nv*nm*((0:1/nm:1-1/nm)+1/(2*nm)),-7*ones(1,nm),num2str(mns'))  subplot(2,2,3) plot([y;v.*y]') title('STD') xlim([0 700]) text(lr*nv*nm*((0:1/nv:1-1/nv)+1/(2*nv)),-7*ones(1,nv),num2str(vrs'))  subplot(2,2,4) plot(t) title('Final') xlim([0 700])

Cree una señal aleatoria con una media de cero y una desviación estándar de 1/2. Busque y muestre el segmento de la matriz de datos que mejor se adapte a la señal.

sg = randn(1,2*lr)/2;  findsignal(t,sg)

Cree una señal aleatoria con una media de cero y una desviación estándar de 2. Busque y muestre el segmento de la matriz de datos que mejor se adapte a la señal.

sg = randn(1,2*lr)*2;  findsignal(t,sg)

Cree una señal aleatoria con una media de 2 y una desviación estándar de 2. Busque y muestre el segmento de la matriz de datos que mejor se adapte a la señal.

sg = randn(1,2*lr)*2+2;  findsignal(t,sg)

Cree una señal aleatoria con una media de -4 y una desviación estándar de 3. Busque y muestre el segmento de la matriz de datos que mejor se adapte a la señal.

sg = randn(1,2*lr)*3-4;  findsignal(t,sg)

Repita el cálculo, pero esta vez reste la media de la señal y los datos.

findsignal(t,sg,'Normalization','zscore','Annotate','all')

Diseñar un tipo de letra que se asemeja a la salida de los primeros ordenadores. Utilícelo para escribir la palabra MATLAB®.

rng default  chr = @(x)dec2bin(x')-48;  M = chr([34 34 54 42 34 34 34]); A = chr([08 20 34 34 62 34 34]); T = chr([62 08 08 08 08 08 08]); L = chr([32 32 32 32 32 32 62]); B = chr([60 34 34 60 34 34 60]);  MATLAB = [M A T L A B];

Corromper la palabra repitiendo columnas aleatorias de las letras y variando el espaciado. Muestre la palabra original y tres versiones dañadas.

c = @(x)x(:,sort([1:6 randi(6,1,2)]));  subplot(4,1,1,'XLim',[0 60]) spy(MATLAB) xlabel('') ylabel('Original')  for kj = 2:4     subplot(4,1,kj,'XLim',[0 60])     spy([c(M) c(A) c(T) c(L) c(A) c(B)])     xlabel('')     ylabel('Corrupted') end

Genere una versión más dañada de la palabra. Busque una versión ruidoso de la letra "A". Visualice la distancia entre la matriz de búsqueda y el segmento de datos más cercano a ella. El segmento se derrama en la "T" porque los ejes horizontales son rígidos.

corr = [c(M) c(A) c(T) c(L) c(A) c(B)];  sgn = c(A);  [ist,ind,dst] = findsignal(corr,sgn);  clf subplot(2,1,1) spy(sgn) subplot(2,1,2) spy(corr) chk = zeros(size(corr)); chk(:,ist:ind) = corr(:,ist:ind); hold on spy(chk,'*k') hold off

 dst
dst = 11 

Permita que los ejes horizontales se estiren. El segmento más cercano es la intersección de la matriz de búsqueda y la primera instancia de "A." La distancia entre el segmento y la matriz es cero.

[ist,ind,dst] = findsignal(corr,sgn,'TimeAlignment','dtw');  subplot(2,1,1) spy(sgn) subplot(2,1,2) spy(corr) chk = zeros(size(corr)); chk(:,ist:ind) = corr(:,ist:ind); hold on spy(chk,'*k') hold off

 dst
dst = 0 

Repita el cálculo utilizando la funcionalidad integrada de .findsignal Divida por la media local para normalizar los datos y la señal. Utilice la métrica simétrica Kullback-Leibler.

findsignal(corr,sgn,'TimeAlignment','dtw', ...     'Normalization','power','Metric','symmkl','Annotate','all')

Argumentos de entrada

contraer todo

Matriz de datos, especificada como vector o matriz.

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

Matriz de búsqueda, especificada como vector o matriz.

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

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: encuentra los dos segmentos de la matriz de datos que tienen las distancias euclidianas cuadradas más pequeñas a la señal de búsqueda.'MaxNumSegments',2,'Metric','squared','Normalization','center','NormalizationLength',11 Tanto los datos como la señal se normalizan restando la media de una ventana deslizante. La ventana tiene cinco muestras a cada lado de cada punto, para una longitud total de 5 + 5 + 1 x 11 muestras.

Estadística de normalización, especificada como el par separado por comas que consta de y uno de estos valores:'Normalization'

  • — No normalizar.'none'

  • — Restar la media local.'center'

  • — Dividir por media local.'power'

  • — Restar la media local y dividir por desviación estándar local.'zscore'

Longitud de normalización, especificada como el par separado por comas que consta de y un escalar entero.'NormalizationLength' Este valor representa el número mínimo de muestras sobre las que normalizar cada muestra tanto en los datos como en la señal. Si la señal es una matriz, representa un número de columnas.'NormalizationLength'

Tipos de datos: single | double

Distancia máxima de segmento, especificada como el par separado por comas que consta de un escalar real positivo.'MaxDistance' Si especifica , devuelve los índices de inicio y detención de todos los segmentos de cuyos distancias son mínimos locales y menores que .'MaxDistance'findsignaldatasignal'MaxDistance'

Tipos de datos: single | double

Número máximo de segmentos a devolver, especificado como el par separado por comas que consta de un escalar entero positivo.'MaxNumSegments' Si especifica , localiza todos los segmentos cuyas distancias de la señal son mínimas locales y vuelve a segmentos con distancias más pequeñas.'MaxNumSegments'findsignaldata'MaxNumSegments'

Tipos de datos: single | double

Técnica de alineación de tiempo, especificada como el par separado por comas que consta de y uno de estos valores:'TimeAlignment'

  • — No estire ni repita muestras para minimizar la distancia.'fixed'

  • — Intente reducir la distancia estirando el eje de tiempo y repitiendo muestras en los datos o en la señal.'dtw' Consulte para obtener más información.dtw

  • — Minimizar el número de ediciones para que la distancia entre cada muestra restante del segmento de datos y su contraparte de señal se encuentra dentro de una tolerancia determinada.'edr' Una edición consiste en eliminar una muestra de los datos, la señal o ambos. Especifique la tolerancia utilizando el argumento.'EDRTolerance' Utilice esta opción cuando cualquiera de las matrices de entrada tenga valores atípicos. Consulte para obtener más información.edr

Edite la tolerancia de distancia, especificada como el par separado por comas que consta de un escalar real.'EDRTolerance' Utilice este argumento para buscar la señal cuando el argumento de par nombre-valor se establece en .'TimeAlignment''edr'

Tipos de datos: single | double

Métrica de distancia, especificada como el par separado por comas que consta de , , , o .'Metric''squared''absolute''euclidean''symmkl' Si y son ambas señales -dimensionales, entonces prescribeXYKMetric Dmn( , ), la distancia entre la muestra y la muestra de .XYmXnY Consulte para obtener más información sobreDeformación dinámica del tiempo Dmn( , ).XY

  • — Plaza de la métrica euclidiana, que consiste en la suma de las diferencias cuadradas:'squared'

    dmn(X,Y)=k=1K(xk,myk,n)*(xk,myk,n)

  • — Suma de raíz de diferencias cuadradas, también conocidas como euclidianas o'euclidean' 2 Métricas:

    dmn(X,Y)=k=1K(xk,myk,n)*(xk,myk,n)

  • — Suma de diferencias absolutas, también conocida como Manhattan, la manzana de la ciudad, el taxi o'absolute' 1 Métricas:

    dmn(X,Y)=k=1K|xk,myk,n|=k=1K(xk,myk,n)*(xk,myk,n)

  • — Métrica simétrica de Kullback-Leibler.'symmkl' Esta métrica solo es válida para reales y positivos y:XY

    dmn(X,Y)=k=1K(xk,myk,n)(logxk,mlogyk,n)

Estilo de trazado, especificado como el par separado por comas que consta de y uno de estos valores:'Annotate'

  • traza los datos y resalta las regiones que mejor coinciden con la señal.'data'

  • traza la señal en una subtrama separada.'signal'

  • traza la señal, los datos, la señal normalizada y los datos normalizados en subtramas separadas.'all'

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

Argumentos de salida

contraer todo

Los índices inicial y final del segmento, devueltos como escalares enteros o vectores.

Distancia mínima de señal de datos, devuelta como escalar o vectorial.

Introducido en R2016b