Форум РадиоКот https://radiokot.ru/forum/ |
|
STM32 FFT https://radiokot.ru/forum/viewtopic.php?f=59&t=154214 |
Страница 1 из 1 |
Автор: | baghear [ Вс апр 15, 2018 01:22:32 ] | ||
Заголовок сообщения: | STM32 FFT | ||
Добрый стараюсь реализовать 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, что не может не радовать, как теперь получить РЕАЛЬНУЮ амплитуду отсчета?
|
Автор: | Neekeetos [ Вс апр 15, 2018 07:41:32 ] |
Заголовок сообщения: | Re: STM32 FFT |
НАдо ли преобразовывать как-то данные полученные с АЦП и почему? для 16битного ацп ничего не требуется делать если отсчеты со знаком. Для остальных случаев надо, чтобы данные с ацп занимали старшие биты входных для бпф отсчетов для измерений со знаком, если ацп выдает отсчеты беззнаковые то старшие биты без знака, а знак =0; Далее есть таблица в которой видно, что подаем мы данные в формате 1.15, а на выходе для 128 отсчетов получаем 7.9. Там же в табличке есть столбец number bits of upscale, что он значит? Дело в том, что в следующую функцию необходимо снова подать данные в формате 1.15, а у нас 7.9 формат оч простой, означает количество битов целой части и после точки - дробной. формат 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битного числа В сети находил, что полученные результат сдвигают влево на число, указанное в последнем столбце. Но почему влево, а не вправо если нам нужен формат 1.15? Код: arm_cmplx_mag_q15(fft_Dbuff, fft_Sbuff, FFT_SIZE); НУ и в итоге выходные данные мы получаем в формате 2.14, что не может не радовать, как теперь получить РЕАЛЬНУЮ амплитуду отсчета? Проще всего передать сразу число 7.9 в эту функцию, получить 8.8 в результате и сдвинуть его так как нужно чтобы получить величину в единицах входных отсчетов. |
Автор: | baghear [ Вс апр 15, 2018 11:56:14 ] |
Заголовок сообщения: | Re: STM32 FFT |
Цитата: для 16битного ацп ничего не требуется делать если отсчеты со знаком Как вы это определили??? Цитата: Однако можно получить какое нибудь 17.15 внутри 32битного числа сдвигая 7.9 влево на 6 битов Почему мы так упорно стремимся получить 15 знаков после запятой, а до запятой нас не интересует, что происходит? Хотелось бы понять именно суть. |
Автор: | Neekeetos [ Вс апр 15, 2018 13:08:53 ] |
Заголовок сообщения: | Re: STM32 FFT |
Цитата: для 16битного ацп ничего не требуется делать если отсчеты со знаком Как вы это определили??? Хотелось бы понять именно суть. Числа с фиксированной запятой это умозрительная конструкция, никакого специального формата не предусматривается. По факту это целое число со знаком, максимальное значение которого приравнивают к эквивалентному вещественному числу, например 1.15 соответствует диапазону примерно +-1.0 поскольку на целую часть отводится только знаковый бит.
|
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |