Как создать график зависимости частоты от времени?

9

Я инженер-химик, а не EE, так что это немного сложно.

Я пытаюсь выяснить, как взять амплитуду в зависимости от времени и преобразовать ее в частоту в зависимости от времени. Мой первый инстинкт - разрезать мои данные на куски, выполнить БПФ для каждого блока, а затем отобразить это. К сожалению, когда длительность каждого среза приближается к нулю, информации для получения точной информации о частоте становится недостаточно (для низких частот требуется более маленький интервал времени). Итак ... как мне это сделать? Я уверен, что это какая-то известная проблема, которую кто-то уже решил.

Вот то преобразование, которое я ищу, проиллюстрировано звуковой волной (фортепианная нота G). Как видите, этот график представляет собой три оси, третья из которых представлена ​​цветом.

Спасибо!

введите описание изображения здесь

Ник
источник

Ответы:

5

Разрешение по времени и частоте является общеизвестной проблемой, и действительно есть способы ее преодоления. Для аудиосигналов некоторые из наиболее часто используемых методов включают: параметрические методы; адаптивное разрешение (анализ с различными конфигурациями времени / частоты и объединение результатов - Вен Х. и М. Сандлер, «Композитная спектрограмма с использованием нескольких преобразований Фурье»); вейвлеты / разложения на слишком полных основаниях; и использование информации о фазе для извлечения точного местоположения частотных пиков (IFgram).

Тем не менее, похоже, что график, который вы показали, не использует некоторые из этих методов; так что я подозреваю, что это не то, что вы можете искать. Кажется, что есть некоторая «смазанность» на горизонтальной оси (например, при t = 1,2 с), и это является верным признаком того, что анализ был выполнен с большим перекрытием между кусками.

Действительно, длительность порции и количество кадров анализа в секунду не обязательно должны быть связаны друг с другом, если вы позволяете кадрам перекрываться. Поэтому, если вы хотите использовать кадр анализа длиной 40 мс, ваша сетка не обязательно должна быть:

кадр 1: t = 0..t = 40 мс; кадр 2: t = 40 мс ... t = 80 мс

Это вполне может быть:

кадр 1: t = 0..t = 40 мс; кадр 2: t = 10 мс ... t = 50 мс

Это перекрытие может создать иллюзию более высокого временного разрешения без слишком большого уменьшения размера окна FFT. Обратите внимание, что это может помочь только в точном определении местоположения события на оси времени - это не поможет разрешить два события, близких по времени ... Так же, как увеличение размера FFT может помочь в определении местоположения пика частоты, но не в разрешение двух соседних частотных пиков.

pichenettes
источник
Как бы вы пошли другим путем (преобразовать спектрограмму в аудиосигнал)
Пит
4

Да, многие люди работали над частотно-временным анализом.

Подход «нарезать мои данные на куски, выполнить FFT для каждого куска» - хорошая идея. Применение «оконной функции» к каждому чанку непосредственно перед выполнением БПФ помогает избежать многих артефактов. Позволяет частям перекрываться также помогает. После этих настроек вы получаете преобразование Габора , которое, похоже, является самым популярным кратковременным преобразованием Фурье (STFT).

Как вы уже указали, и как указывает статья в Википедии, все методы кратковременного преобразования Фурье имеют компромисс:

  • когда вы разрезаете временные ряды на очень короткие фрагменты, вы получаете очень точную информацию о времени относительно того, когда именно начинается и заканчивается тон, но информация о частоте очень размыта.
  • Когда вы разрезаете временной ряд на очень длинные фрагменты, вы получаете очень точную информацию о частоте относительно точной частоты тона, но точное время его запуска и остановки размыто.

Это известная проблема, но, увы, она не только не решена, но и доказано, что неопределенность между ними неизбежна - предел Габора, предел Гейзенберга – Габора, принцип неопределенности и т. Д.

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

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

РЕДАКТИРОВАТЬ: Некоторые исходный код для генерации спектрограмм / графиков водопадов из аудиоданных

Изображение на спектрограмму идет в обратном направлении от вышеуказанных утилит.

Дэвид Кэри
источник
Преобразование Габора только с гауссовыми окнами. Если вы используете другое окно, это просто STFT. (И настоящие гауссовские окна не существуют в цифровом виде, потому что они сужаются до бесконечности.)
эндолит
@endolith: Вы правы. Преобразование Габора использует «оконную функцию Гаусса», которая усекается до конечной длины - она ​​довольно близка, но математически не идентична идеальному гауссову.
Дэвид Кэри
Я думаю, что преобразование Габора - это непрерывное преобразование, использующее интеграл, поэтому в качестве окна может использоваться неусеченный гауссов?
эндолит
@endolith: Да, в принципе, человек мог бы использовать неусеченный гауссов в качестве окна. На практике, поскольку практически вся энергия гауссиана находится в пределах нескольких сигм от центрального горба, использование усеченного окна практически всегда не делает заметных различий в выходной диаграмме. Так как программное обеспечение, которое генерирует спектрограммы водопадов спектрограммы, неоднократно применяет окно Гаусса, а затем выполняет БПФ для каждого столбца диаграммы, «не усечение» сделает это программное обеспечение невыносимо медленным.
Дэвид Кэри