Народ, может кто-то объяснить как получить частоту звучащей ноты? А если не одной? Я изначально знаю какие ноты должны быть сыграны, и по сути мне нужно сравнить звучащую ноту с исходной, я +- разобрался в FFT, ну у меня есть рабочий алгоритм(хоть я и не понимаю детально как он работает), в получившемся массиве комплексных чисел как рассчитать частоту ноты, но самое главное как рассчитать нескольких нот? предположим я сыграл аккорд, я знаю частоты этих нот по отдельности из таблиц, но как их получить математически, для проверки?
После БПФ получаете комплексный массив, где каждый элемент - амплитуда определенной частоты.
Частота по сути - это индекс массива.
Но в элементе может быть не одна частота - количество частот в элементе массива зависит от частоты дискретизации сигнала и от длины БПФ: freq_length = sampling_rate / fft_length;
Если sampling_rate == fft_length, то в элементе массива единственная частота.
freq_length - разрешение элемента массива по частоте.
Анализировать можно только половину массива (см. про частоту Найквиста), остальные отсчеты - это сопряжение первой половины. Соответственно реально получить частоты до sampling_rate / 2 - 1.
В вашем случае, видимо, нужно найти энергетический спектр: сложить квадраты действительной и мнимой частей всех частот. Найти максимумы - это и будут ваши частоты аккорда - лучше построить график и посмотреть визуально, что получится.
Спасибо большое за ответ, но немного не пойму, если fft_length это длина ффт, степень двойки, тогда что такое sampling_rate ? частота дискретизации? но как ее тогда найти?
Обычно это известно на этапе оцифровки. Вы же получаете запись в цифре каким-то образом, посмотрите настройки. Это основной параметр для преобразования аналогового сигнала в цифру.
res2001: можно еще вопрос? как надо складывать вещественную и мнимую часть? вот есть допустим число 10+3I, если просто сложить будет -13, но i же тоже есть и она равна корню из минус единицы, нужно ли ее вычислять как-то? или просто a и b сложить, отбросив i?
Aricce: Нужно складывать просто квадраты действительной и мнимой частей игнорируя i.
Это эквивалентно:
(a + ib) * (a - ib) - произведению комплексно сопряженных чисел. Упростите это выражение и получите: a^2 + b^2.
В физике это завется энергетическим спектром.
dspace.nbuv.gov.ua/bitstream/handle/123456789/6025...
В статье описан алгоритм определениия высоты ноты. Там проверяется не значение конкретного коэф-та в спектре, а суммарная амплитута в полосе (полосы определены по музыкально темперированной шкале - по нотам).