Во-первых, я извиняюсь, потому что я разработчик программного обеспечения, и я очень долго не углублялся в чистую математику, поэтому мой вопрос может показаться глупым. Надеюсь нет.
Контекст - это распознавание высоты звука в музыке.
Если вы возьмете музыкальную ноту и примените к ней преобразование Фурье, у вас будет бесконечная сумма амплитуд для данных частот. Например, если я играю ноту, чей фундаментальный является , на любом инструменте после преобразования Фурье у меня будут гармоники в точках . Каждая частота будет иметь определенную амплитуду, которая определяет тембр инструмента (пианино, голос, труба, ... все следуют этой лоу, но у вас будут разные амплитуды для каждой гармоники)
Теперь то , что я хотел бы сделать это с данным звуковым сигналом, найти . Только то. Это сложнее, чем кажется, потому что у вас всегда будет фоновый шум и т. Д. Более того, не обязательно требует частоты с самой высокой амплитудой!
Поэтому моя идея найти - применить DFT (на самом деле это FFT для скорости) и найти частоту , чтобы максимальным на выходе FFT.
Как вы думаете, это возможно вообще? Как вы думаете, это возможно за очень короткое время (скажем, <5 миллисекунд)?
Ответы:
То, что вы описываете, очень похоже на метод оценки основного тона Harmonic Product Spectrum, как указано в этой статье Стэнфордского CCRMA .
БПФ не дает вам «бесконечную сумму амплитуд», а конечное число результирующих бинов в зависимости от длины БПФ.
5 мсек - это только 1 период ноты 200 Гц и лишь часть периода ниже 200 Гц. Распознавание музыкальной высоты обычно требует слышания или анализа множества периодов периодичности звука. И много музыки использует заметки ниже G2. Если у вас есть достаточная длина данных, вычисление оценки основного тона из этих данных может занять только порядка микросекунд, а не миллисекунд на современном ПК или мобильном устройстве.
источник