реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Выделение постоянной составляющей на фоне шума, Как сделать?
R.A.K.
сообщение Sep 24 2011, 16:02
Сообщение #1


Участник
*

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



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

Точно известен интервал (+- 5*10^-6), в котором может находиться величина постоянной составляющей (этот интервал показан на рисунке).
Надо определить величину постоянной составляющей. За минимальное время с начала обработки величина постоянной составляющей должна быть определена с точностью около около +- 1*10^-8, при последующей обработке точность должна возрастать (чем больше - тем лучше).

С линейной фильтрацей пока у меня что-то плохо получается. В ЦОС я не силен, поэтому пробовал каскадное включение 10 БИХ-фильтров 1-го порядка (Yn + Yn*(K-1) = K*Xn при K=1/2^6) - слишом много времени уходит (где-то 1500-2000 с) и импульсы мешают.
Пробовал вырезать участки с импульсами и потом "сшитый" сигнал пропускать через ФНЧ, но что-то не очень помогает.
Медианный фильтр не пробовал, т.к. не знаю какого размера окна взять, а при очень большом окне он постоянку исказит (наверное).

Посоветуйте как это лучше (и правильней) сделать.

Сообщение отредактировал R.A.K. - Sep 24 2011, 16:13
Go to the top of the page
 
+Quote Post
SPACUM
сообщение Sep 25 2011, 14:39
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 161
Регистрация: 22-06-09
Из: Москва
Пользователь №: 50 531



Цитата(R.A.K. @ Sep 24 2011, 20:02) *
Есть оцифрованный сигнал в виде постоянной составляющей с шумом и импульсными помехами (по оси х - время в секундах).

К сожалению не все выбросы компенсируются противоположными, поэтому фильтрация фнч будет с медленными выбросами.
Единственное хорошее свойство Вашего сигнала это то, что выбросов в выборке немного.
Главное для каждой точки определить выброс это или нет и в случае выброса заменить ближайшим невыбросным значением.
Для этого достаточно знать приближенное значение измеряемой в настоящее время величины и дисперсию присутствующего в настоящее время шума.
Все значения за пределами трех сигм следует считать выбросами.
Таким образом предлагаемый алгоритм такой: Берем выборку 100-200 точек, по предыдущей грубой оценке измеряемой величины и дисперсии определяем новые уточненные значения. итд. Полученные грубые значения можно усреднить или сгладить скользящим средним.
Остается вопрос о первом измерении и о продолжении измерений после изменения измеряемого значения.
Для первого измерения можно использовать просто среднее выборки или среднее участка выборки размах значений которого не превышает Вашего диапазона, а вместо трех сигм Ваш диапазон. Смену значения можно определить по выкидыванию скажем 30% отсчетов.
Если математика поджимает сигмой можете назвать средневыпрямленное значение.

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

Ничего лучшего в голову не приходит.


--------------------
Ты можешь знать все что угодно, но пока ты не доказал это на практике, ты не знаешь ничего!© Ричард Бах
Go to the top of the page
 
+Quote Post
psL
сообщение Sep 26 2011, 06:28
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 5-08-05
Пользователь №: 7 390



http://electronix.ru/forum/index.php?showtopic=54351
Go to the top of the page
 
+Quote Post
ViKo
сообщение Sep 26 2011, 07:24
Сообщение #4


Универсальный солдатик
******

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



Я делал бы так же, как написал GetSmart в последнем сообщении в той теме, ссылку на которую выдал psL - сложил бы все выборки и поделил на их количество. По-моему, лучшей фильтрации в природе не существует. Для простоты можно взять 4096 точек, потом и делить не придется.
Ну, или то, что там обсуждалось вначале. Это называется экспоненциальный фильтр. Ресурсов меньше потребуется. Чтобы выбросы меньше влияли на результат, их как-то выделять и отбрасывать.
Go to the top of the page
 
+Quote Post
xemul
сообщение Sep 26 2011, 08:08
Сообщение #5



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(R.A.K. @ Sep 24 2011, 20:02) *
Медианный фильтр не пробовал, т.к. не знаю какого размера окна взять,

