К примеру для того чтобы возможно было получить 10кГц вам необходимо иметь частоту семплирования не менее удвоенной масимальной частоты, т.е. это будет 20кГц, именно с этой частотой вы (образно, не вы конкретно, а программист реализующий задачу) обязан опрашивать аналоговый вход. При этом счет идет на микросекунды и задержки там микросекундные. Далее - чем больше семплов соберете, тем ниже будет граница для НЧ, т.е. - мало семплов - диапазон узкий, много - шире чем когда мало. Диапазон можно подвинуть уменьшив частоту семплирования, тем самым сдвинувшись в сторону низких частот, но потеряв в высоких. Либо же диапазон можно расширить за счет того, что собрать бОльшее количество семплов. Но много вы на ардуине не соберете, т.к. памяти не хватит. Еще одним вариантом будет смешанное семплирование - т.е. набираете два массива - один с частотой опроса 20кГц, другой с 2кГц - так можно будет посчитать отдельно высокие и низкие. Но затем нужно все объединить.
Ну и главное - кроме того что вы получили массив исходных данных (т.е. допустим заполнили массив в 256 значений прочитанных из АЦП) вам нужно его еще обсчитать - для этого нужны будут вспомогательные вещественные массивы 2 штуки по 256 значений, ну и временные затраты на обсчет всего этого дела. Вот как-то так...
Задача реализуемая вообще-то, но насколько хорошо именно на ардуине - я хз, особенно учитывая что по хорошему задача семплирование-обсчет-семплирование-обсчет должно крутиться постоянно, чтобы отзывчивость была достаточная, при этом желательно минимум 10 обсчетов в секунду неплохо было бы иметь. Сухим остатком получается то, что полноценный анализ частот делать на ардуине если и можно, то скорее всего это будет чуть ли не единственная задача, которая на ней будет крутиться полностью отъедая память и процессорное время, при иных раскладах вам придется идти на компромиссы.
Все написанное выше касалось именно задаче разложения частот, для анализа же амплитуды сигнала - все просто и проблем нет вообще.