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.

sgolayfilt

Filtrado Savitzky-Golay

Descripción

ejemplo

y = sgolayfilt(x,order,framelen) aplica un filtro de respuesta de impulso finito (FIR) Savitzky-Golay de orden polinómico y longitud de fotograma a los datos en vector .orderframelenx Si es una matriz, entonces opera en cada columna.xsgolayfilt

ejemplo

y = sgolayfilt(x,order,framelen,weights) especifica un vector de ponderación que se utilizará durante la minimización de mínimos cuadrados.

y = sgolayfilt(x,order,framelen,weights,dim) especifica la dimensión a lo largo de la cual opera el filtro.

Ejemplos

contraer todo

Generar una señal aleatoria y suavizarla usando .sgolayfilt Especifique un orden polinómio de 3 y una longitud de fotograma de 11. Trazar las señales originales y suavizadas.

order = 3; framelen = 11;  lx = 34; x = randn(lx,1);  sgf = sgolayfilt(x,order,framelen);  plot(x,':') hold on plot(sgf,'.-') legend('signal','sgolay')

La función realiza la mayor parte del filtrado convolviendo la señal con la fila central de , la salida de .sgolayfiltBsgolay El resultado es la parte de estado estacionario de la señal filtrada. Genere y trace esta porción.

m = (framelen-1)/2;  B = sgolay(order,framelen);  steady = conv(x,B(m+1,:),'same');  plot(steady) legend('signal','sgolay','steady')

Las muestras cercanas a los bordes de la señal no se pueden colocar en el centro de una ventana simétrica y deben tratarse de manera diferente.

Para determinar el transitorio de inicio, la matriz multiplica las primeras filas de las primeras muestras de la señal.(framelen-1)/2Bframelen

ybeg = B(1:m,:)*x(1:framelen);

Para determinar el transitorio terminal, la matriz multiplica las filas finales de las muestras finales de la señal.(framelen-1)/2Bframelen

yend = B(framelen-m+1:framelen,:)*x(lx-framelen+1:lx);

Concatenar los transitorios y la porción de estado estacionario para generar la señal completa.

cmplt = steady; cmplt(1:m) = ybeg; cmplt(lx-m+1:lx) = yend;  plot(cmplt) legend('signal','sgolay','steady','complete') hold off

La adición de ponderaciones a la minimización rompe la simetría y requiere pasos adicionales para una solución adecuada.B

Cargue una señal de voz muestreada en

<math display="inline">
<mrow>
<msub>
<mrow>
<mi mathvariant="italic">F</mi>
</mrow>
<mrow>
<mi mathvariant="italic">s</mi>
</mrow>
</msub>
<mo>=</mo>
<mn>7418</mn>
<mtext></mtext>
<mi mathvariant="normal">Hz</mi>
</mrow>
</math>
. El archivo contiene una grabación de una voz femenina que dice la palabra "MATLAB®."

load mtlb t = (0:length(mtlb)-1)/Fs;

Suaviza la señal aplicando un filtro Savitzky-Golay de orden polinómica 9 a los marcos de datos de longitud 21. Trazar las señales originales y filtradas. Acérquese en un intervalo de 0,02 segundos.

rd = 9; fl = 21;  smtlb = sgolayfilt(mtlb,rd,fl);  subplot(2,1,1) plot(t,mtlb) axis([0.2 0.22 -3 2]) title('Original') grid  subplot(2,1,2) plot(t,smtlb) axis([0.2 0.22 -3 2]) title('Filtered') grid

Repita el cálculo, pero ahora utilice una ventana Kaiser como vector de ponderación. Especificar un factor de forma

<math display="inline">
<mrow>
<mi>β</mi>
<mo>=</mo>
<mn>38</mn>
</mrow>
</math>
. Trazar la nueva señal filtrada.

kmtlb = sgolayfilt(mtlb,rd,fl,kaiser(fl,38));  subplot(2,1,2) hold on plot(t,kmtlb) axis([0.2 0.22 -3 2]) hold off

Argumentos de entrada

contraer todo

Señal de entrada, especificada como vector o matriz.

Tipos de datos: single | double

Orden polinómica, especificado como un entero positivo. debe ser menor que .orderframelen Si es – 1, el filtro no produce suavizado.orderframelen

Tipos de datos: single | double

Longitud de fotograma, especificada como un entero impar positivo.

Tipos de datos: single | double

Matriz de ponderación, especificada como un vector positivo real o matriz de longitud.framelen

Tipos de datos: single | double

Dimensión para filtrar a lo largo, especificada como un escalar entero positivo. De forma predeterminada, funciona a lo largo de la primera dimensión cuyo tamaño es mayor que 1.sgolayfiltx

Tipos de datos: single | double

Argumentos de salida

contraer todo

Señal filtrada, devuelta como vector o matriz.

Sugerencias

Los filtros de suavizado Savitzky-Golay se utilizan normalmente para "suavizar" una señal ruidosa cuyo intervalo de frecuencia (sin ruido) es grande. También se denominan filtros polinomios de suavizado digital o filtros de suavizado de mínimos cuadrados. Los filtros Savitzky-Golay funcionan mejor en algunas aplicaciones que los filtros FIR promedio estándar, que tienden a filtrar el contenido de alta frecuencia junto con el ruido. Los filtros Savitzky-Golay son más eficaces para preservar los componentes de señal de alta frecuencia, pero tienen menos éxito en el rechazo del ruido.

Los filtros Savitzky-Golay son óptimos en el sentido de que minimizan el error de mínimos cuadrados al ajustar un polinomio a marcos de datos ruidosos.

Referencias

[1] Orfanidis, Sophocles J. Introduction to Signal Processing. Englewood Cliffs, NJ: Prentice-Hall, 1996.

Capacidades ampliadas

Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.

Consulte también

| | |

Introducido antes de R2006a