Оцените максимальную плотность выбросов. Если на 1 выброс гарантированно приходятся два нормальных отсчёта, будет достаточно медианы с окном 3.
Цитата
а при очень большом окне он постоянку исказит (наверное).

На картинке относительная амплитуда выбросов до 3.5*10^-4. При стремлении к 1*10^-8 один такой выброс 1-ым порядком придётся размазать по ~ 35000 отсчётам. Сомневаюсь, что медианный фильтр сможет нагадить больше, ну и он больше ФЧХ ломает.
Go to the top of the page
 
+Quote Post
R.A.K.
сообщение Sep 26 2011, 09:26
Сообщение #6


Участник
*

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



SPACUM, спасибо за совет, попробую.

Цитата(ViKo @ Sep 26 2011, 11:24) *
Я делал бы так же, как написал GetSmart в последнем сообщении в той теме...
Это скользящее среднее. Пробовал в первую очередь. Результаты при приемлемом (т.е. 1024, например) размере окна очень плохие (а для меня больше 2000 уже совсем не приемлемо).
Кстати частный случай ДПФ в виде алгоритма Герцеля для n=0 именно в скользящее среднее и вырождается.

Цитата(ViKo @ Sep 26 2011, 11:24) *
Ну, или то, что там обсуждалось вначале. Это называется экспоненциальный фильтр.
Это его экономисты и статисты так называют. Я же его обозвал БИХ-фильтр 1-го порядка (см. 1-ый пост) - он рекурсивный, значит БИХ.

P.S. Да! Забыл уточнить - частота дискретизации 1 Гц. Так что вариант скользящего среднего на 4096 - это больше часа. Надо где-то за 500-1000 отсчетов вычислить постоянку с приемлемой точностью (а вообще чем быстрее тем лучше). У меня только через 1500-2000 кое-как получается.

Цитата(xemul @ Sep 26 2011, 12:08) *
Оцените максимальную плотность выбросов. Если на 1 выброс гарантированно приходятся два нормальных отсчёта, будет достаточно медианы с окном 3.

Нет. Есть места где 2 выброса (1 вверх, 1 вниз) идут друг за другом . Окна на 3 мало.
К тому же моя картинка - это пока частный случай. Есть предположение, что в других ситуациях шум помощнее будет, а выбросы будут чаще... sad.gif
Мы же говорим о применении медианного фильтра ко всем отсчетам, так? При большем размере окна медианный фильтр постоянку может испортить (вроде бы...)
Go to the top of the page
 
+Quote Post
Tanya
сообщение Sep 26 2011, 09:46
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(R.A.K. @ Sep 26 2011, 13:13) *
P.S. Да! Забыл уточнить - частота дискретизации 1 Гц. Так что вариант скользящего среднего на 4096 - это больше часа. Надо где-то за 500-1000 отсчетов вычислить постоянку с приемлемой точностью (а вообще чем быстрее тем лучше). У меня только через 1500-2000 кое-как получается.

Основной вопрос - что Вы называете "истинной величиной постоянной составляющей". Если мы ничего не знаем априорно о том, что нам дается в виде отсчетов, то, естественно, это будет математическое ожидание - среднее без весов в данном случае.
Если же Вы знаете, что есть наводки (помехи), то их нужно убрать, но для этого нужно знать, что это такое. Соответственно и методы могут быть разными. Мне кажется, что наиболее разумно в данном случае исследовать функцию распределения и выбрасывать отсчеты, которые... (тут можно придумать несколько способов) искажают ее - отклоняют от Гаусса или Пуассона... Если имеется априорная уверенность. Можно, наверное, даже отбрасывать, используя "узость" распределения как целевую функцию. Смотреть можно на производную от сигмы по ширине оставленного коридора.
Примерно такое уже предлагали выше - отбрасывать все, что не влезает в 3 сигмы. Но тут нужно считать вероятность... При большом числе отсчетов вероятность попадания шума в 3 сигмы уже ненулевая, но какой будет вклад от таких отсчетов в среднее...
Go to the top of the page
 
+Quote Post
ViKo
сообщение Sep 26 2011, 10:56
Сообщение #8


