Дискретное преобразование Фурье - быстро найти фундаментальное?

9

Во-первых, я извиняюсь, потому что я разработчик программного обеспечения, и я очень долго не углублялся в чистую математику, поэтому мой вопрос может показаться глупым. Надеюсь нет.

Контекст - это распознавание высоты звука в музыке.

Если вы возьмете музыкальную ноту и примените к ней преобразование Фурье, у вас будет бесконечная сумма амплитуд для данных частот. Например, если я играю ноту, чей фундаментальный является , на любом инструменте после преобразования Фурье у меня будут гармоники в точках . Каждая частота будет иметь определенную амплитуду, которая определяет тембр инструмента (пианино, голос, труба, ... все следуют этой лоу, но у вас будут разные амплитуды для каждой гармоники)FF,2F,3F,,nF

Теперь то , что я хотел бы сделать это с данным звуковым сигналом, найти . Только то. Это сложнее, чем кажется, потому что у вас всегда будет фоновый шум и т. Д. Более того, не обязательно требует частоты с самой высокой амплитудой!FF

Поэтому моя идея найти - применить DFT (на самом деле это FFT для скорости) и найти частоту , чтобы максимальным на выходе FFT.FFF+2F+3F++nF

Как вы думаете, это возможно вообще? Как вы думаете, это возможно за очень короткое время (скажем, <5 миллисекунд)?

Dinaiz
источник
Вероятно, это может быть ответом: edaboard.com/thread197897.html
Ну да, но это другой метод, не так ли? ИМХО, это проще, но гораздо менее надежно, потому что не может различить гармонические и негармоничные звуки ...
Dinaiz
отношение dsp.stackexchange.com/a/2524/29
эндолиты

Ответы:

6

То, что вы описываете, очень похоже на метод оценки основного тона Harmonic Product Spectrum, как указано в этой статье Стэнфордского CCRMA .

БПФ не дает вам «бесконечную сумму амплитуд», а конечное число результирующих бинов в зависимости от длины БПФ.

5 мсек - это только 1 период ноты 200 Гц и лишь часть периода ниже 200 Гц. Распознавание музыкальной высоты обычно требует слышания или анализа множества периодов периодичности звука. И много музыки использует заметки ниже G2. Если у вас есть достаточная длина данных, вычисление оценки основного тона из этих данных может занять только порядка микросекунд, а не миллисекунд на современном ПК или мобильном устройстве.

hotpaw2
источник
Хорошая точка зрения. Однако, если у вас уже есть 2F и 3F, вам не нужен F, не так ли? В вашем примере 2F = 400 Гц и 3F = 600 Гц, так что вы, вероятно, можете обнаружить, что F был 200, даже не слыша достаточно звука, чтобы иметь период 5 мс, не так ли? Также я слышал о вейвлет-преобразовании. Как вы думаете, это лучший способ сделать это?
Динаиз
@Dinaiz: зависит от источника звука и от того, являются ли эти фрагменты обертонных частот постоянными или нет. Вейвлеты - это совершенно отдельный вопрос.
hotpaw2
Так что этот метод не подходит для поиска f0 в «почти реальном времени». В существующем состоянии техники возможно ли вообще найти f0 менее чем за несколько миллисекунд с помощью какого-либо инструмента, или это безнадежное дело, и я должен отказаться от своего квеста? : D
Dinaiz