sgolay

Savitzky-Golay фильтруют проект

Синтаксис

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

Описание

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

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

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

[b,g] = sgolay(...) возвращает матричный g фильтров дифференцирования. Каждый столбец g является фильтром дифференцирования для производных порядка p-1, где p является индексом столбца. Учитывая x сигнала длины framelen, можно найти, что оценка p th заказывает производную, xp, его среднего значения от

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

Примеры

свернуть все

Сгенерируйте сигнал, который состоит из синусоиды на 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')

Советы

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

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

Ссылки

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

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

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

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

| | |

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