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

Интерполяция на микроконтроллере

Гость TSerg
Я бы вообще не считал (количество замеров)... Усреднял бы и усреднял непрерывно замеры.

Говорят, по ГОСТ-у положено 10. Так, что после 10-ти и после 11-го идет просто задержка выдачи результата на период.

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


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

Вообще алгоритмы измерения сетевых гармоник подробно изложены в ГОСТ 30804.4.7-2013 и там в качестве опорного метода рекомендуется БПФ.

 

http://meganorm.ru/Data2/1/4293778/4293778588.pdf

 

Algoritm.png

 

Проблему ТС я вижу в том, что у него частота дискретизации не синхронизируется с сетевой частотой, как рекомендует ГОСТ,

а является фиксированной 8 кГц. Скорее всего используется готовый AFE. Чтобы обеспечить работу в требуемом по ГОСТУ интервале измерений от 42 до 58 Гц сетевой частоты, на 10 периодах сети имеем возможный разброс от 1380 до 1900 отсчетов и отсюда проблему передискретизации в фиксированные 1024 из-за дробного и непостоянного коэффициента.

 

Интерполяцию можно делать через кубические сплайны, можно через интерполирующий фильтр. Здесь что будет быстрее не знаю, но я бы через сплайны делал.

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


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

Вообще алгоритмы измерения сетевых гармоник подробно изложены в ГОСТ 30804.4.7-2013 и там в качестве опорного метода рекомендуется БПФ.

 

http://meganorm.ru/Data2/1/4293778/4293778588.pdf

 

Algoritm.png

 

Проблему ТС я вижу в том, что у него частота дискретизации не синхронизируется с сетевой частотой, как рекомендует ГОСТ,

а является фиксированной 8 кГц. Скорее всего используется готовый AFE. Чтобы обеспечить работу в требуемом по ГОСТУ интервале измерений от 42 до 58 Гц сетевой частоты, на 10 периодах сети имеем возможный разброс от 1380 до 1900 отсчетов и отсюда проблему передискретизации в фиксированные 1024 из-за дробного и непостоянного коэффициента.

 

Интерполяцию можно делать через кубические сплайны, можно через интерполирующий фильтр. Здесь что будет быстрее не знаю, но я бы через сплайны делал.

 

Да, всё именно так. Я немного ступил и задал неверные начальные данные, из-за этого обсуждение свернуло немного в другую сторону. То, что Вы описали - именно это мне и надо получить. В ходе обсуждения и было предложено делать интерполяцию, чтобы получить фиксированные 1024 отсчета и как-то решить проблему с плавающими входными отсчетами. Мне как раз и хотелось узнать - какую интерполяцию применяют в данном случае? Точно не линейная - точность требуемую по ГОСТ не обеспечим. Сплайнами? Точность первоклассная, а вот ресурсов требует наравне с БПФ (примерно 70, а то и все 90 процентов). Делать сначала интерполяцию, а потом децимацию лишено всякого смысла.

 

Спасибо! :)

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


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

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

А учебники вы из принципа не читаете? Сначала интерполяция а потом децимация и никак иначе. В противном случае вылезут ложные частоты.

 

В вашем случае хватит линейной, но по правилам делаем Sinc. Хватит 3-х или 5-ти точечного ядра. Интерполяцию делаете интерполирующим фильтром.

 

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


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

А учебники вы из принципа не читаете? Сначала интерполяция а потом децимация и никак иначе. В противном случае вылезут ложные частоты.

 

В вашем случае хватит линейной, но по правилам делаем Sinc. Хватит 3-х или 5-ти точечного ядра. Интерполяцию делаете интерполирующим фильтром.

 

Поправьте меня, если я не прав. Все операции передискретизации и преобразование Фурье делается на микроконтроллере, CORTEX-M4F. Вы предлагаете исходные отсчеты с АЦП (а их от 1380 до 1900 ), приходящие на МК сначала интерполировать в N раз, а потом провести децимацию (отбросить каждый M отсчет) - это, как я понимаю и есть интерполирующий фильтр. А интерполяцию делать Sinc-функцией. Но ведь таким же образом можно сделать и сплайн-интерполяцию, подозреваю, что и примерно с такой же скоростью. Да, интерполяция Sinc-функцией очень точна, но вместе с тем делается гораздо дольше. Линейная интерполяция не обеспечит необходимой точности, заданной ГОСТ - уже моделировал в MathCAD - расхождения очень большие.

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


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

Прокомментируйте мое предложение:

https://electronix.ru/forum/index.php?showt...t&p=1459238

а то складывается впечатление, что вы его пропустили.

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


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

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

Восстановление значения сигнала между двумя отсчетами (интерполяция) автоматически означает повышение частоты

дискретизации в N раз. Чем ближе восстановленный отсчет к первому исходному отсчету - тем выше N. В пределе для непрерывного

сигнала частота стремиться к бесконечности.

Существуют важные частные случаи передискретизации, для которых вычисление новых отсчётов производится проще:

- децимация с целым коэффициентом (уменьшение частоты дискретизации в целое D число раз);

- интерполяция с целым коэффициентом (увеличение частоты дискретизации в целое N число раз);

- изменение частоты дискретизации в рациональное (N/D) число раз (этот случай можно рассматривать как комбинацию двух предыдущих).

 

https://ru.wikipedia.org/wiki/Передискретизация

 

https://blog.amartynov.ru/интерполяция-или-фильтр

 

Задайте частоту дискретизации АЦП 6400 Гц. За 128 выборок наберете 20 мс. Вычислив БПФ, получите 64 гармоники 50 Гц сигнала, с полосой каждого бина 50 Гц.

 

Потом для большей точности измерения амплитуды усредняйте результаты БПФ.

 

