exponenta event banner

sgolayfilt

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

Описание

пример

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

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

свернуть все

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

Совет

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

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

Ссылки

[1] Орфанидис, Софокл Дж. Введение в обработку сигналов. Энглвуд Клиффс, Нью-Джерси: Прентис Холл, 1996.

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

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

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.

См. также

| | |

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