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

El filtrado de Savitzky-Golay

Descripción

ejemplo

y = sgolayfilt(x,order,framelen) aplica un filtro de suavizado de respuesta de impulso finito Savitzky-Golay (FIR) de orden polinómico y longitud de trama 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 cota a lo largo del cual funciona el filtro.

Ejemplos

contraer todo

Genere una señal aleatoria y suavice el uso.sgolayfilt Especifique un orden Polinómico de 3 y una longitud de trama de 11. Trace 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 mediante la Convolving de la señal con la fila central de la salida de.sgolayfiltBsgolay El resultado es la porción 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 forma 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 del 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;

Suavizar la señal aplicando un filtro Savitzky-Golay de orden polinómico 9 a los marcos de datos de longitud 21. Trace las señales originales y filtradas. Amplíe 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 de Kaiser como un vector de ponderación. Especifique un factor de forma

<math display="inline">
<mrow>
<mi>β</mi>
<mo>=</mo>
<mn>38</mn>
</mrow>
</math>
. Trace 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ómico, especificado como un entero positivo. debe ser menor que.orderframelen Si = – 1, el filtro no produce suavizado.orderframelen

Tipos de datos: single | double

Longitud de trama, especificada como un entero impar positivo.

Tipos de datos: single | double

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

Tipos de datos: single | double

Dimension para filtrar a lo largo, especificado como un escalar entero positivo. De forma predeterminada, opera 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 típicamente para "suavizar" una señal ruidosa cuyo intervalo de frecuencia (sin ruido) es grande. También se denominan filtros polinomiales de suavizado digital o filtros de suavizado de mínimos cuadrados. Los filtros Savitzky-Golay funcionan mejor en algunas aplicaciones que los filtros FIR de promedio estándar, que tienden a filtrar el contenido de alta frecuencia junto con el ruido. Los filtros Savitzky-Golay son más efectivos para preservar los componentes de señal de alta frecuencia, pero menos exitosos al rechazar el ruido.

Los filtros Savitzky-Golay son óptimos en el sentido de que minimizan el error de mínimos cuadrados en el ajuste de un polinomio a los 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