|
|
  |
Интерполяция на микроконтроллере |
|
|
|
Nov 15 2016, 16:13
|
Гуру
     
Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954

|
Цитата(blackfin @ Nov 15 2016, 20:43)  Ну, это зависит от процессора. Для 16-ти битного FFT на 2048 точек blackfin'у требуется ~16 тактов на отсчет.. Кроме того, есть процессоры, в которые встроен аппаратный ускоритель FFT. ну так то блэкфин, там и два алу, и аппаратные циклы, и куча шин, что позволяет за один такт и два МАСа сделать и ещё и в память слазить за следующими данными. а у ТС - кортекс М4. 1024-FFT (Complex in Q15 Format) Cortex-M0 : 855 733 cycles Cortex-M0+ : 664 531 cycles Cortex-M3 : 204 244 cycles Cortex-M4 : 89 839 cycles хотя для М4F попадались цифры в 40 тактов на отсчёт с плавающей запятой. FFTN M4 A8 A9 A15 BF5xx BF70x SHARC21489 64 3709 3773 3358 2264 2200 1526 783 128 9811 6384 5682 3830 5249 3431 1334 256 21575 11114 9891 6668 11744 7611 2542 512 37813 21852 19448 13111 27385 17084 5189 1024 96630 50738 45157 30443 60216 37568 10972 так что 100 тактов на отсчёт для оценки вполне пойдёт. ну и для анализа сетевых 50Гц это всё-таки постараться надо чтобы в вычислительную мощность процессора упиралось.
|
|
|
|
|
Nov 16 2016, 13:07
|
Знающий
   
Группа: Свой
Сообщений: 521
Регистрация: 12-05-06
Пользователь №: 17 030

|
Цитата(_pv @ Nov 15 2016, 16:25)  FFT надо ~100 таков на отсчёт, Герцелю - одно умножение и пара сложений, соответственно для ~20 гармоник Герцель будет быстрее чем FFT для всего спектра. ну пусть даже будет 10 тактов на отсчёт для Герцеля, для 10 периодов 50Гц на 8кГц это 1600 точек * 10 тактов на отсчёт * 50 гармоник / 120МГц = 6мс. плавающее количество отсчётов Герцелю никак не мешает и не надо ничего интерполировать. то что последняя точка может не попасть в целое количество периодов на пол периода АЦП, +-0.5/8кГц = 60мкс, для 10ти периодов думаю никак на точность не повлияет. Кстати не факт что 20 "Гертцелей" будут быстрее одного FFT . Скажем есть 1024 отсчета для FFT требуется порядка N * log2 ( N ) = 10240 комплексных операций. Считаем что для Гертцеля требуется одна комплексная операция на отсчет , итого 20 Гертцелей будут стоить 20*1024 = 20480 операций. Тут кто-то про ФАПЧ выше писал... Такая идея... Хватаемся ФАПЧ за первую гармонику, из генератора фапч делаем опорные комплексные экспоненты с частотами 2*f1, 3*f1.... 20*f1, считаем их корреляцию со входным сигналом. ----------------------------------- p.s. Кажется лет 6 назад была точно такая же тема здесь. И вроде было все подробно разобрано, и кажется пришли к мысли что передискретизация(интерполяция) особо не нужна чтобы измерить частоту (амплитуду) отдельно стоящей гармоники.
--------------------
ну не художники мы...
|
|
|
|
|
Nov 16 2016, 14:01
|
Гуру
     
Группа: Свой
Сообщений: 2 220
Регистрация: 21-10-04
Из: Balakhna
Пользователь №: 937

|
Цитата(alex_os @ Nov 16 2016, 16:07)  p.s. Кажется лет 6 назад была точно такая же тема здесь. И вроде было все подробно разобрано, и кажется пришли к мысли что передискретизация(интерполяция) особо не нужна чтобы измерить частоту (амплитуду) отдельно стоящей гармоники. Это дежавю каждый год, если не чаще. Вообще есть специальные flat top окна, читай FIR фильтр с плоской АЧХ в полосе пропускания, чтобы не вносить ошибку в амплитуду из-за частотного сдвига, точного значения частоты не нужно, только грубое, чтобы выбрать нужный фильтр в банке, куда гармоника попала, громадное FFT тоже не нужно, поскольку АЧХ фильтров в банке будут сильно перекрываться, поэтому можно проредить и использовать эффективную реализацию банка фильтров в виде полифазник+небольшое FFT.
|
|
|
|
|
Nov 16 2016, 16:10
|
Гуру
     
Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954

