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

Busque la ubicación de la señal mediante búsqueda de similitud

Descripción

ejemplo

[istart,istop,dist] = findsignal(data,signal) Devuelve los índices de inicio y detención de un segmento de la matriz de datos, que mejor coincide con la matriz de búsqueda,.datasignal El segmento que mejor coincide es tal que, la distancia euclidiana cuadrada entre el segmento y el array de búsqueda, es más pequeña.dist Si y son matrices, a continuación, encuentra las columnas de inicio y fin de la región de las mejores coincidencias.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 aplicará, el número de segmentos que se reportará y la métrica de distancia que se 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 Argand.data

  • Si las matrices son matrices reales, la función se muestra como una imagen en un subgráfico y con las regiones resaltadas en otro subgráfico.signaldata

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

Ejemplos

contraer todo

Genere un conjunto de datos que consista en un pulso gaussiano de 5 Hz con un ancho de banda del 50%, 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 consistente en ciclos de uno y medio de una sinusoide de 10 Hz. Trace 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. Trace los datos y resalte 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 más alejadas 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 robusto a los valores atípicos.'edr'

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

Repite el cálculo, pero ahora normaliza 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.

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

Busque el segmento de datos normalizado que tiene 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 una.

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

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;

Graficar los datos, destacando los pasos de su construcción. Mostrar 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 visualice el segmento de la matriz de datos que mejor coincida con 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 visualice el segmento de la matriz de datos que mejor coincida con 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 visualice el segmento de la matriz de datos que mejor coincida con 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 visualice el segmento de la matriz de datos que mejor coincida con 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 de los datos.

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

Idear un tipo de letra que se parezca a la salida de los equipos tempranos. Utilíla 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];

Corrompe la palabra repitiendo columnas aleatorias de las letras y variando el espaciado. Mostrar 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 corrupta de la palabra. Buscar una versión ruidosa de la letra "A." Muestra la distancia entre la matriz de búsqueda y el segmento de datos más cercano a él. 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 incorporada de.findsignal Divida por la media local para normalizar los datos y la señal. Utilice la métrica Kullback-Leibler simétrica.

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:

Array de búsqueda, especificado como vector o matriz.

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

Argumentos de par nombre-valor

Especifique pares de argumentos separados por comas opcionales. es el nombre del argumento y es el valor correspondiente. deben aparecer dentro de las cotizaciones.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 euclidiana 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 ambos lados de cada punto, para una longitud total de 5 + 5 + 1 = 11 muestras.

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

  • — No se normalice.'none'

  • — Restar media local.'center'

  • — Dividir por media local.'power'

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

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

Tipos de datos: single | double

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

Tipos de datos: single | double

Número máximo de segmentos que se devuelven, especificados como el par separado por comas que consta de un escalar entero positivo.'MaxNumSegments' Si especifica, a continuación, localiza todos los segmentos de cuyas distancias de la señal son mínimos locales y regresa a los segmentos con las 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 uno de estos valores:'TimeAlignment'

  • — No estirar ni repetir 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

  • — Minimice el número de ediciones para que la distancia entre cada muestra restante del segmento de datos y su contraparte de la señal se encuentra dentro de una tolerancia dada.'edr' Una edición consiste en eliminar una muestra de los datos, la señal o ambas. 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

Editar 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 está establecido en.'TimeAlignment''edr'

Tipos de datos: single | double

Distancia métrica, especificada como el par separado por comas que consta de y uno de,,, o.'Metric''squared''absolute''euclidean''symmkl' Si y son señales de ambas dimensiones, entonces prescribeXYKMetric Dmn(,), la distancia entre la muestra TH y la muestra de TH.XYmXnY Consulte para obtener más información sobreDinámico tiempo warping Dmn( , ).XY

  • — Cuadrado de la métrica euclidiana, consistente en la suma de las diferencias cuadradas:'squared'

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

  • — Raíz suma de las diferencias cuadradas, también conocido como el euclidiano o'euclidean' 2 Métricas:

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

  • — Suma de las diferencias absolutas, también conocida como Manhattan, bloque de la ciudad, Taxicab, o'absolute' 1 Métricas:

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

  • — Métrica Kullback-Leibler simétrica.'symmkl' Esta métrica es válida sólo para real y positiva 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 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 un subgráfico separado.'signal'

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

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

Argumentos de salida

contraer todo

Índices de inicio y fin de segmento, devueltos como escalares enteros o vectores.

Distancia mínima de la señal de datos, devuelta como un escalar o un vector.

Introducido en R2016b