Plain 167 2 января, 2020 Опубликовано 2 января, 2020 (изменено) · Жалоба 33 минуты назад, Stanislav сказал: много нюансов именно в постановке задачи На входе беззнаковые отсчёты 8 квыб, требуется вычислять преобладающую частоту в полосе 48...62 Гц и СКЗ за её периоды. Изменено 2 января, 2020 пользователем Plain Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Stanislav 0 2 января, 2020 Опубликовано 2 января, 2020 · Жалоба 17 minutes ago, Plain said: На входе беззнаковые отсчёты 8 квыб, требуется вычислять преобладающую частоту в полосе 48...62 Гц и СКЗ за её периоды. Вот видите - а в постановке были совсем другие целевые условия (см. 1-й пост). Для решения задачи в Вашей трактовке следовало бы открыть другую тему... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexRayne 7 2 января, 2020 Опубликовано 2 января, 2020 · Жалоба 13 минут назад, Stanislav сказал: Извиняюсь, что случайно цитировал этот бред ещё раз, а удалить цитату не получается что-то. неслучайно не получается. ибо черный-фин прав, а Вы нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plain 167 2 января, 2020 Опубликовано 2 января, 2020 · Жалоба В 22.12.2018 в 13:01, haker_fox сказал: 7 минут назад, Stanislav сказал: в постановке были совсем другие целевые условия АЦП ... 8 кГц оцифровывает переменный ток ... 48 - 62 Гц ... измеренную частоту и RMS нужно выдавать Идеальных АЦП не существует, поэтому ноль неизвестен, и СКЗ понятно что сугубо за интересующий период. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Stanislav 0 2 января, 2020 Опубликовано 2 января, 2020 · Жалоба Just now, AlexRayne said: неслучайно не получается. ибо черный-фин прав, а Вы нет. Итак, фильтр скользящего среднего вычисляет RMS сигнала, верно? Удалить, кстати, получилось. Когда ЕГЭ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexRayne 7 2 января, 2020 Опубликовано 2 января, 2020 · Жалоба 1 минуту назад, Stanislav сказал: фильтр скользящего среднего вычисляет RMS сигнала, верно? он же написал - на вход подавать квадрат сигнала. что думаете на выходе будет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Stanislav 0 2 января, 2020 Опубликовано 2 января, 2020 (изменено) · Жалоба 2 hours ago, Plain said: Идеальных АЦП не существует, поэтому ноль неизвестен, и СКЗ понятно что сугубо за интересующий период. Ну, вот тут-то главная собака и порылась. Не спаниель, а целый сенбернар. Вопросы на словах просты, как мои тапки: что именно считать RMS сигнала, и что - его оценкой по конечному числу выборок? Вообще-то, есть стандартные определения. Но, когда задают вопросы в темах, часто требуется нечто другое, с точки зрения практической. Оттого и непонятки все. ------------------------------------------------------------------------------------------ 2 hours ago, AlexRayne said: он же написал - на вход подавать квадрат сигнала. что думаете на выходе будет? Чел, ты до сих пор думаешь, что это RMS? Так ЕГЭ в каком году, не стесняйся. ;) Изменено 3 января, 2020 пользователем Stanislav Уточнение Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexRayne 7 2 января, 2020 Опубликовано 2 января, 2020 · Жалоба 11 минут назад, Stanislav сказал: Так ЕГЭ в каком году, не стесняйся. ;) это Вы со своими сверстниками меряйтесь. я пожалуй мимо пройду... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Stanislav 0 2 января, 2020 Опубликовано 2 января, 2020 · Жалоба Лады, не будем ссориться. Но всё же, попробуйте разобраться. Вопрос не так прост, как кажется... ах да, я уже об этом писал ранее. ЗЫ. Да, вот здесь есть кое-что о величинах. Смотреть с 48-й минуты. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 14 3 января, 2020 Опубликовано 3 января, 2020 · Жалоба 3 hours ago, Stanislav said: Оттого и непонятки все. Просто напишите код в MATLAB'е и все ваши "непонятки" сразу станут "понятками".. Это не трудно. Там всего 10 строк кода. Если сумеете "на языке математики" объяснить MATLAB'у что хотите посчитать, то сразу поймете все "ньюансы" вычисления RMS. Я, кстати, для оценки влияния оконной функции Гаусса на точность, именно так и сделал. И приведенный мною график это вполне доказывает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
syoma 1 9 января, 2020 Опубликовано 9 января, 2020 · Жалоба On 12/29/2018 at 2:48 AM, haker_fox said: Если говорить строго, это сетевая частота 50 или 60 Гц. Соответственно, в зависимости от государства, она либо 50+-2 Гц, либо 60 +-2 Гц. Т.е. в пределах 4 Гц она может меняться, чисто теоретически, от измерения к измерению. Я думаю, метод расчета RMS упростится, если знать, что сетевая частота не может сильно меняться от измерения к измерению. В большинстве стран скорость изменения частоты ограничена на уровне 1Гц/с. В странах с повышенным количеством возобновляемой генерации (например в Ирландии), регламентируется 2Гц/с. Наибольшую скорость, что я встречал в требованиях операторов электросетей - 5Гц/с (это они с расчетом на будущее закладывали). По поводу самого алгоритма: Если я не ошибаюсь, у нас алгоритм считает просто: по переходу через 0 каждый раз определяется текущая частота сети(и соответственно ее период). Интервал семплирования для RMS определяется, как длительность сетевого периода, поделенная на 128. Т.е. каждые 20мс/128=156.25мкс(при 50Гц), новый семпл напряжения возводится в квадрат и добавляется в аккумулятор, а квадрат семпла, полученного 128 выборок назад, из него вычитается. То есть в аккумуляторе накопится и постоянно будет наличествовать сумма квадратов 128 выборок за последний период. Сдвигаем на 7 бит вправо, берем корень - вот и получается скользящее RMS с достаточно низкими затратами компьютерного времени хоть каждые 20мс. Следует учесть, что для перехода через 0 и только для этих целей входной сигнал сильно фильтруется цифровым полосовым фильтром, чтобы осталась только первая гармоника. Отдельного входа нет И еще у нас АЦП тоже семплирует на своей повышенной частоте. Семплы для RMS просто выдергиваются из потока без всяких антиалиазинговых фильтров и прочей ерунды. Может и не очень правильно, но на точность никто не жаловался. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 9 января, 2020 Опубликовано 9 января, 2020 · Жалоба 1 hour ago, syoma said: По поводу самого алгоритма: Интересный подход! Спасибо, внесу в копилку знаний) Правда железка ужедавно работает... 1 hour ago, syoma said: что сетевая частота не может сильно меняться от измерения к измерению. И да, если не ошибаюсь, абсолютная погрешность не более +- 0.5 Гц... вроде точно меньше 1 Гц. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
syoma 1 10 января, 2020 Опубликовано 10 января, 2020 · Жалоба 19 hours ago, haker_fox said: И да, если не ошибаюсь, абсолютная погрешность не более +- 0.5 Гц... вроде точно меньше 1 Гц. Ну нет. Частоту предписывают держать в этих пределах, но реально там может быть намного хуже. Опять же не помню какой стандарт, но мы закладываем вариации по частоте +-3 Гц. В некоторых странах говорят так:+-1Гц - может бывать постоянно. +-2Гц - в течении нескольких секунд (обычно это происходит во время жестких аварий с серьезной потерей генерации, пока аварийная защита не отключит поврежденный участок и не вернет частоту на место). Больше 5% отклонение - можете спокойно вырубаться. Это требование критично для тех, кто участвует в поддержании стабильности сети, так как важно, чтобы эти вещи не отваливались в то время, когда они нужны больше всего. Если у вас бытовое устройство, то можете брать и +-0.5Гц. Есть же стандарт на это: ГОСТ 32144-2013 (CENELEC ЕN 50160:2010) Quote - отклонение частоты в синхронизированных системах электроснабжения не должно превышать ±0,2 Гц в течение 95% времени интервала в одну неделю и ±0,4 Гц в течение 100% времени интервала в одну неделю; - отклонение частоты в изолированных системах электроснабжения с автономными генераторными установками, не подключенных к синхронизированным системам передачи электрической энергии, не должно превышать ±1 Гц в течение 95% времени интервала в одну неделю и ±5 Гц в течение 100% времени интервала в одну неделю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ivan2006 0 2 февраля, 2020 Опубликовано 2 февраля, 2020 · Жалоба На днях столкнулся с задачей измерения RMS переменного тока 40-70 Гц (без необходимости измерения частоты). Использовал высказанные в этой ветке идеи, и решил выложить сюда решение, авось кому пригодится. Расчёт делаю за интервал около 0.1с. Начал с моделирования на тестовых данных – 256 отсчётов за 0.1с. Получилось, что если считать RMS тупо по формуле как среднее суммы квадратов, то за интервал 0.1с из-за непопадания в период может возникнуть ошибка до 1.5%. Расчёт с использованием оконной функции снижает максимальную ошибку до 0.5%. Наличие гармоник в несколько сот Гц на результат расчёта не влияет. Частоту сэмплирования АЦП выбрал 1/64 МГц = 15.6кГц. Суммирую каждые 6 отсчётов АЦП, чтобы получить всего 256 точек за 0.1с. Если совсем точно, то такое усреднение – это фильтр нижних частот, который немного уменьшает амплитуду сигнала. В данном случае амплитуда 50Гц уменьшается на 0.06%. Вот формула: Spoiler FREQUENCY = 50.0 FS = 1.0e6 / 64 OVERSAMPLE = 6 omega = 2 * math.pi * FREQUENCY / FS OVERSAMPLE_MAGNITUDE = (1.0 / OVERSAMPLE) * math.sin(omega * OVERSAMPLE / 2) / math.sin(omega / 2) print(OVERSAMPLE_MAGNITUDE) Выбрал оконную функцию Блэкмана-Харриса (понравилась картинка). Расчёты показывают, что выбор оконной функции на результат особо не влияет. В нормировку функции сразу включил поправку 0.06 % на усредняющий фильтр. Spoiler WINDOW_SIZE = 256 GW = scipy.signal.windows.blackmanharris(WINDOW_SIZE) GW_INTEGER = [0] * WINDOW_SIZE norm = 0.0 for gw in GW: norm += gw * gw for i in range(WINDOW_SIZE): GW[i] = GW[i] / math.sqrt(norm / WINDOW_SIZE) / OVERSAMPLE_MAGNITUDE GW_INTEGER[i] = int(GW[i] * 65536) print(GW_INTEGER) Гораздо сильнее на результат влияет определение нулевого значения АЦП. Если просто взять среднее за 0.1с, то из-за попадания в нечётное количество полупериодов ошибка может достигать 10%. Поэтому ноль АЦП считаю отдельно обычным фильтром первого порядка. В итоге RMS каждого измерения рассчитывается по формуле: Честно считать корень необязательно. Есть простой итерационный метод расчёта:sqrt[n] = (x/sqrt[n-1] + x) / 2 Оказалось, что одной-двух итераций этой формулы более чем достаточно, если знать результат предыдущего измерения RMS. Т.е. весь расчёт корня сводится к одному целочисленному делению и простой арифметике. В итоге уложился в требуемую точность измерения 0.5% и получился такой отклик: В архиве – мусорный код выдернутый из проекта. rms.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tarbal 4 27 марта, 2020 Опубликовано 27 марта, 2020 · Жалоба On 1/2/2020 at 4:48 PM, Plain said: Идеальных АЦП не существует, поэтому ноль неизвестен, и СКЗ понятно что сугубо за интересующий период. Ноль и не нужен. Правы были те, кто говорил о среднем квадратичном. Дисперсия -- это квадрат среднеквадратичного. Надо считать дисперсию. Есть отличная формула для рассчета дисперсии: D[X] = M[X^2] -(M[X])^2 Она имплементируется без буфера. Копите сумму квадратов измерений и просто сумму измерений, а потом, набрав заданное для окна измерение количество измерений, из суммы квадратов вычитаете квадрат среднего значения, поделив сумму измерений на их количество, потом возвести в квадрат. Получаете квадрат RMS только переменной составляющей. Ноль пофиг. Вклад постоянной составляющей исчезнет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться