НАдо ли преобразовывать как-то данные полученные с АЦП и почему?
для 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 в результате и сдвинуть его так как нужно чтобы получить величину в единицах входных отсчетов.