STM32 FFT

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Аватара пользователя
baghear
Опытный кот
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

STM32 FFT

Сообщение baghear »

Добрый стараюсь реализовать FFT средствами <arm_math.h>.
Для начала инициализирую

Код: Выделить всё

arm_rfft_init_q15(&S, FFT_SIZE, 0, 1);
Далее само преобразование и тут вопрос, судя по документации ему на вход надо подавать данные с плавающей точкой в формате 1.15

Код: Выделить всё

arm_rfft_q15(&S,fft_Sbuff, fft_Dbuff);
НАдо ли преобразовывать как-то данные полученные с АЦП и почему?

Далее есть таблица в которой видно, что подаем мы данные в формате 1.15, а на выходе для 128 отсчетов получаем 7.9. Там же в табличке есть столбец number bits of upscale, что он значит?
Дело в том, что в следующую функцию необходимо снова подать данные в формате 1.15, а у нас 7.9
В сети находил, что полученные результат сдвигают влево на число, указанное в последнем столбце. Но почему влево, а не вправо если нам нужен формат 1.15?

Код: Выделить всё

arm_cmplx_mag_q15(fft_Dbuff, fft_Sbuff, FFT_SIZE);
НУ и в итоге выходные данные мы получаем в формате 2.14, что не может не радовать, как теперь получить РЕАЛЬНУЮ амплитуду отсчета?
Вложения
Screenshot_1.jpg
(38.03 КБ) 738 скачиваний
Реклама
Аватара пользователя
Neekeetos
Держит паяльник хвостом
Сообщения: 993
Зарегистрирован: Пн сен 18, 2006 11:16:05
Откуда: Тула
Контактная информация:

Re: STM32 FFT

Сообщение Neekeetos »

[uquote="baghear",url="/forum/viewtopic.php?p=3354435#p3354435"]НАдо ли преобразовывать как-то данные полученные с АЦП и почему?[/uquote]
для 16битного ацп ничего не требуется делать если отсчеты со знаком. Для остальных случаев надо, чтобы данные с ацп занимали старшие биты входных для бпф отсчетов для измерений со знаком, если ацп выдает отсчеты беззнаковые то старшие биты без знака, а знак =0;

[uquote="baghear",url="/forum/viewtopic.php?p=3354435#p3354435"]Далее есть таблица в которой видно, что подаем мы данные в формате 1.15, а на выходе для 128 отсчетов получаем 7.9. Там же в табличке есть столбец number bits of upscale, что он значит?
Дело в том, что в следующую функцию необходимо снова подать данные в формате 1.15, а у нас 7.9[/uquote]

формат оч простой, означает количество битов целой части и после точки - дробной. формат 1.15 это соотв XYYY YYYY YYYY YYYY где X это целая часть а Y дробная, после преобразования формат уже 7.9

то есть XXXX XXXY YYYY YYYY , если сопоставить два формата:

Код: Выделить всё

1.15  00 0000 X.YYY YYYY YYYY YYYY
7.9   XX XXXX X.YYY YYYY YY00 0000
короче говоря из 7.9 нельзя получить 1.15 потому что целая часть числа не влезает в 16битов. Однако можно получить какое нибудь 17.15 внутри 32битного числа сдвигая 7.9 влево на 6 битов и расширив знаковый бит на незанятые разряды 32битного числа

[uquote="baghear",url="/forum/viewtopic.php?p=3354435#p3354435"]В сети находил, что полученные результат сдвигают влево на число, указанное в последнем столбце. Но почему влево, а не вправо если нам нужен формат 1.15?

Код: Выделить всё

arm_cmplx_mag_q15(fft_Dbuff, fft_Sbuff, FFT_SIZE);
НУ и в итоге выходные данные мы получаем в формате 2.14, что не может не радовать, как теперь получить РЕАЛЬНУЮ амплитуду отсчета?[/uquote]
Проще всего передать сразу число 7.9 в эту функцию, получить 8.8 в результате и сдвинуть его так как нужно чтобы получить величину в единицах входных отсчетов.
Информация по RLC mini находится >тут<
Реклама
Аватара пользователя
baghear
Опытный кот
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

Re: STM32 FFT

Сообщение baghear »

для 16битного ацп ничего не требуется делать если отсчеты со знаком
Как вы это определили???
Однако можно получить какое нибудь 17.15 внутри 32битного числа сдвигая 7.9 влево на 6 битов
Почему мы так упорно стремимся получить 15 знаков после запятой, а до запятой нас не интересует, что происходит?
Хотелось бы понять именно суть.
Аватара пользователя
Neekeetos
Держит паяльник хвостом
Сообщения: 993
Зарегистрирован: Пн сен 18, 2006 11:16:05
Откуда: Тула
Контактная информация:

Re: STM32 FFT

Сообщение Neekeetos »

[uquote="baghear",url="/forum/viewtopic.php?p=3354660#p3354660"]
для 16битного ацп ничего не требуется делать если отсчеты со знаком
Как вы это определили???[/uquote] Я это определил используя великое знание из книжки, конкретно то, что числа с фиксированной запятой это целые числа со знаком соответствующей разрядности. Учитывая что 16битный ацп уже выдает полный диапазон значений 16битного знакового инта, его отсчеты можно интерпретировать как форматы с фиксированной запятой полного диапазона - 1.15 , 2.14, 3.13 , 4.12 , 5.11 и так далее без всяких преобразований.

[uquote="baghear",url="/forum/viewtopic.php?p=3354660#p3354660"]Хотелось бы понять именно суть.[/uquote]Числа с фиксированной запятой это умозрительная конструкция, никакого специального формата не предусматривается. По факту это целое число со знаком, максимальное значение которого приравнивают к эквивалентному вещественному числу, например 1.15 соответствует диапазону примерно +-1.0 поскольку на целую часть отводится только знаковый бит.
Информация по RLC mini находится >тут<
Реклама
Эиком - электронные компоненты и радиодетали
Ответить

Вернуться в «ARM»