Универсальный солдатик
******

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



Цитата(R.A.K. @ Sep 26 2011, 12:26) *
Это скользящее среднее. Пробовал в первую очередь. Результаты при приемлемом (т.е. 1024, например) размере окна очень плохие (а для меня больше 2000 уже совсем не приемлемо).

Думаю, ничего лучшего быть не может, если нужно по конкретному кадру данных найти среднее значение. Другое дело, если выборки идут постоянно...
Цитата
Это его экономисты и статисты так называют. Я же его обозвал БИХ-фильтр 1-го порядка (см. 1-ый пост) - он рекурсивный, значит БИХ.

Р. Лайонс его называет "устройство экспоненциального усреднения". У него импульсная характеристика экспоненциальная. БИХ, конечно.
Цитата
P.S. Да! Забыл уточнить - частота дискретизации 1 Гц. Так что вариант скользящего среднего на 4096 - это больше часа. Надо где-то за 500-1000 отсчетов вычислить постоянку с приемлемой точностью (а вообще чем быстрее тем лучше). У меня только через 1500-2000 кое-как получается.

Фильтр с БИХ может долго подбираться к своему результату, но потом будет с каждым отсчетом выдавать приемлемые числа.
Судя по картинке, у вас явно не шум с гауссовским распределением, а импульсные помехи. Нужно научиться их выделять, отбрасывать. А тогда и фильтр НЧ будет работать намного качественнее.
Go to the top of the page
 
+Quote Post
R.A.K.
сообщение Sep 26 2011, 11:02
Сообщение #9


Участник
*

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



Цитата(Tanya @ Sep 26 2011, 13:46) *
Основной вопрос - что Вы называете "истинной величиной постоянной составляющей". Если мы ничего не знаем априорно о том, что нам дается в виде отсчетов, то, естественно, это будет математическое ожидание - среднее без весов в данном случае.
Если же Вы знаете, что есть наводки (помехи), то их нужно убрать, но для этого нужно знать, что это такое. Соответственно и методы могут быть разными.

Суть задачи - имеется входной цифровой сигнал с частотой около 1 кГц, подверженный фазовой модуляции шумом. Частота исходного сигнала известна с точностью +- 5ppm. Необходимо восстановить исходную частоту сигнала. Начинать можно где-то с +-0,5 ppm.
Имеющиеся отсчеты - это выраженный в виде числа тактов опорного генератора (около 100 МГц) интервал между 1000 входными "зашумленными" импульсами.
Шум, модулирующий фазу, вообще говоря не очень стационарный, кроме того имеет медленно меняющуюся постоянную составляющую. Исключить или уменьшить влияние шума на исходный сигнал нельзя.

То, что пытаюсь делать сейчас - это по сути измерение мгновенной частоты с последующим усреднением (НЧ-фильтрацией) из расчета на то, что влияние дрейфа постоянной составляющей шума (т.е. ее прозводной на мгновенное значение частоты) будет мало.
Другого в голову не приходит. Пробовал строить цифровую ФАПЧ (DCO и фазовый детектор в ПЛИС, контурный фильтр софтовый), но пока получилось не хуже / не лучше. Поэтому решил перейти на фильтрацию. С мыслью, что какие-нибудь экзотические алгоритмы (возможно какая-то нелинейная обработка) дадут лучший результат, чем простая линейная фильтрация.

Вот. sm.gif
Может что подскажите?


Цитата(ViKo @ Sep 26 2011, 14:56) *
Судя по картинке, у вас явно не шум с гауссовским распределением, а импульсные помехи. Нужно научиться их выделять, отбрасывать. А тогда и фильтр НЧ будет работать намного качественнее.

Работаю над этим sm.gif
Go to the top of the page
 
+Quote Post
xemul
сообщение Sep 26 2011, 11:25
Сообщение #10



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(R.A.K. @ Sep 26 2011, 13:26) *
Нет. Есть места где 2 выброса (1 вверх, 1 вниз) идут друг за другом . Окна на 3 мало.
К тому же моя картинка - это пока частный случай. Есть предположение, что в других ситуациях шум помощнее будет, а выбросы будут чаще... sad.gif
Мы же говорим о применении медианного фильтра ко всем отсчетам, так? При большем размере окна медианный фильтр постоянку может испортить (вроде бы...)