|
Цитата(alex_os @ Nov 16 2016, 19:07)  Кстати не факт что 20 "Гертцелей" будут быстрее одного FFT . Скажем есть 1024 отсчета для FFT требуется порядка N * log2 ( N ) = 10240 комплексных операций. Считаем что для Гертцеля требуется одна комплексная операция на отсчет , итого 20 Гертцелей будут стоить 20*1024 = 20480 операций. не все комплексные операции одинаково полезны (с). вон на 1024FFT кортексу М0 надо в десять раз больше тактов чем М4. а вот для того чтобы умножить и сложить пару чисел ему точно в десять раз больше тактов не надо. Цитата(alex_os @ Nov 16 2016, 19:07)  Тут кто-то про ФАПЧ выше писал... Такая идея... Хватаемся ФАПЧ за первую гармонику, из генератора фапч делаем опорные комплексные экспоненты с частотами 2*f1, 3*f1.... 20*f1, считаем их корреляцию со входным сигналом. и чем это от Герцеля отличается? только частоту основной гармоники просто измерить, автокорреляцией или через среднеквадратичное значение производной, а не из фапча. и потом считать Герцелем те же интегралы Фурье для частот 2*f1, 3*f1.... 20*f1,.
|
|
|
|
|
Nov 17 2016, 09:04
|
Знающий
   
Группа: Свой
Сообщений: 521
Регистрация: 12-05-06
Пользователь №: 17 030

|
Цитата(_pv @ Nov 16 2016, 19:10)  не все комплексные операции одинаково полезны (с). вон на 1024FFT кортексу М0 надо в десять раз больше тактов чем М4. а вот для того чтобы умножить и сложить пару чисел ему точно в десять раз больше тактов не надо. А чего для Гертцеля не нужно в 10 раз больше тактов? Цитата(_pv @ Nov 16 2016, 19:10)  и чем это от Герцеля отличается? только частоту основной гармоники просто измерить, автокорреляцией или через среднеквадратичное значение производной, а не из фапча. и потом считать Герцелем те же интегралы Фурье для частот 2*f1, 3*f1.... 20*f1,. Почти ничем не отличается только частоту мерить не надо  .
--------------------
ну не художники мы...
|
|
|
|
|
Nov 17 2016, 11:56
|
Гуру
     
Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954

|
Цитата(alex_os @ Nov 17 2016, 15:04)  А чего для Гертцеля не нужно в 10 раз больше тактов? так там ничего кроме единственного умножения нет. не в десять же раз дольше на М0 два числа перемножаются по сравнению с М4. Цитата(alex_os @ Nov 17 2016, 15:04)  Почти ничем не отличается только частоту мерить не надо  . если прибор анализирует сетевые 50Гц, её всё равно измерять надо.
|
|
|
|
|
Nov 17 2016, 17:16
|
Местный
  
Группа: Участник
Сообщений: 319
Регистрация: 27-09-07
Пользователь №: 30 877

|
Цитата(TSerg @ Nov 1 2016, 18:11)  Здесь, почитайте, для начала. DSPLIBплюсую, а потом фильтр Фароу глянуть - дешево, сердито и практично. для работы на процессоре с ограниченной памятью, или дохлым кешем - самое оно.
|
|
|
|
|
Nov 21 2016, 12:29
|
Группа: Участник
Сообщений: 11
Регистрация: 31-07-14
Пользователь №: 82 420

|
Подытожим.
Если уж очень хочется делать через интерполяцию - то предпочтительно сплайнами, можно попробовать Лагранжа.
Применить "Герцеля" для расчета 50 гармоник - как сказали выше, "Герцль"не зависит от числа входных отсчетов, ведь всё равно в них укладывается четное число периодов.
Еще один способ (или метод) - реализовать на МК фильтр Фарроу - это случаем не полифазный ли фильтр? Если, как утверждают, "Герцль" справляется с плавающим числом входных отсчетов, то справится ли фильтр.
Уважаемые, я ничего не упустил?
|
|
|
|
|
Nov 22 2016, 10:38
|
Группа: Участник
Сообщений: 11
Регистрация: 31-07-14
Пользователь №: 82 420

|
Цитата(AlexRayne @ Nov 17 2016, 23:16)  плюсую, а потом фильтр Фароу глянуть - дешево, сердито и практично. для работы на процессоре с ограниченной памятью, или дохлым кешем - самое оно. Проблем с памятью или кешем нет - в МК есть место, где можно хранить сигнал и коэффициенты. Поэтому для меня в предпоследнюю очередь играет роль то, сколько программа потребует места для выполнения и для хранения данных. Важнее - скорость и точность. Насколько я понял, в фильтре Фарроу присутствует кусочно-полиномиальная интерполяция. Так тогда можно обойтись и без фильтра, а напрямую посчитать кусочно-полиномиальную интерполяцию для моего случая. Хотя, есть подозрения, что придется накладывать оконную функцию, чтобы не появились новые спектральные составляющие и не исчезли старые. Но, по сути, если интерполяция достаточно точная - этого произойти не должно. К тому же и до интерполяции и после неё в получившихся отсчетах всё равно будет содержаться 10 периодов сигнала.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|