|
Фильтрация входного сигнала. |
|
|
|
Jan 30 2014, 13:18
|
Группа: Участник
Сообщений: 12
Регистрация: 8-01-13
Пользователь №: 75 101

|
Всем доброго времени суток. Прошу прощения, если не в тот раздел, но более подходящего не нашел. Проблема заключается в следующем: Есть поток входных значений, для примера даю выборку из 1000 отсчетов
sampling.rar ( 9.22 килобайт )
Кол-во скачиваний: 164Нужно фильтровать такой поток значений, дабы получить "болтанку" на выходе не более 2-3 единиц по амплитуде. Тупым усреднением этого получается достичь лишь при количестве усредняемых значений близкому к 1000. Можно ли добиться подобного результата с помощью каких-то более серьезных алгоритмов фильтрации и получить при этом время отклика фильтра хотя бы 200-400 сэмплов.
|
|
|
|
|
 |
Ответов
(1 - 14)
Guest_TSerg_*
|
Jan 30 2014, 13:53
|
Guests

|
Сигнал вроде без явного тренда. Вычисляем скользящее среднее и после первых N начинаем отсекать выбросы ( по уровню или по медиане ). Продолжаем вычислять ск. среднее с учетом отбраковки. Длина окна среднего может быть или постоянной или вообще нарастающей. Это, если примитивно.
|
|
|
|
Guest_TSerg_*
|
Jan 30 2014, 14:03
|
Guests

|
Это - да  Но там есть явные выбросы, которые стоит отсекать до усреднения, т.е. сигнал остоит из некоего медленного тренда и редких импульсных помех. Вывод чисто зрительно-телепатический. К примеру, имп. помехи статистически смещены в положительную полуплоскость - это даст смещение полезного сигнала туда же.
|
|
|
|
Guest_TSerg_*
|
Jan 30 2014, 14:08
|
Guests

|
О чем и речь была, либо отсечка по уровню каждого отсчета (если уровень имп. помех заметно отстоит от уровня сигнала), если не желательно окно для медианы.
|
|
|
|
|
Jan 30 2014, 14:49
|
Знающий
   
Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730

|
Цитата(Xtal1 @ Jan 30 2014, 16:18)  Всем доброго времени суток. Прошу прощения, если не в тот раздел, но более подходящего не нашел. Проблема заключается в следующем: Есть поток входных значений, для примера даю выборку из 1000 отсчетов
sampling.rar ( 9.22 килобайт )
Кол-во скачиваний: 164Нужно фильтровать такой поток значений, дабы получить "болтанку" на выходе не более 2-3 единиц по амплитуде. Тупым усреднением этого получается достичь лишь при количестве усредняемых значений близкому к 1000. Можно ли добиться подобного результата с помощью каких-то более серьезных алгоритмов фильтрации и получить при этом время отклика фильтра хотя бы 200-400 сэмплов. Мощность шума в вашем примере ~300. Вам нужна ~1. Т е фильтром вам надо ограничить полосу в 300 раз, те фильтр будет с откликом минимум 600 отсчетов. Медианная фильтрация и др нелинейщина применима в случае сглаживания, но не в случае оценки среднего значения.
|
|
|
|
|
Jan 30 2014, 15:59
|
Местный
  
Группа: Участник
Сообщений: 336
Регистрация: 7-03-07
Из: Петербург
Пользователь №: 25 961

|
QUOTE (ViKo @ Jan 30 2014, 17:05)  сначала нужно запустить медианный фильтр Если допустимы гипотезы, то я думаю, что это дробовой шум аналого-цифрового преобразователя, при постоянном входном сигнале. Медиана с апертурой 15 выборок уменьшает разброс до 3-4, апертура в 27 выборок - до 1.
|
|
|
|
Guest_TSerg_*
|
Jan 30 2014, 16:07
|
Guests

|
Частотный анализ все показывает верно - допустима отсечка по уровню. Чистая медиана (т.е только медиана) при отсутствии импульсных помех приведет к искажениям полезного сигнала. Гистограмма исходного сигнала за вычетом среднего с учетом помех:
Отсечка помех по уровню (взят abs(20)) и центрирование остатка приводят к картине маслом:
С таким сигналом легко справится скользящее среднее.
|
|
|
|
|
Jan 30 2014, 16:34
|
Местный
  
Группа: Участник
Сообщений: 336
Регистрация: 7-03-07
Из: Петербург
Пользователь №: 25 961

|
QUOTE (TSerg @ Jan 30 2014, 19:07)  Чистая медиана (т.е только медиана) при отсутствии импульсных помех приведет к искажениям полезного сигнала. Если не интерпретировать эту гистограмму как три или бимодальное распределение, то медиана даст быструю и наилучшую оценку. Для симметричных шумов медиана даёт несмещённую оценку. А помехи как раз импульсные, просто их относительно много... (P.S. однако видно, что шум не симметричный и выборочное среднее 36636, а медиана даёт 36634. Но это мелочь, по сравнению со скоростью медианы - 15 выборок длина и шума нет
Сообщение отредактировал AndrewN - Jan 30 2014, 16:44
|
|
|
|
Guest_TSerg_*
|
Jan 30 2014, 16:51
|
Guests

|
Это все понятно, но медиана без помех введет нелинейность в сигнал и его оценку, да и ТС сильно беспокоился по поводу 2 дискрет точности выходного сигнала. P.S. >однако видно, что шум не симметричный На крайней картинке надо считать это уже не шумом, а сигналом и поэтому - медиана внесет нелинейность. P.P.S Для реккурентного SMA ( скользящее среднее ) вообще выборка только одна  SMA[i] = SMA[i-1] + (X[i] - X[i-n])/n
|
|
|
|
|
Jan 30 2014, 18:50
|
Местный
  
Группа: Участник
Сообщений: 336
Регистрация: 7-03-07
Из: Петербург
Пользователь №: 25 961

|
QUOTE (TSerg @ Jan 30 2014, 20:51)  ТС сильно беспокоился по поводу 2 дискрет точности выходного сигнала. На графике измеренного сигнала видно, что максимальные отклонения равны около 40 в обе стороны, т.е. чуть больше 5 младших бит могут врать, о +/-2 голова может не болеть. Я поменял окно медианы на 9, даже такое короткое хорошо давит эти +/-40. На мой взгляд (поскольку истинное значение нам никогда не узнать, и приходится довольствоваться оценкой) - задача решена. P.S. А это была хорошая идея про +/-40. Предположив, что 5 и 3 биты сбоят (40 = 0х28 = 10 1000) почти всегда наоборот, я прибавлял или вычитал 40 из выпадающих значений: CODE if (x[k] < 36629) res = x[k] + 40; else if (x[k] > 36640) res = x[k] - 40; else res = x[k]; Результат превзошёл все ожидания. Убедитесь сами. Похоже, что эти биты и в правду сбоят!
Сообщение отредактировал AndrewN - Jan 30 2014, 19:18
|
|
|
|
Guest_TSerg_*
|
Jan 30 2014, 19:17
|
Guests

|
Это разве задача?  Интереснее на ней рассмотреть предельные возможности разных методов.
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|