sgolayfilt

Фильтрация Савицкого-Голая

Описание

пример

y = sgolayfilt(x,order,framelen) применяет фильтр сглаживания конечной импульсной характеристики (КИХ) Савицкого-Голея полиномиального порядка 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.

The 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;

Сглаживайте сигнал путем применения фильтра Савицкого-Голея полиномиального порядка 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 работают лучше в некоторых приложениях, чем стандартные средние конечная импульсная характеристика, которые, как правило, фильтруют высокочастотное содержимое вместе с шумом. Фильтры Савицкого-Голея более эффективны при сохранении высокой частоты сигнала компонентов но менее успешны при отказе от шума.

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

Ссылки

[1] Orfanidis, Sophocles J. Введение в обработку сигналов. Englewood Cliffs, Нью-Джерси: Prentice Hall, 1996.

[2] Шафер, Рональд. "Что такое фильтр Савицкого-Голая? [Примечания к лекциям] ". Журнал IEEE Signal Processing Magazine 28, № 4 (июль 2011): 111-17. https://doi.org/10.1109/MSP.2011.941097.

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

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

.

См. также

| | |

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