помогите с БПФ

bessss
Offline
Зарегистрирован: 28.02.2012

Здравствуйте уважаемые форумчане !

Посмотрел проект реализации БПФ на ардуине (http://arduino.ru/projects/analizator-spektra-zvuka-na-arduino#expandSource) , возникло непонимание в строках кода:

for (i=0; i < 128; i++){
val = analogRead(0);
data[i] = val/4 -128;
im[i] = 0;
};

Как понять этот код, заранее спасибо.

bessss
Offline
Зарегистрирован: 28.02.2012

 up темы

carduino.ru
Offline
Зарегистрирован: 06.12.2011

считываются данные с аналогового порта и складываются в массив 

bessss
Offline
Зарегистрирован: 28.02.2012

 Спасибо, что откликнулись. Эт я понял не совсем понятно это: data[i] = val/4 -128; - зачем ?

polk
Offline
Зарегистрирован: 13.03.2011

Нормализация некая похоже

leshak
Offline
Зарегистрирован: 29.09.2011

 >up темы

Down, блин.

Вы наверное и в магазине всегда стараетесь без очереди влезть? Почему вы решили что ваша тема важней других и ее нужно искуственно толкать вверх? Это же, все-таки, не политический форум, где "чувство локтя под ребро" - в порядке вещей.

Ладно я понял-бы еще, за неделю-две, две тема "ушла", а сам ответа найти не смог (хотя если бы искал, то явно появились-бы более конкретные вопросы).

Если бы вы хотя-бы четверть времени между своим вопрос и апом потратили на чтение документации (поднимите глаза на шапку сайта, уже даже перевели же доки). Ознакомились бы что такое массивы, циклы и analogRead, то вы сами-бы смогли дать ответ аналогичный "выпрошенному" у  carduino. Только при этом понимания было-бы на порядок больше.

Такой код, как вы привели, обычно используют что-бы "что-то объяснить", настолько он "базовый" и безвопросный.

ну либо, учитесь формулировать вопросы, если вы имели что-то совершенно другое.

carduino.ru
Offline
Зарегистрирован: 06.12.2011

bessss пишет:

 Спасибо, что откликнулись. Эт я понял не совсем понятно это: data[i] = val/4 -128; - зачем ?

массив типа byte , соответственно для того чтобы получить из 10 битного значения 8 бит нужно разделить на 4

для того чтобы понять зачем вычитается 128 нужно смотреть весь код

Lozhkin
Offline
Зарегистрирован: 10.04.2011

 data[i] = val/4 -128

Преобразует диапазон значений 0..1023 в диапазон -128..127

Массив char
Тип char знаковый тип, т.е. число (код) хранящийся в памяти может принимать значения от -128 до 127

 

carduino.ru
Offline
Зарегистрирован: 06.12.2011

Только не понятно зачем данные с АЦП преобразовывать в тип Char, логики не вижу

Больше похоже на преобразование в звуковой семл 

step962
Offline
Зарегистрирован: 23.05.2011

carduino.ru пишет:

Только не понятно зачем данные с АЦП преобразовывать в тип Char, логики не вижу

Намеки на логику начинают обнаруживаться, если отвлечься от (достаточно высокого) уровня Си и приблизиться на пару шагов к железу.

Возможно, автор читал даташит на микроконтрллеры Atmel и знает, что полагаться на 2-3 последних бита не стоит - сам производитель говорит, что они есть, но немного "не того" ("• 10-bit Resolution/• 0.5 LSB Integral Non-linearity/• ± 2 LSB Absolute Accuracy").

Скорее всего, он знает, что микроконтроллеры серии ATMega достаточно быстро работают с 8-битовой информацией, а 16-битовая арифметика приводит к резкому (а в случае умножения-деления - на порядок, а то и больше) снижению скорости вычислений.

Имея в уме две эти мысли и преследуя цель реализовать алгоритм БПФ (где Б означает БЫСТРОЕ), он вполне здраво рассуждает, что нет смысла гнаться за журавлем (точнее - миражом) точности, а лучше сосредоточиться на синице скорости.

Ну и ...