|
|
  |
Выделение постоянной составляющей на фоне шума, Как сделать? |
|
|
Guest_@Ark_*
|
Sep 26 2011, 12:35
|
Guests

|
Цитата Я делал бы так же, как написал GetSmart в последнем сообщении в той теме, ссылку на которую выдал psL - сложил бы все выборки и поделил на их количество. По-моему, лучшей фильтрации в природе не существует... Этот же алгоритм можно реализовать немного по-другому. Складываются не абсолютные значения выборок, а их отклонения от среднего значения. Среднее, в данном случае - это постоянное значение для всего процесса суммирования до некоторого момента времени. Стартовое значение среднего можно выбрать произольно. Затем оно будет скорректировано в процессе. Поскольку суммируются значения со знаком, то текущее значение суммы будет колебаться вблизи нулевого значения. Количество выборок при таком суммировании не нужно ограничивать, а сами значения выборок не нужно хранить. Пока значение суммы по модулю не выходит за заданные нами пределы, можно считать, что выбранное среднее значение соответствует реальному среднему с заданной точностью. Как только сумма превысит заданный предел (по модулю) - включается счетчик сэмплов. Если в течение заданного времени (заданного количества сэмплов) отклонение не вернулась в прежний диапазон - корректируем текущее среднее значение, обнуляем текущую сумму. И продолжаем суммирование, используя уже новое среднее...
|
|
|
|
|
Sep 26 2011, 12:52
|
Местный
  
Группа: Свой
Сообщений: 221
Регистрация: 10-12-05
Из: Украина
Пользователь №: 12 052

|
Цитата(SPACUM @ Sep 25 2011, 16:39)  Главное для каждой точки определить выброс это или нет и в случае выброса заменить ближайшим невыбросным значением. Для этого достаточно знать приближенное значение измеряемой в настоящее время величины и дисперсию присутствующего в настоящее время шума. Все значения за пределами трех сигм следует считать выбросами. Ничего лучшего в голову не приходит. Очень правильный алгоритм. Нельзя фильтровать усреднением, если не удалены импульсные помехи, кот. нужно считать промахами. Тем более, если хочется такую высокую точность. А промах - это не три, а четыре сигмы и более. И ближайшим значением заменять не нужно - просто - не учитывать.
|
|
|
|
|
Sep 26 2011, 13:07
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(R.A.K. @ Sep 26 2011, 16:22)  Может в самой методе чего-то не так? Может быть. Я, н-р, не понимаю, как при частоте выборок 1 Гц можно восстановить частоту сигнала 1 кГц. Или Вам достаточно "среднего по больнице" за тысячу периодов? Если отвлечься от моих непоняток, то задача распадается на исключение из выборки отсчётов с неправильной динамикой (выбросов) и на расчёт собственно среднего значения выборки. Если делать скользящее БПФ (ДПФ), то попадание выброса в его окно приведёт к появлению бинов в правой части спектра - имхо, вполне наглядный признак выброса. Что делать с таким отсчётом, думайте сами, но, вероятно, его стОит исключить из расчёта среднего значения. Если Вас не устраивает "просто среднее значение" на выходе БПФ (ДПФ), придётся придумывать какую-нибудь более сложную модель, которая учитывает, н-р, предысторию или температуру, напряжение, фазу Луны... , т.к. для одного набора данных "просто среднее значение" будет совпадать со средним значением, посчитанным более другим образом.
|
|
|
|
|
Sep 26 2011, 13:11
|
Знающий
   
Группа: Участник
Сообщений: 674
Регистрация: 26-08-05
Пользователь №: 7 997

