Диапазон преобразования для FFT (FHT)

AMatroskin

✩✩✩✩✩✩✩
16 Мар 2021
3
0
Доброго времени суток, друзья. Есть необходимость анализа аудио сигнала, достаточно зашумленного, на предмет поиска конкретной частоты в спектре. Возник вопрос как используя библиотеки из названия темы анализировать не весь доступный диапазон, а максимально подробно лишь небольшую его часть, меня именно интересует диапазон примерно от 80 гц до 1000 гц но максимально подробно (например 80, 85, 90, 95, 100, 105 и т.д.)подскажите в какую сторону думать/копать?
У алекса в прошивке есть такое:
C++:
// массив тонов, расположены примерно по параболе. От 80 Гц до 16 кГц
byte posOffset[33] = {
  2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 20, 25, 32, 36, 40, 44, 48, 52, 57, 62, 67, 72, 78, 84, 90, 96, 102, 108, 120
};
но че то не уловлю корреляцию между числами массива и частотами, по какой формуле происходит пересчет.
 

poty

★★★★★★✩
19 Фев 2020
3,228
939
@AMatroskin, 80Гц - 1000Гц - это почти 4 октавы! А Вы хотите сделать точность 5Гц. Во-первых, количество сэмплов для такой точности должно быть велико, т.е. быстро результат не получить и количество вычислений будет немаленькое. Надо сформулировать задачу для этого.
 

bort707

★★★★★★✩
21 Сен 2020
3,058
910
Во-первых, количество сэмплов для такой точности должно быть велико, т.е. быстро результат не получить
если быть точным - длина выборки должна быть 1/(точность по частоте), то есть для того чтоб различить частоты с разницей 5 Гц - необходимо иметь семпл сигнала 1/5 = 200 мс.
Выборка должна вестись с частотой вдвое максимальной, то есть 2 Кгц. Итого для задачи ТС нужно обработать как миниум 400 отсчетов сигнала (0.2сек * 2 Кгц)
 

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
Выборка должна вестись с частотой вдвое максимальной, то есть 2 Кгц. Итого для задачи ТС нужно обработать как миниум 400 отсчетов сигнала (0.2сек * 2 Кгц)
Скорее всего потребуется ближайшая степень двойки, т.е. 512 вещественных чисел *2. Контроллер выбирать исходя из этих требований к RAM.
 

AMatroskin

✩✩✩✩✩✩✩
16 Мар 2021
3
0
Спасибо всем откликнувшимся, но тем не менее, как менять диапазон понятней не стало. Точностью можно малость пожертвовать, градацию по пять герц я выбрал просто чтоб заполнить диапазон от 100 до 1000 примерно 256 отсчётами, т.к. обычная атмега 328 с этим справляется. хотелось бы понять каким именно образом можно менять диапазон, ну и точность/количество отчётов.
 
Изменено:

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
@AMatroskin, что есть менять диапазон??? Чем больше семплов, тем больше гармоник получите на выходе, тем больше расход памяти. Чем ниже период опроса аналогового входа - тем дольше собираются семплы, тем ниже верхняя граница по частоте. Если вам нужна верхняя граница в 1кГц, то вы должны опрашивать вход с частотой в 2кГц, или же 500мкс, при этом если наберете 256 семплов то суммарное время опроса получается 128мс, диапазон при этом выйдет 4...1000, для 128семплов на той же частоте опроса суммарное время в два раза меньше, диапазон 8...1000, т.е. будет 8, 16, 24 ... 1000.

Вот и оперируйте значениями - частота опроса, кол-во семплов для получения нужного диапазона. А вот каким образом вы будете опрашивать аналоговый вход 128 раз или 256 раз или сколько вам там нужно с обеспечением нужного периода вопроса - задача вам. Примеры можете поглядеть как в интернетах, так и в нашем проекте лампы, где цветомузыка сделана с получением нужного числа семплов с микрофона.
 
  • Лойс +1
Реакции: AMatroskin

AMatroskin

✩✩✩✩✩✩✩
16 Мар 2021
3
0
@kDn,
Спасибо, это мне и нужно было! получается надо снизить частоту опроса, отлично