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

Diseño de filtro Savitzky-Golay

Descripción

ejemplo

b = sgolay(order,framelen) diseña un filtro de suavizado Savitzky-Golay FIR con orden polinómico y longitud del marco.orderframelen

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

ejemplo

[b,g] = sgolay(___) devuelve la matriz de filtros de diferenciación.g Puede utilizar estos argumentos de salida con cualquiera de las sintaxis de entrada anteriores.

Ejemplos

contraer todo

Generar una señal que consiste en un sinusoides de 0,2 Hz incrustado en ruido gaussiano blanco y muestreado 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ícelo para suavizar la señal.sgolay Utilice marcos de 21 muestras y polinomios de 4o orden.

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

Calcular la parte de estado estacionario de la señal convolving ella con la fila central de .b

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

Calcular 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. Trazar la señal original y la estimación savitzky-Golay.

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

Generar una señal que consiste en un sinusoides de 0,2 Hz incrustado en ruido gaussiano blanco y muestreado 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 del sinusoides utilizando el método Savitzky-Golay. Utilice marcos de 25 muestras y polinomios de 5o orden. Divida las columnas por poderes de 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

Trazar 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')

Argumentos de entrada

contraer todo

Orden polinómica, especificado como un entero positivo.

Longitud de fotograma, especificada como un entero impar positivo. El valor de debe ser mayor que .framelenorder Si , el filtro diseñado no produce suavizado.order=framelen-1

Vector de pesaje, especificado como un vector positivo real. El vector de pesaje tiene la misma longitud y se utilizan para realizar la minimización de mínimos cuadrados.framelen

Argumentos de salida

contraer todo

Coeficientes de filtro FIR variables en el tiempo, especificados como una matriz -por-.framelenframelen En una implementación de filtro de suavizado (por ejemplo, ), las últimas filas (cada una de ellas 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 terminal.sgolayfilt(framelen-1)/2(framelen-1)/2 La fila central se aplica a la señal en estado estacionario.

Matriz de filtros de diferenciación, especificada como matriz. Cada columna de es un filtro de diferenciación para derivados de orden, donde está el índice de columna.gp-1p Dada una señal de longitud, puede encontrar una estimación de laxframelenpth orden derivada, , de su valor medio de .xpxp((framelen+1)/2) = (factorial(p)) * g(:,p+1)' * x

Algoritmos

Los filtros de suavizado Savitzky-Golay (también llamados filtros polinomios de suavizado digital o filtros de suavizado de mínimos cuadrados) se utilizan normalmente 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 promedio estándar, que tienden a filtrar una parte significativa del contenido de alta frecuencia de la señal junto con el ruido.

Puede implementar el suavizado de datos para medir una variable que varía lentamente y también está dañada por el ruido aleatorio. Dado que los puntos cercanos miden casi el mismo valor subyacente, puede reemplazar cada punto de datos por un promedio local de los puntos de datos circundantes. Los filtros Savitzky-Golay son óptimos en el sentido de que minimizan el error de mínimos cuadrados al ajustar un polinomio a cada fotograma de datos ruidosos.

Referencias

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

[2] Press, William. H, Teukolsky, S. A, Vetterling, W. A, and Flannery, B. P . Numerical Recipes in C: The Art of Scientific Computing. Cambridge University Press, New York, NY, USA 1992 .

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