Я не предлагал использовать медиану по трём точкам, а только обозначил простейший способ для выбора её окна.
Возможен другой вариант - две окна разной ширины строите по росту; если новый отсчёт в каждом окне оказывается крайним, помечаете его, как возможный выброс.
А можно ли применять медиану ко всем отсчётам, решать Вам - уж очень оно зависит от характера сигнала, а по приведённой картинке что-то разобрать сложно.
Цитата(ViKo @ Sep 26 2011, 14:56) *
Думаю, ничего лучшего быть не может, если нужно по конкретному кадру данных найти среднее значение.

Если нужно только найти среднее, а не восстановить сигнал, то БПФ может оказаться симпатичнее.
Если полоса сигнала известна, то появление внеполосных составляющих можно использовать, н-р, признаком включения медианы.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Sep 26 2011, 11:49
Сообщение #11


Универсальный солдатик
******

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



Цитата(xemul @ Sep 26 2011, 14:25) *
Если нужно только найти среднее, а не восстановить сигнал, то БПФ может оказаться симпатичнее.
Если полоса сигнала известна, то появление внеполосных составляющих можно использовать, н-р, признаком включения медианы.

Для вычисления постоянной составляющей БПФ (ДПФ) превращается в тот же фильтр КИХ.
А как по появлению высоких частот в БПФ найти тот отсчет, что исказил спектр - для меня загадка. Разве что вычислять БПФ по каждому отсчету.
В-принципе, SPACUM и Tanya уже дали все необходимые установки - найти пороги, за пределы которых сигнал вылазит из-за помех. Сигмы и т.п. sm.gif Их же тоже можно фильтрами выделить. Пороги с запасом задать, к примеру. Потом отсчеты, вылазящие за пороги, отбросить или подменить соседними.
Go to the top of the page
 
+Quote Post
xemul
сообщение Sep 26 2011, 11:58
Сообщение #12



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(ViKo @ Sep 26 2011, 15:49) *
Для вычисления постоянной составляющей БПФ (ДПФ) превращается в тот же фильтр КИХ.

Безусловно, но наличие/отсутствие выброса будет видно невооружённым глазом.
Цитата
А как по появлению высоких частот в БПФ найти тот отсчет, что исказил спектр - для меня загадка.

Что ж тут загадочного - БПФ пересчитывается для каждого нового отсчёта.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Sep 26 2011, 12:02
Сообщение #13


Универсальный солдатик
******

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



Цитата(xemul @ Sep 26 2011, 14:58) *
Что ж тут загадочного - БПФ пересчитывается для каждого нового отсчёта.

Да-да, я уже понял вашу мысль. Все-таки, это как-то накладно.
Go to the top of the page
 
+Quote Post
xemul
сообщение Sep 26 2011, 12:05
Сообщение #14



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(ViKo @ Sep 26 2011, 16:02) *
Да-да, я уже понял вашу мысль. Все-таки, это как-то накладно.

Пересчитать 1 (один) столбец матрицы сложнее сигм, динамических порогов или цепочки из 10 фильтров? Ну тады ой...
Go to the top of the page
 
+Quote Post
R.A.K.
сообщение Sep 26 2011, 12:22
Сообщение #15


Участник
*

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



Товарищи, ДПФ по полной не нужно. Мне нужен только отсчет спектральной плотности только в одной точке - на нулевой частоте. А этом случае ДПФ (а также в случае преоб. Фурье для непрерывного сигнала) получаем просто среднее значение. Усреднение. У меня усреднение приемлемого результата не дает. Пробовал окно на 1000 (и кажись еще на 2000) отсчетов. На выходе сигнал весьма грязненький.

Суть задачи уже озвучил выше.

Может в самой методе чего-то не так?
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 08:59
Рейтинг@Mail.ru


Страница сгенерированна за 0.01521 секунд с 7
ELECTRONIX ©2004-2016