Шумоподавление в массивах Matlab - PullRequest
0 голосов
/ 07 декабря 2011

Я использовал медианную фильтрацию в Matlab, чтобы уменьшить шум в массивах.Я рассчитывал скорость и ускорение объекта.Скоростная часть работала нормально, и результат, который я получил, оказался именно таким, как я ожидал.

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

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

Для скоростиЯ использовал vavg=medfilt2(v, [1 5])

Для ускорения я использовал aavg=medfilt2(a, [1 5 ])

Есть ли какой-нибудь другой фильтр, который я должен использовать для получения точных краев?

Существуют ли другие функции фильтра, которыеможет быть полезным?

1 Ответ

1 голос
/ 08 декабря 2011

Получение производной чего-либо усиливает шум, поэтому неудивительно, что у вас возникают проблемы, когда вы смотрите на ускорение сигнала. Вы можете использовать помехоустойчивый метод получения производной. Подробности смотрите на этой странице:

http://www.holoborodko.com/pavel/numerical-methods/numerical-derivative/smooth-low-noise-differentiators/

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

В целом, вы должны думать о характеристиках вашего сигнала и вашего шума. Если вы знаете, что сигнал будет чем-то действительно плавным, то почему бы не приблизить его сначала к обеспечению его плавности? Кажется, что сплайны могут быть подходящими для вас (spline в Matlab).

...