Перейти к содержанию
    

Дребезг параметра на индикаторе, как бороться?

Только что, adnega сказал:

Он берет выборки как попало, а не каждую 10.

Берет-то он их подряд, а выдает как-попало.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

15 minutes ago, Forger said:

Кусочное усреднение группами по 10 и скользящее с окном 10 отчетов дают разные результаты. Разумеется, когда речь идет про изменяющийся сигнал, причем порой скачкообразно.

Сама суть скользящего среднего - постоянное "держание в уме" этого самого среднего значения. Переходя на кусочные расчеты группами всегда будет теряться предыдущий накопленный результат среднего значения.

 А цирк оказывается не сбежал :biggrin:

Удачи! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, ViKo said:

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

Нет, неодинаковый и очень сильно зависит от входного сигнала. Проверить легко на листочке бумаги.

 

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

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

2 minutes ago, RobFPGA said:

 А цирк оказывается не сбежал :biggrin:

Вы еще успеете, поэтому не отвлекайтесь на эту тему, а то не успеете. 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что касается индикации, то выдавать числа на индикатор чаще 10 раз в секунду нет смысла. Время реакции человека 0,1 с. Следовательно, измерять можно сигнал с полосой 5 Гц. Если сигнал медленный, можно и нужно фильтровать. Но скакать индикатор будет, как ни фильтруй. adnega привел хороший пример с числами 9,9 и 10,1. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

44 минуты назад, Forger сказал:

скользящее каждый отчет требует одно вычитание, одно сложение и всего одно деление.

По словесному описанию это больше на БИХ похоже чем на скользящее среднее ;)

Есть формула или исходник?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

1 minute ago, ViKo said:

Если сигнал медленный, можно и нужно фильтровать.

Сигнал может медленный, но шумный. Да еще и наложится входной шум аналоговой части, АЦП и даже опорника.

Дополнительная фильтрация значительно снижает этот шум. А шум не имеет - хрен пойми какой у него спектр в каждом отдельном случае. 

С таким сигналом отлично справляется скользящее среднее. Давит его на раз-два.

 

1 minute ago, ViKo said:

Но скакать индикатор будет, как ни фильтруй. adnega привел хороший пример с числами 9,9 и 10,1. 

С подобной фильтрацией шума заметно меньше. А если не жадничать с размером окна, если и будут меняться, но уже не будут так раздражать, как для случая без фильтра.

Работает крайне быстро, но жрет ОЗУ.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 minutes ago, adnega said:

По словесному описанию это больше на БИХ похоже чем на скользящее среднее ;)

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

Короче, суть простая: нет никакого смысла в каждом отчете суммировать ВСЕ отчеты из всего окна. Поскольку изменяется только первый отчет в окне (выпадает из общей суммы) и последний (добавляется к сумме)

Этот факт и используется для оптимизации. В итоге производительность этого фильтра практически не зависит от размера окна. Хранящиеся отчеты никуда не сдвигаются в пределах массива окна, "бегает" только указатель (индекс).

Или вы не знали что так можно? ;)

 

Если что, идея не моя. Поэтому смело выкладываю.

 

 

Quote

Есть формула или исходник?

Есть - шаблон на C++ под любые типы данных и размер окна. Но отличники с красными дипломами сами могут себе такой же настрочить :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

26 минут назад, Forger сказал:

Или вы не знали что так можно? ;)

С плавающей точкой тоже работает ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, adnega said:

С плавающей точкой тоже работает ;)

Разумеется. 

Но использую его очень редко, поскольку в основном входные данные идут целочисленные. Да и места в озу они занимают меньше, чем плавучка.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 минуты назад, Forger сказал:

Разумеется.

Что выведет этот код?

	volatile float x = 0.0f;
	for(int i = 0; i < 1000000; i++) x += 0.1f;
	x -= 100000.0f;
	printf("r = %f\n", x);

Неужели 0?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, adnega сказал:

По словесному описанию это больше на БИХ похоже чем на скользящее среднее ;)

Есть формула или исходник?

У Лайонса всё это описано, в разделе: Каскадные интеграторы - гребенчатые фильтры (CIC). Конкретно описаны рекурсивные фильтры скользящего среднего в разделе 10.5.1. 

1 час назад, Forger сказал:

А шум не имеет - хрен пойми какой у него спектр в каждом отдельном случае

Нас интересует спектр сигнала, а не шума.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, ViKo said:

Нас интересует спектр сигнала, а не шума.

Начхать на спектр сигнала, если последние цифры на табло "пляшут" именно от шума (АЦП, усилителя на входе).

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 минут назад, ViKo сказал:

Нас интересует спектр сигнала, а не шума.

Какой спектр, если Forger ничего кроме постоянной составляющей не интересует/не знает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

31 minutes ago, adnega said:

Какой спектр,

... так говорят, когда заканчиваются аргументы.

 

 

Есть что по теме? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 минуту назад, Forger сказал:

адекватный постам цвет

	volatile float x = 0.0f;
	for(int i = 0; i < 1000000; i++) x += 0.1f;
	x -= 100000.0f;
	printf("r = %f\n", x);

Какой результат? У меня

Цитата

r = 958.343750

Аттестат средней школы тоже возвращать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...