Временные изменения в спектре мощности на определенных частотах [MATLAB]

Я хотел бы оценить изменения спектра мощности (амплитуды) в записи звука длиной в несколько десятков секунд, только на некоторых выбранных частотах. Звук имеет такой спектр (анализ приложения для мобильного телефона):

анализ приложений для мобильных телефонов

Я хочу отобразить временные изменения только в некоторых отдельных частотах, например, на 4 кГц и 8 кГц, в качестве временных кривых. Нет спектрографа.

Пример: звук имеет продолжительность 30 секунд. Я хочу получить спектр мощности по БПФ, взять только частоты на 4 кГц и 8 кГц и получить две отдельные кривые на одном графике значений на 4 кГц и 8 кГц во времени.

Как бы я сделал это в Matlab?

1 ответ

Вы будете использовать какое-то скользящее окно, где PS(f, t) это элемент f из ДПФ, выполненного на блоке выборок с центром t, Размер окна будет определять разрешение в частотной области. (включена ли мощность на 3,98 кГц в трассу для 4 кГц?)

Я хочу получить спектр мощности по БПФ, взять только частоты на 4 кГц и 8 кГц.

Нет, ты не Прямое вычисление DFT/GDFT для двух частот намного быстрее, чем вычисление всего FFT.

Кроме того, вы можете применить идентификатор преобразования Фурье для временных сдвигов, чтобы обновить GDFT, а не пересчитывать его на каждом временном шаге. Вы применяете сдвиг времени, добавляете образец, входящий в окно, и вычитаете оставленный.

Общая сложность с использованием fft и раздвижное окно: O(N * w * lg w) где w это размер окна. Общая сложность с использованием GDFT и временного сдвига: O(c * N) где c это количество частот, которые вам небезразличны.

Константа одинакова в обоих случаях, поэтому вы действительно хотите использовать второе всякий раз, когда c < w * lg w,

Не забудьте взять величину (abs функция), прежде чем строить графики.

Другие вопросы по тегам