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

ARM CMSIS DSP

Добрый день, решил использовать в проекте ARM DSP, для работы с комплексными числами.

Столкнулся с проблемой, что функция arm_cmplx_mult_real_q31 выдает совсем не верный результат. По документации все просто, а в результате умножения 2-х положительных чисел функция дает 0.

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


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

Там исходник простейший... как в нем ваше действие?

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


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

13 минут назад, Sverchok сказал:

 По документации все просто, а в результате умножения 2-х положительных чисел функция дает 0.

Приобретите отладочный эмулятор. Тогда все подобные "проблемы" сможете решать самостоятельно за 10 минут.

ЗЫ: Впрочем для такого и симулятора достаточно.

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


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

22 минуты назад, GenaSPB сказал:

Там исходник простейший.

Да я поэтому и не пойму в чем дело.

Я вызывают функцию arm_cmplx_mult_real_q31(A, B, C, n), где A - int32_t комплексный вектор длины n*2, в котором идет сначала Re, затем Im. B - int32_t вектор длины n, только Re. C - int32_t выходной вектор длины n*2.

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

*pCmplxDst++ = (__SSAT((q31_t) (((q63_t) *pSrcCmplx++ * in) >> 32), 31) << 1);
*pCmplxDst++ = (__SSAT((q31_t) (((q63_t) *pSrcCmplx++ * in) >> 32), 31) << 1);

Меня смущает вот эта часть ((q63_t) *pSrcCmplx++ * in) >> 32), разве при сдвиге в право результат не будет потерян?

 

Изменено пользователем Sverchok

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


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

Будут потеряны младшие 32 бита, старшие 32 - останутся.

Обратите внимание на q63_t.

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


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

1 минуту назад, jcxz сказал:

Будут потеряны младшие 32 бита, старшие 32 - останутся.

Если умножаю два числа (1024+i0) * 1024 (мой первый отсчет), результат 1024*1024=1048576, то в результате сдвига будет 0, так как находится в первых 32 битах.

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


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

Вроде должно быть очевидно, что входные данные должны быть в Q-формате. Должно быть очевидно вам, раз уж взялись за цифровую обработку.

Да и в документации к функциям это наверняка есть. Даже наименования типов говорящие.

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


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

10 минут назад, jcxz сказал:

Вроде должно быть очевидно, что входные данные должны быть в Q-формате.

Я тут вас не очень понял. Посмотрел типы данных q31_t это int32_t, q63_t это int64_t.

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


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

On 10/13/2022 at 3:06 PM, Sverchok said:

Я тут вас не очень понял. Посмотрел типы данных q31_t это int32_t, q63_t это int64_t.

Нет. Это не просто целые числа, а числа в формате с фиксированной точкой. Эта самая виртуальна десятичная точка стоит между 32-ым и 31-ым битами.

Причем 32-ой бит это бит знака. 

И ваши 1024, это не 1024, а 1024/(2^32). 

Это такое представление чисел.

Изучайте формат с фиксированной точкой. 

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


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

Спасибо всем, разобрался. Первый раз с таким столкнулся, думал это обычные целые числа!

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


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

6 часов назад, Sverchok сказал:

Я тут вас не очень понял. Посмотрел типы данных q31_t это int32_t, q63_t это int64_t.

Неужто и в гугле тоже забанили??  🤔  https://wiki5.ru/wiki/Q_(number_format)

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


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

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

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

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

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

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

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

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

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

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