Не можете уйти от 8 кВыб/с? Интерполируйте на 4, децимируйте на 5. Хотя я этого садомазо из-за упертости схемотехника (или кого?) не понимаю.

 

Да, АЧХ каждого бина не плоская, на краях загибается. Думаю, можно забить. Или взять 256 выборок, БПФ по 256, получить шаг 25 Гц. Лучше 512 или больше, чтобы знать, как относить палки спектра к нужным гармоникам сигнала.

Сетевая частота может сильно меняться и поэтому задавать фиксированную частоту нельзя. Ее надо синхронизировать с сетевой из-за требования обеспечить интервал измерений строго 10 периодов сетевой частоты (сетевая частота измеряется другим методом и заранее известна). Если нельзя уйти от 8 кВыб/с то коэффициент N/D (интерполяция/децимация) будет переменным и очень дробным, потребует фильтрации на очень высокой частоте. Думаю надо смотреть в сторону кубических сплайнов https://ru.wikipedia.org/wiki/интерполяция

ну, может быть, полифазного фильтра. Поправьте, если не прав.

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


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

Сетевая частота может сильно меняться и поэтому задавать фиксированную частоту нельзя. Ее надо синхронизировать с сетевой из-за требования обеспечить интервал измерений строго 10 периодов сетевой частоты (сетевая частота измеряется другим методом и заранее известна). Если нельзя уйти от 8 кВыб/с то коэффициент N/D (интерполяция/децимация) будет переменным и очень дробным, потребует фильтрации на очень высокой частоте. Думаю надо смотреть в сторону кубических сплайнов https://ru.wikipedia.org/wiki/интерполяция

ну, может быть, полифазного фильтра. Поправьте, если не прав.

 

 

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

 

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

 

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

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


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

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

Полоса каждого бина БПФ будет 50 Гц, влезет любое отклонение частоты от номинальной.

 

Если уж так надо привязаться к частоте сети, то... надо к ней привязаться. ФАПЧ!

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


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

Полоса каждого бина БПФ будет 50 Гц, влезет любое отклонение частоты от номинальной.

и для 20й гармоники тоже?

Если уж так надо привязаться к частоте сети, то... надо к ней привязаться. ФАПЧ!

не надо к ней привязываться ФАПЧем, её надо просто автокорелляцией измерять, а потом делать обычное преобразование Фурье для нужного количества гармоник по сетке частот, соответствующей измеренной частоте основной гармоники.

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


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

и для 20й гармоники тоже?

Впритык. Частота сети контролируется глобально. Шаг влево-вправо - расстрел. Так меня учили.

При отклонении основной гармоники на 1 Гц 20-я уйдет на 20 Гц, а 50-я на 50 Гц. Влазит.

А она кому-то нужна, аж 20-я гармоника?

не надо к ней привязываться ФАПЧем, её надо просто автокорелляцией измерять, а потом делать обычное преобразование Фурье для нужного количества гармоник по сетке частот, соответствующей измеренной частоте основной гармоники.

Вы запрещаете или не советуете? :rolleyes: А потом интерполировать непотребное? Пока будете интерполировать по измеренной, реальная частота убежит.

 

Дополню. Интерполировать синус кубическим полиномом (все эти сплайны-лагранжи-фарроу-эрмиты-катмулы-с-роммами...), а потом вычислять в нем 20-ю гармонику? О_о. Их там будет немеряно всяких, в-основном, несуществующих в исходном сигнале.

 

А, по сетке частот Герцелем? Можно.

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


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

А она кому-то нужна, аж 20-я гармоника?

 

Дополню. Интерполировать синус кубическим полиномом (все эти сплайны-лагранжи-фарроу-эрмиты-катмулы-с-роммами...), а потом вычислять в нем 20-ю гармонику? О_о. Их там будет немеряно всяких, в-основном, несуществующих в исходном сигнале.

 

А, по сетке частот Герцелем? Можно.

 

Как раз таки ГОСТ и требует измерение 50 гармоник сетевой частоты и от ГОСТа никуда не уйти. ГОСТ 30804.4.7-2013.

 

Интерполяция сплайном, по крайней мере как показывает моделирование в MathCad, не очень сильно искажает исходный сигнал. Порядка 0,5 В.

 

Герцелем вычислять все 50 гармоник? При условии, что количество отсчетов всегда плавает. Можно ли будет уложиться хотя бы в 5-7 мс? На CORTEX-M4F, 120 МГц.

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


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

Можно ли будет уложиться хотя бы в 5-7 мс? На CORTEX-M4F, 120 МГц.

А почему "уложиться хотя бы в 5-7 мс"? Почему не в 0,5-0,7 мс?

И почему именно "CORTEX-M4F, 120 МГц"?

В природе есть много процессоров, хороших и разных..

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


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

Герцелем вычислять все 50 гармоник? При условии, что количество отсчетов всегда плавает. Можно ли будет уложиться хотя бы в 5-7 мс? На CORTEX-M4F, 120 МГц.

FFT надо ~100 таков на отсчёт, Герцелю - одно умножение и пара сложений, соответственно для ~20 гармоник Герцель будет быстрее чем FFT для всего спектра.

ну пусть даже будет 10 тактов на отсчёт для Герцеля, для 10 периодов 50Гц на 8кГц это 1600 точек * 10 тактов на отсчёт * 50 гармоник / 120МГц = 6мс.

плавающее количество отсчётов Герцелю никак не мешает и не надо ничего интерполировать.

то что последняя точка может не попасть в целое количество периодов на пол периода АЦП, +-0.5/8кГц = 60мкс, для 10ти периодов думаю никак на точность не повлияет.

 

 

 

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


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

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

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

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

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

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

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

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

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

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