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

Цифровая обработка сигналов на PIC32

Осваиваю PIC32, общее впечатление хорошее - микроконтроллер мощный. Одна из основных задач PIC32 в данном проекте - цифровая обработка сигналов, в частности расчет среднеквадртичного значения.

Вопрос в использовании стандартных фунций предлагаемых в С32, а именно вычисления суммы квадратов mips_vec_sum_squares32. Эта функция возвращает 32-битное значение типа INT, причем похоже, что только старшую половину 64 битного регистра умножителя-накопителя. В результате если операнды, возводимые в квдрат, небольшие по значению, то результат теряется. Если операнды путем сдвига перед выполнением функции приводить к 32 битному значению, то и в этом случае будет потеря точности. Например, при обработке 24 битных данных их квадрат будет 48-битным, а функция возвращает, как уже говорилось, только 32 битное значение, а если из него взять квадратный корень то останется всего то 16 битное значение. Что делать? Разбираться в системе команд MIPS не хочется - думаю что всю часть проекта вполне удастся реализовать на Си.

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


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

Что делать? Разбираться в системе команд MIPS не хочется - думаю что всю часть проекта вполне удастся реализовать на Си.

Делать ассемблерную вставку, реализующую необходимую Вам операцию так, как Вам надо. Осваиваем PIC32 уже почти год - несколько раз помогало.

Встречный вопрос: неужели PIC32 самый подходящий процессор для ЦОС?

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


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

Конечно по производительности PIC32 проигрывает DSP, но не так уж и много. Особенно там, где получается использовать предложенные Микрочипом функции. В нашем случае производительности вполне хватает. А в плюс идут мощная периферия, высокая производительность в задачах с плавающей запятой, удобная среда разработки.

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


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

частности расчет среднеквадртичного значения.

***

а если из него взять квадратный корень то останется всего то 16 битное значение. Что делать?

 

Для такой сложной функции как извлечение квадратного корня из суммы квадратов - есть очень простое алгоритмическое решение - CORDIC. Применимо для операндов абсолютно любой разрядности, и почти не требует операций умножения и деления.

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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