Дык в звуке не одна частота, а много. Их Вы после Фурье и имеете. Какие-то могут быть сильно больше других — это основные. А могут и не быть, как в случае с шумом.
Есть у меня 2 типа данных,
1) обычная волна, сэмплы. Как из нее получить частоту звука?
2) волна преобразованная по FFT(БПФ), как из нее получить частоту звука?
А общая задача в том, чтобы знать какая нота играется в определенный момент, это я могу узнать зная частоту.
Исходные данные — сэмплы, а ля как в вавке по которым я могу нарисовать синусоиды, и данные по которым я могу нарисовать спектрограмму.
Хелп плиз
Здравствуйте, D. Mon, Вы писали:
DM>Дык в звуке не одна частота, а много. Их Вы после Фурье и имеете. Какие-то могут быть сильно больше других — это основные. А могут и не быть, как в случае с шумом.
Да, но меня интересует что на что делить и что на что умножать. мне нужно получить частоту основную, обрамляющие не интересуют.
Спасибо
Ничего не делить, максимум по модулю искать. Индекс максимального коэффициента даст частоту (см. формулу для Фурье).
Здравствуйте, crusher_c, Вы писали:
_>А общая задача в том, чтобы знать какая нота играется в определенный момент, это я могу узнать зная частоту.
Надежнее будет использовать не БПФ, а считать ф-ю кореляцию сигнала для каждой частоты и выбирать максимальную. Потребует чуть больше вычислительных ресурсов, но на современном компе это не актуально.
Примерно так (для каждой опорной частоты f):
SumSin=sum(Un*sin(2*pi*f*delta*n)); n=0...N-1
SumCos=sum(Un*cos(2*pi*f*delta*n)); n=0...N-1
Result=SumSin^2 + SumCos^2;
Еще можно использовать алгоритм
Герцеля, на процессоре, у которого есть арифметика с плавающей точкой, он будет эффективнее.