sgolayfilt

Фильтрация Savitzky-Golay

Описание

пример

y = sgolayfilt(x,order,framelen) применяет фильтр сглаживания конечной импульсной характеристики (FIR) Savitzky-Golay полиномиального порядка order и структурируйте длину framelen к данным в векторном x. Если x матрица, затем sgolayfilt работает с каждым столбцом.

пример

y = sgolayfilt(x,order,framelen,weights) задает вектор взвешивания, чтобы использовать во время минимизации наименьших квадратов.

y = sgolayfilt(x,order,framelen,weights,dim) задает размерность, по которой действует фильтр.

Примеры

свернуть все

Сгенерируйте случайный сигнал и сглаживайте его с помощью sgolayfilt. Задайте полиномиальный порядок 3 и длину системы координат 11. Постройте исходные и сглаживавшие сигналы.

order = 3;
framelen = 11;

lx = 34;
x = randn(lx,1);

sgf = sgolayfilt(x,order,framelen);

plot(x,':')
hold on
plot(sgf,'.-')
legend('signal','sgolay')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent signal, sgolay.

sgolayfilt функция выполняет большую часть фильтрации путем свертки к сигналу с центральной строкой B, выход sgolay. Результатом является установившийся фрагмент отфильтрованного сигнала. Сгенерируйте и постройте этот фрагмент.

m = (framelen-1)/2;

B = sgolay(order,framelen);

steady = conv(x,B(m+1,:),'same');

plot(steady)
legend('signal','sgolay','steady')

Figure contains an axes. The axes contains 3 objects of type line. These objects represent signal, sgolay, steady.

Выборки близко к ребрам сигнала не могут быть помещены в центр симметричного окна и иметь, чтобы быть обработанными по-другому.

Чтобы определить переходный процесс запуска, умножение матриц первый (framelen-1)/2 строки B первым framelen выборки сигнала.

ybeg = B(1:m,:)*x(1:framelen);

Чтобы определить терминальный переходный процесс, умножение матриц итоговый (framelen-1)/2 строки B итоговым framelen выборки сигнала.

yend = B(framelen-m+1:framelen,:)*x(lx-framelen+1:lx);

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

cmplt = steady;
cmplt(1:m) = ybeg;
cmplt(lx-m+1:lx) = yend;

plot(cmplt)
legend('signal','sgolay','steady','complete')
hold off

Figure contains an axes. The axes contains 4 objects of type line. These objects represent signal, sgolay, steady, complete.

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

Загрузите речевой сигнал, произведенный в Fs=7418Hz. Файл содержит запись женского голоса, говоря слово "MATLAB®".

load mtlb
t = (0:length(mtlb)-1)/Fs;

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

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

Figure contains 2 axes. Axes 1 with title Original contains an object of type line. Axes 2 with title Filtered contains an object of type line.

Повторите вычисление, но теперь используйте окно Кайзера в качестве вектора взвешивания. Задайте масштабный фактор β=38. Постройте новый отфильтрованный сигнал.

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

Figure contains 2 axes. Axes 1 with title Original contains an object of type line. Axes 2 with title Filtered contains 2 objects of type line.

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

свернуть все

Входной сигнал в виде вектора или матрицы.

Типы данных: single | double

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

Типы данных: single | double

Структурируйте длину в виде положительного нечетного целого числа.

Типы данных: single | double

Взвешивание массива в виде действительного положительного вектора или матрицы длины framelen.

Типы данных: single | double

Размерность, чтобы отфильтровать вперед в виде положительного целочисленного скаляра. По умолчанию, sgolayfilt действует по первому измерению x чей размер больше 1.

Типы данных: single | double

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

свернуть все

Фильтрованный сигнал, возвращенный как вектор или матрица.

Советы

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

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

Ссылки

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

[2] Schafer, Рональд. “Что такое Фильтр Savitzky-Golay? [Читайте лекции Примечаниям]”. Журнал 28 Обработки сигналов IEEE, № 4 (июль 2011): 111–17. https://doi.org/10.1109/MSP.2011.941097.

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

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

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

| | |

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