|
Цитата(анатолий @ Sep 26 2011, 15:52)  Очень правильный алгоритм. Нельзя фильтровать усреднением, если не удалены импульсные помехи, кот. нужно считать промахами. Тем более, если хочется такую высокую точность. А промах - это не три, а четыре сигмы и более. И ближайшим значением заменять не нужно - просто - не учитывать. По-моему, лучший результат даст, все-таки, КИХ, только не скользящего среднего, а с нормально подобранным окном. Это снизит влияние и импульсных помех. Окно должно обеспечить затухание 80-90 дБ (это в случае, если предварительно из сигнала вычесть среднее для сброса разрядности до 16 бит, а то 160 дБ это многовато. *** Можно несколько раз (5-6) повторить КИХ скользящего среднего, если это менее затратно, чтобы опустить уровень затухания до 80-90 дБ.
Сообщение отредактировал sup-sup - Sep 26 2011, 13:28
|
|
|
|
|
Sep 26 2011, 13:52
|
Гуру
     
Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883

|
Цитата(sup-sup @ Sep 26 2011, 17:11)  По-моему, лучший результат даст, все-таки, КИХ, только не скользящего среднего, а с нормально подобранным окном. Это снизит влияние и импульсных помех. Зачем включать помехи в результат? Фильтр (можно разными словами называть) тут должен быть нелинейным. И фильтр (настоящий) тут совсем не нужен. Точки можно перетасовывать как угодно - результат, который ищет автор, от этого не зависит. И никакие вычислительные "сложности" автору не страшны - за час он все, что хочет, посчитает.
|
|
|
|
|
Sep 26 2011, 14:08
|
Участник

Группа: Validating
Сообщений: 55
Регистрация: 6-04-11
Пользователь №: 64 180

|
Цитата(xemul @ Sep 26 2011, 17:07)  Может быть. Я, н-р, не понимаю, как при частоте выборок 1 Гц можно восстановить частоту сигнала 1 кГц. Или Вам достаточно "среднего по больнице" за тысячу периодов? Меряется время между соседними фронтами. Результаты 1000 измерений суммируются и выдаются в виде очередного "сэмпла". Получается каждый сэмпл - среднее значение мгновенной частоты на интервале 1000 периодов. Соответственно частота сэмплов ~ 1 Гц. Если надо, объясню почему взял 1000, а не 1, 15, 538000 ... Мысль про поликлинику не понял (но вы продолжайте развивать). Где и что направильно делаю? Цитата(xemul @ Sep 26 2011, 17:07)  Если Вас не устраивает "просто среднее значение" на выходе БПФ (ДПФ), придётся придумывать какую-нибудь более сложную модель, которая учитывает, н-р, предысторию или температуру, напряжение, фазу Луны... , т.к. для одного набора данных "просто среднее значение" будет совпадать со средним значением, посчитанным более другим образом. Изголяетесь. Вечереет... Дело не "устраивает/неустраивает". Сейчас я истинное значение частоты знаю. Я пытаюсь найти алгоритм, который бы в короткое время выдал близкий к истинному значению результат. Все методы, что пока перепробовал, не дают результат с нужной точностью.
|
|
|
|
|
Sep 26 2011, 14:35
|
Гуру
     
Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883

|
Цитата(ViKo @ Sep 26 2011, 18:08)  Вернемся к медианному фильтру. Если из 3-х текущих отсчетов выбирать средний по величине, то выброс вверх, а за ним сразу вниз оба будут отброшены. Если выбросов больше, сделать фильтр длиннее, выбирать средний из 5-ти отсчетов. Мало? - из 7-ми... А Вы отсортируйте отсчеты, а потом фильтруйте.... Автору нужно получить константу ОДНУ на выходе. Цитата(R.A.K. @ Sep 26 2011, 18:08)  Дело не "устраивает/неустраивает". Сейчас я истинное значение частоты знаю. Я пытаюсь найти алгоритм, который бы в короткое время выдал близкий к истинному значению результат. Все методы, что пока перепробовал, не дают результат с нужной точностью. Как вам везет - Вам ведома истина. Тогда посчитайте (Вы же и дисперсию знаете), сколько отсчетов (минимум) нужно для получения истины, лежащей внутри заданного интервала с заданной вероятностью.
|
|
|
|
|
Sep 26 2011, 14:45
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(Tanya @ Sep 26 2011, 17:35)  А Вы отсортируйте отсчеты, а потом фильтруйте.... Зачем? Наоборот, это же здорово, что "палки" выскакивают изредка. Не обращать на них внимания и призван медианный фильтр. Цитата(Tanya @ Sep 26 2011, 17:35)  Автору нужно получить константу ОДНУ на выходе. Так потом фильтром НЧ и получить ОДНУ.  Цитата(sup-sup @ Sep 26 2011, 17:23)  А почему, действительно, не взять '1'? Так можно было бы раз в мс просчитывать фильтр 1000 раз вместо одного сейчас. И результат был бы быстрее получен. +1 Зачем так неэффективно обходиться с данными? Если, как видим, простое среднее значение не дает нужного результата, а нужны дополнительные меры, вроде медианного фильтра, то, конечно, лучше обрабатывать каждый отсчет.
|
|
|
|
|
Sep 26 2011, 14:58
|
Участник

Группа: Validating
Сообщений: 55
Регистрация: 6-04-11
Пользователь №: 64 180

|
Цитата(sup-sup @ Sep 26 2011, 18:23)  А почему, действительно, не взять '1'? Так можно было бы раз в мс просчитывать фильтр 1000 раз вместо одного сейчас. И результат был бы быстрее получен. Соображения были такие. Допустим измеряется частота входного сигнала ("чистого", без шумов). Измеряемая частота f 0 (входной сигнал). Частота опорного генератора f изм. Интервал между N импульсами входного сигнала равен М импульсов опорного генератора. Значит f 0/N = f имз/(М +- 1). Значит относительная погрешность измерения составит +-1/М. Фактически это что-то типа выбора разрядности АЦП. Попутно замечу, что существует такой метод (по крайней мере я о нем слышал  и подозреваю что ныне он не актуален), когда измеряется медленно-меняющийся сигнал путем наложения на него нормального шума с нулевым средним. В конечном счете это позволяет измерять полезный сигнал более точно, чем это позволяет разрядность АЦП. Цитата(Tanya @ Sep 26 2011, 18:35)  Как вам везет - Вам ведома истина. Истина мне неведома.  Цитата(Tanya @ Sep 26 2011, 18:35)  Тогда посчитайте (Вы же и дисперсию знаете), сколько отсчетов (минимум) нужно для получения истины, лежащей внутри заданного интервала с заданной вероятностью. Не понял  Типа сколько кавалеристов в год будет убито копытом лошади? P.S. Попробовал обработать последовательность: 1) путем отбрасывания пиков 2) путем замены пиков соседним "более достоверным" значением. Улучшения как бэ... есть в плане "грязи" выходного сигнала, но результат получается ниже ожидаемого. Ошибка короче получается.
|
|
|
|
|
Sep 26 2011, 15:05
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(Tanya @ Sep 26 2011, 17:46)  Если Вы отсортируете, то Ваш медианный фильтр не будет фильтровать Ваши "палки" с некоторой вероятностью. Результат должен быть инвариантен к перестановкам. Ничему ничто не должно.  Есть конкретная задача, которую надо решить. А если я синус оцифрую, а потом перемешаю отсчеты, тоже должно потом фильтроваться, и БПФ частоту должно находить? Цитата(R.A.K. @ Sep 26 2011, 17:58)  Попутно замечу, что существует такой метод (по крайней мере я о нем слышал  и подозреваю что ныне он не актуален), когда измеряется медленно-меняющийся сигнал путем наложения на него нормального шума с нулевым средним. В конечном счете это позволяет измерять полезный сигнал более точно, чем это позволяет разрядность АЦП. Называется "рандомизация". Был, есть и будет есть.
|
|
|
|
|
Sep 26 2011, 15:16
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(R.A.K. @ Sep 26 2011, 18:08)  Меряется время между соседними фронтами. Результаты 1000 измерений суммируются и выдаются в виде очередного "сэмпла". Получается каждый сэмпл - среднее значение мгновенной частоты на интервале 1000 периодов. Соответственно частота сэмплов ~ 1 Гц. Это-то я понял. Если по усреднению 1000 периодов получаются выбросы на 10^-4, значит из этой тысячи один крив на 10^-1. Или два - на 5*10-2. Или ... Цитата Мысль про поликлинику не понял (но вы продолжайте развивать). Где и что направильно делаю? У Вас на входе уже нечто среднее из шумов, выбросов и полезного сигнала. Оно и было названо "средней температурой по больнице". Может быть есть возможность устранять выбросы ещё в первой тысяче? Цитата Изголяетесь. Вечереет... Дело не "устраивает/неустраивает". Сейчас я истинное значение частоты знаю. Я пытаюсь найти алгоритм, который бы в короткое время выдал близкий к истинному значению результат. Все методы, что пока перепробовал, не дают результат с нужной точностью. Да ни разу. Переведу написанное в предыдущем посте. Арифметическое среднее (первый момент, мат. ожидание), как его не считай, будет одинаковым для одного и того же набора данных. Если есть какая-либо дополнительная информация - о влияющих факторах вроде температуры или напряжения питания, или какие-то закономерности в поведении сигнала, - можно попробовать изобрести модель для интересующего параметра, учитывающую эту информацию. В любом случае Ваш алгоритм, как уже неоднократно и многими говорилось, должен в первую очередь устранять выбросы.
|
|
|
|
|
Sep 26 2011, 15:26
|
Гуру
     
Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883

|
Цитата(ViKo @ Sep 26 2011, 19:05)  Ничему ничто не должно.  Есть конкретная задача, которую надо решить. А если я синус оцифрую, а потом перемешаю отсчеты, тоже должно потом фильтроваться, и БПФ частоту должно находить? Пустые слова какие-то. Задача, которую.... Нет там синуса, нет никакой функции ни от чего. Есть набор чисел. Нужно его статистически обработать. И результат должен быть инвариантен по отношению к перестановкам. Иначе мы не решим конкретную задачу, которую нужно решить. Цитата(ViKo @ Sep 26 2011, 19:05)  Называется "рандомизация". Был, есть и будет есть. Рандомизация, говорите... Если добавить к "сигналу" шум, уменьшим ли мы дисперсию? Эта ария из другой оперы. Информационный шум.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|