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.

sgolay

El diseño del filtro Savitzky-Golay

Sintaxis

b = sgolay(order,framelen)
b = sgolay(order,framelen,weights)
[b,g] = sgolay(...)

Descripción

b = sgolay(order,framelen) diseña un filtro de suavizado Savitzky-Golay FIR con orden polinómico y longitud de trama. debe ser menor que, y debe ser impar.orderframelenorderframelenframelen Si =, el filtro diseñado no produce suavizado.orderframelen-1

La salida,, es una-por-matriz cuyas filas representan los coeficientes de filtro FIR que varían en el tiempo.bframelenframelen En una implementación de filtro de suavizado (por ejemplo,), las últimas filas (cada uno un filtro FIR) se aplican a la señal durante el transitorio de inicio, y las primeras filas se aplican a la señal durante el transitorio del terminal.sgolayfilt(framelen-1)/2(framelen-1)/2 La fila central se aplica a la señal en estado estacionario.

b = sgolay(order,framelen,weights) especifica un vector de ponderación, con longitud, que contiene los pesos reales con valores positivos que se utilizarán durante la minimización de mínimos cuadrados.weightsframelen

[b,g] = sgolay(...) Devuelve la matriz de filtros de diferenciación.g Cada columna de es un filtro de diferenciación para derivados de orden, donde es el índice de columna.gp-1p Dada una señal de longitud, se puede encontrar una estimación de laxframelenpth derivado de la orden, de su valor medio dexp

xp((framelen+1)/2) = (factorial(p)) * g(:,p+1)' * x

Ejemplos

contraer todo

Genere una señal que consista en una sinusoide de 0,2 Hz incrustada en ruido Gaussiano blanco y muestreada cinco veces por segundo durante 200 segundos.

dt = 1/5; t = (0:dt:200-dt)';  x = 5*sin(2*pi*0.2*t) + randn(size(t));

Utilíce para suavizar la señal.sgolay Utilice marcos de 21 muestras y polinomios de 4º orden.

order = 4; framelen = 21;  b = sgolay(order,framelen);

Calcule la porción de estado estacionario de la señal Convolving con la fila central de.b

ycenter = conv(x,b((framelen+1)/2,:),'valid');

Calcule los transitorios. Utilice las últimas filas del inicio y las primeras filas del terminal.bb

ybegin = b(end:-1:(framelen+3)/2,:) * x(framelen:-1:1); yend = b((framelen-1)/2:-1:1,:) * x(end:-1:end-(framelen-1));

Concatenar los transitorios y la porción de estado estacionario para generar la señal suavizada completa. Trace la señal original y la estimación de Savitzky-Golay.

y = [ybegin; ycenter; yend]; plot([x y]) legend('Noisy Sinusoid','S-G smoothed sinusoid')

Genere una señal que consista en una sinusoide de 0,2 Hz incrustada en ruido Gaussiano blanco y muestreada cuatro veces por segundo durante 20 segundos.

dt = 0.25; t = (0:dt:20-1)';  x = 5*sin(2*pi*0.2*t)+0.5*randn(size(t));

Estimar los tres primeros derivados de la sinusoide utilizando el método Savitzky-Golay. Utilice marcos de 25 muestras y polinomios de 5º orden. Divida las columnas por poderes para escalar los derivados correctamente.dt

[b,g] = sgolay(5,25);  dx = zeros(length(x),4); for p = 0:3   dx(:,p+1) = conv(x, factorial(p)/(-dt)^p * g(:,p+1), 'same'); end

Trace la señal original, la secuencia suavizada y las estimaciones derivadas.

plot(x,'.-') hold on plot(dx) hold off  legend('x','x (smoothed)','x''','x''''', 'x''''''') title('Savitzky-Golay Derivative Estimates')

Sugerencias

Los filtros de suavizado Savitzky-Golay (también denominados filtros polinómicos de suavizado digital o filtros de suavizado de mínimos cuadrados) se utilizan típicamente para "suavizar" una señal ruidosa cuyo intervalo de frecuencia (sin ruido) es grande. En este tipo de aplicación, los filtros de suavizado Savitzky-Golay funcionan mucho mejor que los filtros FIR de promedio estándar, que tienden a filtrar una porción significativa del contenido de alta frecuencia de la señal junto con el ruido. Aunque los filtros Savitzky-Golay son más efectivos para preservar los componentes de alta frecuencia pertinentes de la señal, son menos exitosos que los filtros FIR de promedio estándar al rechazar el ruido cuando los niveles de ruido son particularmente altos. La formulación particular de los filtros Savitzky-Golay preserva las órdenes de varios momentos mejor que otros métodos de suavizado, que tienden a preservar los anchos de pico y las alturas mejor que Savitzky-Golay.

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 cada fotograma 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