Временные изменения в спектре мощности на определенных частотах [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
функция), прежде чем строить графики.