Rion
Участник-
Постов
11 -
Зарегистрирован
-
Посещение
Репутация
0 ОбычныйПосетители профиля
607 просмотров профиля
-
Интерполяция на микроконтроллере
Rion ответил Rion тема в Алгоритмы ЦОС (DSP)
Проблем с памятью или кешем нет - в МК есть место, где можно хранить сигнал и коэффициенты. Поэтому для меня в предпоследнюю очередь играет роль то, сколько программа потребует места для выполнения и для хранения данных. Важнее - скорость и точность. Насколько я понял, в фильтре Фарроу присутствует кусочно-полиномиальная интерполяция. Так тогда можно обойтись и без фильтра, а напрямую посчитать кусочно-полиномиальную интерполяцию для моего случая. Хотя, есть подозрения, что придется накладывать оконную функцию, чтобы не появились новые спектральные составляющие и не исчезли старые. Но, по сути, если интерполяция достаточно точная - этого произойти не должно. К тому же и до интерполяции и после неё в получившихся отсчетах всё равно будет содержаться 10 периодов сигнала. -
Интерполяция на микроконтроллере
Rion ответил Rion тема в Алгоритмы ЦОС (DSP)
Подытожим. Если уж очень хочется делать через интерполяцию - то предпочтительно сплайнами, можно попробовать Лагранжа. Применить "Герцеля" для расчета 50 гармоник - как сказали выше, "Герцль"не зависит от числа входных отсчетов, ведь всё равно в них укладывается четное число периодов. Еще один способ (или метод) - реализовать на МК фильтр Фарроу - это случаем не полифазный ли фильтр? Если, как утверждают, "Герцль" справляется с плавающим числом входных отсчетов, то справится ли фильтр. Уважаемые, я ничего не упустил? -
Интерполяция на микроконтроллере
Rion ответил Rion тема в Алгоритмы ЦОС (DSP)
Как раз таки ГОСТ и требует измерение 50 гармоник сетевой частоты и от ГОСТа никуда не уйти. ГОСТ 30804.4.7-2013. Интерполяция сплайном, по крайней мере как показывает моделирование в MathCad, не очень сильно искажает исходный сигнал. Порядка 0,5 В. Герцелем вычислять все 50 гармоник? При условии, что количество отсчетов всегда плавает. Можно ли будет уложиться хотя бы в 5-7 мс? На CORTEX-M4F, 120 МГц. -
Интерполяция на микроконтроллере
Rion ответил Rion тема в Алгоритмы ЦОС (DSP)
Всё как раз и сводится к тому, каким именно способом интерполировать. Или посмотреть в сторону полифазного фильтра, но, если честно, я про него не читал и, пока что плохо представляю как его можно реализовать. Если говорить более общо, то меня интересовало то, каким способом сейчас делают интерполяцию применительно к моему случаю (задаче). Будь частота микроконтроллера выше и составляла хотя бы 200 МГц, то можно смело делать сплайн, лишь оптимизировав код под конкретный процессор и используя все его (микроконтроллера) функции и ресурсы, и не бояться, что пока будет обрабатываться сигнал мы не успеем провести другие измерения и какие-то другие действия. Естественно, можно взять и сплайн, но может быть есть другие способы интерполяции, не менее эффективные и точные, если кто-то занимался подобными вещами на практике. -
Интерполяция на микроконтроллере
Rion ответил Rion тема в Алгоритмы ЦОС (DSP)
Поправьте меня, если я не прав. Все операции передискретизации и преобразование Фурье делается на микроконтроллере, CORTEX-M4F. Вы предлагаете исходные отсчеты с АЦП (а их от 1380 до 1900 ), приходящие на МК сначала интерполировать в N раз, а потом провести децимацию (отбросить каждый M отсчет) - это, как я понимаю и есть интерполирующий фильтр. А интерполяцию делать Sinc-функцией. Но ведь таким же образом можно сделать и сплайн-интерполяцию, подозреваю, что и примерно с такой же скоростью. Да, интерполяция Sinc-функцией очень точна, но вместе с тем делается гораздо дольше. Линейная интерполяция не обеспечит необходимой точности, заданной ГОСТ - уже моделировал в MathCAD - расхождения очень большие. -
Интерполяция на микроконтроллере
Rion ответил Rion тема в Алгоритмы ЦОС (DSP)
Да, всё именно так. Я немного ступил и задал неверные начальные данные, из-за этого обсуждение свернуло немного в другую сторону. То, что Вы описали - именно это мне и надо получить. В ходе обсуждения и было предложено делать интерполяцию, чтобы получить фиксированные 1024 отсчета и как-то решить проблему с плавающими входными отсчетами. Мне как раз и хотелось узнать - какую интерполяцию применяют в данном случае? Точно не линейная - точность требуемую по ГОСТ не обеспечим. Сплайнами? Точность первоклассная, а вот ресурсов требует наравне с БПФ (примерно 70, а то и все 90 процентов). Делать сначала интерполяцию, а потом децимацию лишено всякого смысла. Спасибо! :) -
Интерполяция на микроконтроллере
Rion ответил Rion тема в Алгоритмы ЦОС (DSP)
Как раз на 10 периодах и получается максимум до 50 гармоники - я это уже моделировал и код писал в IAR - всё работает, БПФ на 1024 считает четко, погрешность очень маленькая и как раз до 50 гармоники. Ведь частота сети плавает, хоть это и считается медленно меняющимся параметром, в связи с чем меняется и количество отсчетов на 10 периодов (Почему именно 10? ГОСТ 30804.4.30 - 2013). 1600 отсчетов - идеализированный случай. Будь частота 48, отсчетов будет уже 1667 на 10 периодов. К чему я это - получить 1024 из плавающих 1600 - сможет ли Герцель с таким справиться? И уложиться в 2.5 - 3 мс. -
Интерполяция на микроконтроллере
Rion ответил Rion тема в Алгоритмы ЦОС (DSP)
Тогда совсем глупый вопрос: И всё это дело можно организовать программным образом на микроконтроллере? Если да, можете подсказать пару методов или алгоритмов. Пожалуйста. -
Интерполяция на микроконтроллере
Rion ответил Rion тема в Алгоритмы ЦОС (DSP)
Поправьте меня, если я что-то не правильно говорю: Полифазный фильтр действует примерно так: Сначала мы увеличиваем частоту дискретизации в М раз - т.е. интерполируем сигнал. Затем прореживаем до нужного нам количества отсчетов, т.е. откидываем ненужные, т.е. производим децимацию сигнала? Не искажается ли спектр после отбрасывания отсчетов? -
Интерполяция на микроконтроллере
Rion ответил Rion тема в Алгоритмы ЦОС (DSP)
Да, но если добивать нулями, то сильно искажается спектр и тогда оценить уровень гармоник не представляется возможным. К тому же БПФ на 2048 точек уже становится слишком ресурсоемким, даже на Cortex-M4F. Но за идею спасибо. 1. Ибо БПФ согласно ГОСТ нужно считать именно на 10 периодах. На самом деле не БПФ, а гармоники нужно считать на 10 периодах, поэтому такое условие. 2. Вот и получается, что необходима передискретизация с 1600 отсчетов на 1024 отсчета. 3. Вот как раз и цель интерполяции - пункт 2. 4. А погрешность - согласен, можно легко промодилеровать. Вот мне и хотелось узнать как это делается сейчас и какие есть варианты решения проблемы. Если немного уйти от темы, то в общем случае на вход АЦП идет ослабленный сигнал электрической сети. АЦП на 8 кГц, как я уже говорил. Данные с АЦП приходят в микроконтроллер. И задача стоит в том, чтобы оценить уровень гармоник вплоть до 50. И вот одно из решение: Так как частота сети плавает, то применить интерполяцию и получить 1024 отсчета и далее БПФ и вот они гармоники. -
Интерполяция на микроконтроллере
Rion опубликовал тема в Алгоритмы ЦОС (DSP)
Столкнулся с такой задачей: Есть АЦП с частотой дискретизации 8 кГц - задан жестко. Есть микроконтроллер, работающий на частоте 120 МГц - тоже задан жестко. Частота сигнала - частота сети 50 Гц. Т.е. после АЦП на микроконтроллер идут 160 отсчетов на 1 период сигнала. Далее на 10 периодах применяется БПФ на 1024 отсчета (тут БПФ не рассматривается, уже реализовано). Собственно в чем весь вопрос: Какой именно вид интерполяции применить лучше всего (есть линейная, квадратичная, кубическими сплайнами, полиномы Лагранжа и прочее)? Ведь необходимо из 1600 отсчетов сделать 1024 - по-любому необходима интерполяция. И еще необходимо обеспечить точность - в идеале около 1%. И еще один момент - всё это делается на микроконтроллере, т.е. потом все эти алгоритмы будут преобразованы в код на C++.