sgolay

Создание фильтра Savitzky-Golay

Описание

пример

b = sgolay(order,framelen) проектирует КИХ-фильтр сглаживания Savitzky-Golay с полиномиальным порядком order и структурируйте длину framelen.

b = sgolay(order,framelen,weights) задает вектор взвешивания, weights, который содержит действительные, веса с положительным знаком, которые будут использоваться во время минимизации наименьших квадратов.

пример

[b,g] = sgolay(___) возвращает матричный g из фильтров дифференцирования. Можно использовать эти выходные аргументы с любым из предыдущих входных синтаксисов.

Примеры

свернуть все

Сгенерируйте сигнал, который состоит из синусоиды на 0,2 Гц, встроенной в белый Гауссов шум, и произвел пять раз в секунду в течение 200 секунд.

dt = 1/5;
t = (0:dt:200-dt)';

x = 5*sin(2*pi*0.2*t) + randn(size(t));

Используйте sgolay сглаживать сигнал. Используйте системы координат с 21 выборкой и полиномы 4-го порядка.

order = 4;
framelen = 21;

b = sgolay(order,framelen);

Вычислите установившийся фрагмент сигнала путем свертки к нему с центральной строкой b.

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

Вычислите переходные процессы. Используйте последние строки b для запуска и первых строк b для терминала.

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

Конкатенация переходных процессов и установившегося фрагмента, чтобы сгенерировать полный сглаживавший сигнал. Постройте исходный сигнал и оценку Savitzky-Golay.

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

Сгенерируйте сигнал, который состоит из синусоиды на 0,2 Гц, встроенной в белый Гауссов шум, и произвел четыре раза в секунду в течение 20 секунд.

dt = 0.25;
t = (0:dt:20-1)';

x = 5*sin(2*pi*0.2*t)+0.5*randn(size(t));

Оцените первые три производные синусоиды с помощью метода Savitzky-Golay. Используйте системы координат с 25 выборками и полиномы 5-го порядка. Разделите столбцы на степени 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

Постройте исходный сигнал, сглаживавшую последовательность и производные оценки.

plot(x,'.-')
hold on
plot(dx)
hold off

legend('x','x (smoothed)','x''','x''''', 'x''''''')
title('Savitzky-Golay Derivative Estimates')

Входные параметры

свернуть все

Полиномиальный порядок, заданный как положительное целое число.

Структурируйте длину, заданную как положительное нечетное целое число. Значение framelen должен быть больше order. Если order=framelen-1, затем спроектированный фильтр не производит сглаживания.

Взвешивание вектора, заданного как действительный положительный вектор. Весящий вектор имеет ту же длину как framelen и используются, чтобы выполнить минимизацию наименьших квадратов.

Выходные аргументы

свернуть все

Изменяющиеся во времени КИХ-коэффициенты фильтра, заданные как framelen- framelen матрица. В сглаживании фильтруют реализацию (например, sgolayfilt), последний (framelen-1)/2 строки (каждый КИХ-фильтр) применяются к сигналу во время переходного процесса запуска и первому (framelen-1)/2 строки применяются к сигналу во время терминального переходного процесса. Центральная строка применяется к сигналу в устойчивом состоянии.

Матрица фильтров дифференцирования, заданных как матрица. Каждый столбец g фильтр дифференцирования для производных порядка p-1, где p индекс столбца. Учитывая x сигнала из длины framelen, можно найти оценку pth заказывают производную, xp, из его среднего значения от xp((framelen+1)/2) = (factorial(p)) * g(:,p+1)' * x.

Алгоритмы

Сглаживающие фильтры Savitzky-Golay (также названный цифровыми фильтрами полинома сглаживания или наименьшими квадратами, сглаживающими фильтры), обычно используются, чтобы “сгладить” сигнал с шумом, промежуток частоты которого (без шума) является большим. В этом типе приложения, Savitzky-Golay, который сглаживающие фильтры выполняют намного лучше, чем стандартные КИХ-фильтры усреднения, которые имеют тенденцию отфильтровывать значительный фрагмент высокочастотного содержимого сигнала наряду с шумом.

Можно реализовать усреднение данных, чтобы измерить переменную, которая и медленно варьируется и также поврежденная случайным шумом. Поскольку соседние точки измеряют почти то же базовое значение, можно заменить каждую точку данных локальным средним значением окружающих точек данных. Фильтры Savitzky-Golay оптимальны в том смысле, что они минимизируют ошибку наименьших квадратов в подборе кривой полиному к каждой системе координат зашумленных данных.

Ссылки

[1] Orfanidis, Софокл Дж. Введение в обработку сигналов. Englewood Cliffs, NJ: Prentice Hall, 1996.

[2] Нажмите, Уильям. H, Teukolsky, S. A, Vetterling, W. A, и Flannery, B. P. Числовые рецепты в C: Искусство научных вычислений. Издательство Кембриджского университета, Нью-Йорк, Нью-Йорк, США 1992.

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Смотрите также

| | |

Представлено до R2006a