что сглаживает в самых основных терминах

17

Что такое сглаживание и как я могу это сделать?

У меня есть массив в Matlab, который является спектром амплитуды речевого сигнала (величина 128 точек FFT). Как мне сгладить это с помощью скользящей средней? Из того, что я понимаю, я должен взять размер окна определенного количества элементов, взять среднее, и это станет новым 1-м элементом. Затем сдвиньте окно вправо на один элемент, возьмите среднее значение, которое станет вторым элементом, и так далее. Это действительно так работает? Я сам не уверен, потому что если я сделаю это, в моем конечном результате у меня будет меньше 128 элементов. Так как же это работает и как это помогает сгладить точки данных? Или есть какой-то другой способ, которым я могу сделать сглаживание данных?

РЕДАКТИРОВАТЬ: ссылка на дополнительный вопрос

Сообщество
источник
для спектра, который вы, вероятно, хотите усреднить (во временном измерении) вместе несколько спектров, а не скользящее среднее вдоль частотной оси одного спектра
эндолит
@endolith оба являются действительными методами. Усреднение в частотной области (иногда называемой периодограммой Даниэля) такое же, как оконное управление во временной области. Усреднение нескольких периодограмм («спектров») является попыткой имитировать усреднение по ансамблю, требуемое для истинной периодограммы (это называется периодограммой Уэлча). Также, что касается семантики, я бы сказал, что «сглаживание» - это не причинная фильтрация нижних частот. См. Фильтрация Калмана против сглаживания Калмана, фильтрация Винера - сглаживание Винера и т. Д. Существует нетривиальное различие, и оно зависит от реализации.
Брайан

Ответы:

23

Сглаживание можно сделать разными способами, но в самых общих и общих терминах это означает, что вы выравниваете сигнал, смешивая его элементы со своими соседями. Вы немного размазываете / размываете сигнал, чтобы избавиться от шума. Например, очень простой метод сглаживания состоит в том, чтобы пересчитать каждый элемент сигнала f(t)до 0,8 от исходного значения плюс 0,1 от каждого из его соседей:

f'(t) = 0.1*f(t-1) + 0.8*f(t) + 0.1*f(t+1)

Обратите внимание, как коэффициенты умножения, или веса, складываются в единицу. Поэтому, если сигнал довольно постоянный, сглаживание не сильно его меняет. Но если сигнал содержал внезапное резкое изменение, то вклад соседей поможет немного прояснить этот шум.

Веса, которые вы используете в этой функции пересчета, можно назвать ядром . Одномерная функция Гаусса или любое другое базовое ядро ​​должно подойти в вашем случае.

Хороший пример одного конкретного вида сглаживания:

Вверху
: сглаженный сигнал Внизу: сглаженный сигнал

введите описание изображения здесь

Примеры нескольких ядер:

введите описание изображения здесь

Junuxx
источник
так это взвешенная скользящая средняя? Это называется размером окна 3? Как насчет 1-го и последнего элемента? И как это можно изменить, если у меня есть массив из 128 элементов, и я хочу использовать окно из 16 или 32 элементов?
@ user13267: Да, можно сказать, что сглаживающее ядро ​​- это взвешенное скользящее среднее. Если вы используете равномерное ядро ​​(см. Второе изображение), это просто обычное скользящее среднее. Вы правы насчет размера окна. Для работы с краями существует три основных подхода: 1) заполнение нулями ваших данных, 2) повторение последнего значения, 3) отражение сигнала. Во всех случаях вы делаете некоторые притворные данные, чтобы ваше ядро ​​не превратилось в ничто.
Junuxx
Нулевой отступ не будет считаться падением в ничто? В конце процесса скользящего среднего мой новый «усредненный» набор данных должен иметь то же количество данных, что и исходный, не так ли? тогда, если я обнулю его в начале или конце или повторю последние данные, не сместит ли это среднее значение по краям массива? И как зеркалирование сигнала поможет с точки зрения количества терминов данных? Есть ли какое-нибудь простое учебное пособие для этого где-нибудь, показывающее, как происходит процесс, скажем, для 32 точек данных и размера окна 4 или 5?
2
Если вы хотите, чтобы ваш сглаженный набор данных имел ту же длину, что и исходный набор данных, вы должны «создать» данные в конечных точках. Любой выбор, который вы делаете для создания этих данных, каким-то образом смещает среднее значение. Обработка данных за пределами границ как зеркала реального набора данных (т. Е. Предполагается, что выборка N + 1 совпадает с N-1, N + 2 = N-2 и т. Д.) Сохранит характеристики частотного спектра концевые части сигнала, в то время как при повторении с нулем или ненулем будет казаться, что все частоты скатываются на концах.
Рассел Борогове
8

В дополнение к хорошему ответу Junuxx я хотел бы добавить несколько заметок.

  • Сглаживание связано с фильтрацией (к сожалению, довольно расплывчатая статья в Википедии ) - вы должны выбрать сглаживатель на основе его свойств.

  • Один из моих любимых - медианный фильтр . Это пример нелинейного фильтра. У него есть некоторые интересные свойства, он сохраняет «ребра» и довольно устойчив при большом шуме.

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


источник
4

Сглаживание подразумевает использование информации из соседних выборок для изменения отношения между соседними выборками. Для конечных векторов на концах нет соседней информации с одной стороны. Вы можете выбрать: не сглаживать / фильтровать концы, принимать более короткий результирующий сглаженный вектор, составлять данные и сглаживать их (зависит от точности / полезности любых прогнозов на концах), или, возможно, использовать разные ядра асимметричного сглаживания в заканчивается (что приводит к сокращению информационного содержания в сигнале в любом случае).

hotpaw2
источник
3

Вы можете найти весь код Matlab для сглаживания фильтра скользящей средней для различной длины отводов. www.gaussianwaves.com/2010/11/moving-average-filter-ma-filter-2/

humourmind
источник
1

Другие упоминали, как вы делаете сглаживание, я хотел бы упомянуть почему сглаживание работает.

Если вы правильно передискретизируете свой сигнал, он будет относительно незначительно отличаться от одного семпла к другому (семпл = временные точки, пиксели и т. Д.), И ожидается, что он будет иметь общий плавный вид. Другими словами, ваш сигнал содержит несколько высоких частот, то есть компоненты сигнала, которые изменяются со скоростью, подобной вашей частоте дискретизации.

Тем не менее, измерения часто искажаются шумом. В первом приближении мы обычно считаем, что шум следует гауссову распределению со средним нулем и определенным стандартным отклонением, которое просто добавляется поверх сигнала.

Чтобы уменьшить шум в нашем сигнале, мы обычно делаем следующие четыре допущения: шум является случайным, не коррелируется между выборками, имеет среднее значение, равное нулю, и сигнал подвергается достаточной избыточной дискретизации. С этими допущениями мы можем использовать фильтр скользящего среднего.

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

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

То, как вы должны определить вес, зависит от шума, сигнала и вычислительной эффективности, и, конечно, от компромисса между избавлением от шума и включением сигнала.

Обратите внимание, что за последние несколько лет была проделана большая работа, чтобы позволить нам ослабить некоторые из четырех допущений, например, путем разработки схем сглаживания с переменными окнами фильтра (анизотропная диффузия) или схем, которые на самом деле не используют окна на всех (нелокальные средства).

Jonas
источник