Точность Q31 и SP для FFT ARM Cortex-M7 - PullRequest
0 голосов
/ 27 апреля 2020

Я хотел бы понять, лучше ли использовать фиксированную точку Q31, чем с плавающей точкой (одинарная точность) для приложений DSP, где важна точность. Более подробно, я сейчас работаю с микроконтроллером ARM Cortex-M7, и мне нужно выполнять FFT с высокой точностью, используя библиотеку CMSIS. Я понимаю, что SP имеет 24 бита для мантиссы, в то время как Q31 имеет 31 бит, поэтому точность Q31 должна быть лучше, но я читал везде, что для алгоритмов, которые требуют умножения и т. Д., Представление с плавающей точкой должно быть б, что я не понимаю почему.

Заранее спасибо.

1 Ответ

0 голосов
/ 27 апреля 2020

Получение максимального значения из фиксированной точки (то есть дополнительных 6 или 7 битов точности мантиссы), а также избежание множества возможных проблем недостаточного и избыточного переполнения требует точного определения границ (мин. И макс.) каждый arithmeti c операция в ваших алгоритмах CMSIS для каждого действительного набора входных данных.

На практике как полный анализ ошибок оказывается трудным, так и добавленные операции, необходимые для масштабирования всех промежуточных значений Оптимальные диапазоны настолько сильно снижают производительность, что кажется, что стоит усилий только более узкий набор случаев, по сравнению с использованием сигнала IEEE или double, который аппаратно поддерживает M7, а диапазон экспонент с плавающей запятой скрывает огромное количество (но не все !!) промежуточных результатов численного масштабирования.

Но для некоторых более простых алгоритмов DSP иногда анализ и исправление масштабирования не является проблемой. Трудно сказать, что без разборки числового диапазона c каждой арифметической операции c в нужном вам алгоритме. Иногда требуется выполнить целочисленную арифметику c, потому что доступные процессоры не поддерживают арифметику с плавающей запятой c хорошо или вообще.

...