sgolayfilt

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

Синтаксис

y = sgolayfilt(x,order,framelen)
y = sgolayfilt(x,order,framelen,weights)
y = sgolayfilt(x,order,framelen,weights,dim)

Описание

пример

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

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

m = (framelen-1)/2;

B = sgolay(order,framelen);

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

plot(steady)
legend('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

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

Загрузите речевой сигнал, выбранный в Fs=7418 Гц. Файл содержит запись розеточной речи, говоря слово "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

Повторите вычисление, но теперь используйте окно Kaiser в качестве вектора взвешивания. Задайте форм-фактор β=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

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

свернуть все

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

Типы данных: 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 оптимальны в том смысле, что они минимизируют ошибку наименьших квадратов в подборе кривой полиному к кадрам шумных данных.

Ссылки

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

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

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

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

| | |

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