помогите с БПФ
- Войдите на сайт для отправки комментариев
Втр, 28/02/2012 - 16:08
Здравствуйте уважаемые форумчане !
Посмотрел проект реализации БПФ на ардуине (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;
};
Как понять этот код, заранее спасибо.
up темы
считываются данные с аналогового порта и складываются в массив
Спасибо, что откликнулись. Эт я понял не совсем понятно это: data[i] = val/4 -128; - зачем ?
Нормализация некая похоже
>up темы
Down, блин.
Вы наверное и в магазине всегда стараетесь без очереди влезть? Почему вы решили что ваша тема важней других и ее нужно искуственно толкать вверх? Это же, все-таки, не политический форум, где "чувство локтя под ребро" - в порядке вещей.
Ладно я понял-бы еще, за неделю-две, две тема "ушла", а сам ответа найти не смог (хотя если бы искал, то явно появились-бы более конкретные вопросы).
Если бы вы хотя-бы четверть времени между своим вопрос и апом потратили на чтение документации (поднимите глаза на шапку сайта, уже даже перевели же доки). Ознакомились бы что такое массивы, циклы и analogRead, то вы сами-бы смогли дать ответ аналогичный "выпрошенному" у carduino. Только при этом понимания было-бы на порядок больше.
Такой код, как вы привели, обычно используют что-бы "что-то объяснить", настолько он "базовый" и безвопросный.
ну либо, учитесь формулировать вопросы, если вы имели что-то совершенно другое.
Спасибо, что откликнулись. Эт я понял не совсем понятно это: data[i] = val/4 -128; - зачем ?
массив типа byte , соответственно для того чтобы получить из 10 битного значения 8 бит нужно разделить на 4
для того чтобы понять зачем вычитается 128 нужно смотреть весь код
data[i] = val/4 -128
Преобразует диапазон значений 0..1023 в диапазон -128..127
Массив char
Тип char знаковый тип, т.е. число (код) хранящийся в памяти может принимать значения от -128 до 127
Только не понятно зачем данные с АЦП преобразовывать в тип Char, логики не вижу
Больше похоже на преобразование в звуковой семл
Только не понятно зачем данные с АЦП преобразовывать в тип Char, логики не вижу
Намеки на логику начинают обнаруживаться, если отвлечься от (достаточно высокого) уровня Си и приблизиться на пару шагов к железу.
Возможно, автор читал даташит на микроконтрллеры Atmel и знает, что полагаться на 2-3 последних бита не стоит - сам производитель говорит, что они есть, но немного "не того" ("• 10-bit Resolution/• 0.5 LSB Integral Non-linearity/• ± 2 LSB Absolute Accuracy").
Скорее всего, он знает, что микроконтроллеры серии ATMega достаточно быстро работают с 8-битовой информацией, а 16-битовая арифметика приводит к резкому (а в случае умножения-деления - на порядок, а то и больше) снижению скорости вычислений.
Имея в уме две эти мысли и преследуя цель реализовать алгоритм БПФ (где Б означает БЫСТРОЕ), он вполне здраво рассуждает, что нет смысла гнаться за журавлем (точнее - миражом) точности, а лучше сосредоточиться на синице скорости.
Ну и ...