Целочисленное деление на константу

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25271
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Целочисленное деление на константу

Сообщение КРАМ »

orinoko писал(а):У меня идёт расчёт среднеквадратического значения.
КРАМ писал(а):И что из этого следует?
Это было к тому, что предлагалось умножить на ~328
Ознакомьте нас, пожалуйста, с использумым Вами методом измерения среднеквадратичного значения и оцените точность этого метода....
:wink:
Реклама
orinoko

Re: Целочисленное деление на константу

Сообщение orinoko »

при использовании моего метода расчёта СКЗ, если использовать такой метод деления на 200 (*328 и /65536), то набегает от 0,1 до 0,5% относительной погрешности, в зависимости от уровня напряжения. Разная погрешность, так как у нас целочисленное деление и остаток отбрасывается
Тут правда, появились коррективы начального ТЗ. Делить надо не 3-байтное, а 5-байтное число. Не знаю, чего это я так... Заработался наверное. Так что сорри, если что :oops:
Реклама
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25271
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Целочисленное деление на константу

Сообщение КРАМ »

Я не про метод деления спрашивал, а про метод ИЗМЕРЕНИЯ.
Что меряем, как производим семплирование?
:)
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Re: Целочисленное деление на константу

Сообщение Kavka »

ChipKiller писал(а):откуда вместо X, (X+1) не понял....
Исходная формула врёт на числах кратных 200, начиная с 200, даёт результат на единицу меньше, чем надо.
делимое - результат
199 - 0
200 - 0
201 - 1
И так для всех чисел кратных 200 от 0 до 65535 (больше не проверял).
А добавление 1 просто логично в данном случае. :)
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Реклама
Эиком - электронные компоненты и радиодетали
orinoko

Re: Целочисленное деление на константу

Сообщение orinoko »

КРАМ писал(а):Я не про метод деления спрашивал, а про метод ИЗМЕРЕНИЯ.
Что меряем, как производим семплирование?
:)
семплирование происходит с периодом 100 мкс. Используется внешний 16-разрядный АЦП в режиме двуполярного входа (AD7671). по мере поступления данных происходит накапливание суммы квадратов. при количестве слагаемых = 200 полученное число нужно поделить на 200, потом происходит извлечение корня. Таким образом расчётный период 20 мс.
Реклама
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25271
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Целочисленное деление на константу

Сообщение КРАМ »

А что мешает привести число семплов до степени двойки?
Либо 128, либо 256.
Тогда и делить на 200 не потребуется.
Кстати, совершенно не обязательно постоянно долбить преобразованиями.
Можно накапливать данные в стробоскопическом режиме в кольцевой буфер, а вычисления делать просто в суперлупе с малой скоростью (по потребностям вывода, а не накопления)
Реклама
orinoko

Re: Целочисленное деление на константу

Сообщение orinoko »

у меня счас так и делается, но естественно, результат сильно скачет, так как я не попадаю на расчёт длительности, кратной полупериоду. Поэтому счас приходится делать дополнительные мероприятия, а именно, сначала усреднение 16 результатов (кольцо), а потом на ФНЧ. А вольтметр надо заточить на 50 Гц. Долбить преобразованиями требуется по другим причинам. вычисление СКЗ - это одна из сопутствующих функций. И изменить период семплирования тоже не получится, так как в приборе это время является тактовым для других действий.
Последний раз редактировалось orinoko Сб апр 20, 2013 21:01:59, всего редактировалось 1 раз.
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: Целочисленное деление на константу

Сообщение ChipKiller »

КРАМ писал(а):А что мешает привести число семплов до степени двойки?
..это точно - надуманная проблема и деление здесь излишне....
Kavka писал(а):Исходная формула врёт на числах кратных 200, начиная с 200, даёт результат на единицу меньше, чем надо.
... при больших значениях Х, формула врёт гораздо больше и (X+1) здесь не спасет, а при ((X*328)-(X*82)>>8)>>16 различий с X/200 нет вообще...
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25271
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Целочисленное деление на константу

Сообщение КРАМ »

orinoko писал(а):у меня счас так и делается, но естественно, результат сильно скачет, так как я не попадаю на расчёт длительности, кратной полупериоду. Поэтому счас приходится делать дополнительные мероприятия, а именно, сначала усреднение 16 результатов (кольцо), а потом на ФНЧ. А вольтметр надо заточить на 50 Гц. Долбить преобразованиями требуется по другим причинам. вычисление СКЗ - это одна из сопутствующих функций. И изменить период семплирования тоже не получится, так как в приборе это время является тактовым для других действий.
:facepalm:
Вы выбрали странную архитектуру, а теперь жалуетесь на проблемы...
Опишите задачи - найдется решение...
orinoko

Re: Целочисленное деление на константу

Сообщение orinoko »

Ни разу не пожаловался. Я отвечаю на вопросы. В первом посте я спросил про алгоритм деления на 200. Во втором мне показали ссылку, и меня она устроила.
Вычисление СКЗ напряжения - это функция появилась позже, так как данные всё равно я получаю постоянно. просто решил сделать "красиво".
И, кстати, этот вольтметр уже прошёл гос. метрологическую аттестацию (для постоянного тока). А эта функция - она больше для души (т.е. на данном этапе как "индикатор"). И захотелось улучшить, вот и всё.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25271
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Целочисленное деление на константу

Сообщение КРАМ »

Ладно, не хотите по существу, давайте по форме.
Частота промсети 50 Гц имеет стабильность по ГОСТ 13109-97 - 49,6...50,4 Гц.
Что делает странными Ваши старания относительно точности деления на 200 и вообще...
Сам метод определения СКЗ по временному интегрированию за период без измерения с необходимой точностью этого периода не может быть точнее стабильности частоты измеряемого напряжения.
Либо нужно переходить на частотный метод измерения СКЗ.
:roll:
orinoko

Re: Целочисленное деление на константу

Сообщение orinoko »

Я тут посчитал - при изменении частоты от 49,6 до 50,4 Гц погрешность расчёта СКЗ не превышает 0,6%, что меня вполне устраивает. При данном раскладе можно конечно и не увлекаться точность деления на 200 :). В любом случае это будет лучше, чем есть сейчас. Ну а дальнейшие затраты на улучшение точности уже будут не соизмеримы с результатами этих затрат.
Спасибо за участие в дискусии.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25271
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Целочисленное деление на константу

Сообщение КРАМ »

orinoko писал(а):Я тут посчитал
Это смотря как мерить...
Если когерентно с периодом и с его начала, то да..., а если асинхронно или в произвольной постоянной фазе, то может быть много хуже.
Кстати, при измерении однополярным АЦП еще нужно правильно определить ноль синусоиды, т.е. посчитать ее среднее значение за период. Оттуда можно получить еще одну погрешность....
:cry:
orinoko

Re: Целочисленное деление на константу

Сообщение orinoko »

Если когерентно с периодом и с его начала
Именно наихудший вариант и получается, если начало отсчёта совпадает с началом периода (0 град) или с максимумом (90 град). Чем ближе начало отсчёта к 45 градусам, тем меньше погрешность. При переходе через примерно 45 градусов знак погрешности меняется.
при измерении однополярным АЦП
АЦП у меня с двуполярным входом.
Ответить

Вернуться в «Разные вопросы по МК»