Ваш вопрос зажил отдельно от Вас ))
Какой блок-то ? freq_measure в util.lib
Ваш вопрос зажил отдельно от Вас ))
Какой блок-то ? freq_measure в util.lib
Можно ссылку на источник информации о "максимальной точности"?
Я приводил пример, когда:
И где хвалёная "точность" по всего двум импульсам? Там человеку 3 секунд не хватает. А тут предлагается "по двум точкам оценивать скорость".
А чего же этот способ везде используют?
https://en.wikipedia.org/wiki/Exponential_smoothing
Переводить слова "rule of thumb" нужно?Exponential smoothing is a rule of thumb technique for smoothing time series data, particularly for recursively applying as many as three low-pass filters with exponential window functions. Such techniques have broad application that is not intended to be strictly accurate or reliable for every situation. It is an easily learned and easily applied procedure for approximately calculating or recalling some value, or for making some determination based on prior assumptions by the user, such as seasonality...
А теперь давайте поищем в wikipedia что-нибудь на тему freq_measure?
Размерность результата -- "импульсы/сек".
У всех трёх переменных last1m, last1h, last1d одинаковая размерность.
Чего тут неопределённого-то?
Если расход стабилен, то все три переменные будут одинаковые.
Если прорвало трубу, то показатель "last1m" быстро поползёт вверх, а last1d будет какое-то время на старом значении.
Я. Просто я.
Хоть я и программист, но не забыл физику и математику.
Обратите внимание на размерность частоты : Гц. Они же с^-1
А в какой момент мы получаем информацию об очередном герце ? только по фронту импульса.
В другие моменты мы может только фантазировать.
И только в момент очередного "герца" мы может получить информацию о самом последнем и наисвежайшем интервале между последними "герцами"
Ключевые слова. "Там человеку .. не хватает". Другим хватает.
Про меня (и Вас) там тоже ничего нет. И про суслика нет. А он есть.
-------------------------------------
Вот Вам генератор
t(in:=not t.q, pt := t#1s);
...просто прямую частоты. Прям в визуализации. Прям в эмуляции. (на незначительные колебания глаза закрою ессно, всеж нг только/только)))
Увеличим время раза в два - поищем снижение прямой примерно на столько же.
Дикие люди. Чего с них взять.
Последний раз редактировалось Валенок; 11.01.2016 в 01:38.
Герц - частота повторения сигнала во временном промежутке = 1 секунде.
Как можно определить частоту по двум фронтам сигнала с неизвестным временем ?
И еще вопрос, в течении секунды несколько раз открывали и закрывали краны и расход менялся, то есть мы за секунду получаем не меандр а хаотичные во времени импульсы - на кой тут мерять частоту, если она изменчива ?
Теорему Котельникова помните?
Перевожу с русского на русский: в реальном сигнале бесконечно много частотных гармоник.Теорема Котельникова: ...Разумеется, реальные сигналы (например, звук на цифровом носителе) не обладают такими свойствами, так как они конечны по времени и обычно имеют разрывы во временно́й характеристике. Соответственно, ширина их спектра бесконечна.
И их там много не из-за того, что "не бывает источника постоянной частоты", а из-за того, что невозможно измерить сигнал бесконечной длительности.
Не существует способа <<получить информацию "о герце">>.
Спектр сигнала можно выяснять математически, но "напрямую снимать герцы" невозможно.
Проблема выяснения плотности вероятности является фундаментальной проблемой в науке: https://en.wikipedia.org/wiki/Kernel_density_estimation
Если бы был известен способ "напрямую снимать герцы", он непременно появился бы в этой статье.
Вот что получается у меня в эмуляторе.
Исходный вариант.
усреднение_60с_1Гц.png
Ну, ждать несколько минут "выхода на режим у меня терпения нет", поэтому на двух следующих я показываю 10с-усреднение.
Вот генератор "1Гц"
усреднение_10с_1Гц.png
Вот генератор "2Гц"
усреднение_10с_2Гц.png
Зоркий глаз заметит, что "1Гц" при усреднении получается 0.9Гц (см первую и вторую картинку -- там last1m равно 0.9).
Как же так? А всё просто: глючит CoDeSys -- неправильно работают таймеры.
На графиках красные линии идут раз в минуту.
1-ая картинка: за чуть большее чем 5 минут время насчиталось 289 импульсов.
Т.е. реальная частота заведомо меньше, чем -- 289/(5*60) == 0.96. Результат усреднения -- 0.9
2-ая картинка: за 4 минуты 225 импульсов. 225/(4*60) == 0.93Гц максимум. Результат усреднения -- 0.9
3-я картинка: за 4 минуты 404 импульса. 404/(4*60) == 1.68Гц. Результат усреднения -- 1.6.
Во всех случаях показатель last1m сошёлся к "delta". Переменная delta -- это количество импульсов за "последние 10 секунд".
Тут я опираюсь на то, что если указал T#10s в task configuration, то считаю, что задача раз в 10 секунд и будет выполняться.
Возможно, не стоит доверять task configuration'у, а при усреднениях явно получать текущее время.
Не-не-не, Девид Блейн.
В тех задании сказано "измерять расход" -- надо измерять. И отмазка "частота импульсов изменчива" липовая.
Другое дело, что во многих случаях нужно использовать не сырые измерения, а сглаженные: скользящее среднее, эксп. сглаживание, фильтр низких частот. Все эти механизмы об одном и том же.
Будет ли лучше, если брать показатели "1/интервал_между_последними_импульсами" и сглаживать их? Хз. Но гонять функции даты/времени/математику только ради того, чтобы обработать каждый импульс может и быть расточительным.
не, надо считать количество импульсов в секунду и измерять расход, принять мгновенный расход исходя из времени = 1 секунды и не заморачиваться частотой, которую высчитать невозможно.