Что такое спектрограмма и как настроить ее параметры?

Я пытаюсь построить спектрограмму моего сигнала во временной области:

N=5000;
phi = (rand(1,N)-0.5)*pi;
a = tan((0.5.*phi));
i = 2.*a./(1-a.^2);
plot(i);
spectrogram(i,100,1,100,1e3);

Проблема в том, что я не понимаю параметры и какие значения должны быть указаны. Эти значения, которые я использую, я ссылался на онлайн-документацию MATLAB spectrogram. Я новичок в MATLAB, и я просто не понимаю. Любая помощь будет оценена!


person benzene    schedule 28.03.2015    source источник
comment
Вы проверили помощь? mathworks.com/help/signal/ref/   -  person NKN    schedule 28.03.2015


Ответы (1)


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

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

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

Вот один прекрасный пример спектрограммы:

Источник: Википедия

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


Итак!... теперь, когда вы вооружены этим, давайте рассмотрим, как работает MATLAB с точки зрения функции и ее параметров. То, как вы вызываете spectrogram, соответствует этой версии функции:

spectrogram(x,window,noverlap,nfft,fs) 

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

  • x — это входной сигнал во временной области, для которого вы хотите найти спектрограмму. Это не может быть намного проще, чем это. В вашем случае сигнал, спектрограмму которого вы хотите найти, определяется в следующем коде:

    N=5000;
    phi = (rand(1,N)-0.5)*pi;
    a = tan((0.5.*phi));
    i = 2.*a./(1-a.^2);
    

    Здесь i — это сигнал, для которого вы хотите найти спектрограмму.

  • window — Если вы помните, мы разбиваем изображение на куски, и каждый кусок имеет заданную ширину. window определяет ширину каждого фрагмента с точки зрения сэмплов. Поскольку это сигнал с дискретным временем, вы знаете, что этот сигнал был оцифрован с определенной частотой дискретизации и периодом дискретизации. Вы можете определить размер окна с точки зрения выборок:

    window_samples = window_time/Ts

    Ts — это время выборки вашего сигнала. Установка размера окна на самом деле очень эмпирическая и требует много экспериментов. По сути, чем больше размер окна, тем лучше разрешение по частоте, поскольку вы захватываете больше частот, но временная локализация оставляет желать лучшего. Точно так же, чем меньше размер окна, тем лучше у вас локализация во времени, но вы не получаете такой большой частотной декомпозиции. У меня нет никаких предложений относительно оптимального размера... вот почему вейвлеты предпочтительнее, когда речь идет о частотно-временной декомпозиции. Для каждого «фрагмента» фрагменты разбиваются на более мелкие фрагменты динамической ширины, поэтому вы получаете сочетание хорошей временной и частотной локализации.

  • noverlap – Еще один способ обеспечить хорошую локализацию частот – это перекрытие фрагментов. Правильная спектрограмма гарантирует, что каждый фрагмент имеет определенное количество сэмплов, которые перекрываются для каждого фрагмента, а noverlap определяет, сколько сэмплов перекрываются в каждом окне. По умолчанию это 50% ширины каждого фрагмента.

  • nfft - Вы, по сути, берете БПФ каждого фрагмента. nfft сообщает вам, сколько точек БПФ требуется вычислить для каждого фрагмента. Количество точек по умолчанию — наибольшее из 256 или floor(log2(N)), где N — длина сигнала. nfft также показывает, насколько точным будет разрешение по частоте. Большее количество точек БПФ дало бы более высокое разрешение по частоте и, таким образом, показало бы мелкие детали вдоль оси частот спектрограммы, если их визуализировать.

  • fs - Частота дискретизации вашего сигнала. По умолчанию установлено значение 1 Гц, но вы можете изменить его на любую частоту дискретизации вашего сигнала.


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


Удачи!

person rayryeng    schedule 28.03.2015
comment
Это отличный ответ. Я бы просто добавил, что nfft дает меру того, насколько точным будет разрешение по частоте. Большее количество точек БПФ даст более высокое разрешение по частоте, показывая мелкие детали вдоль оси частот спектрограммы, если их визуализировать. - person AruniRC; 15.08.2016
comment
@AruniRC Это очень верно. Я вставлю это. Спасибо! - person rayryeng; 15.08.2016
comment
Более темный цвет означает черный цвет или оттенок любого цвета с высокой плотностью? - person Man; 04.04.2020
comment
@Man Темнее, как в более темном оттенке. Дело в том, что вам не нужно, чтобы это было так. Пока цветовая карта непротиворечива. Вы можете сопоставить более яркие цвета с малыми значениями, а тусклые цвета сопоставить с большими значениями. Просто так получилось, что в приведенном выше примере это сделано первым способом. Вам просто нужно быть последовательным в назначении цветов, и в зависимости от того, какую структуру вы используете, есть несколько вариантов цветовых карт, которые вы можете использовать для визуализации. - person rayryeng; 04.04.2020
comment
Вы имеете в виду, что скучно и темно, чтобы быть синонимом, имея в виду ваш комментарий и ответ? - person Man; 05.04.2020
comment
@Чувак, да. Почему это так важно? - person rayryeng; 05.04.2020
comment
Без вопросов . Спасибо - person Man; 05.04.2020
comment
Отличный ответ! Я просто хотел бы отметить, что параметр NFFT на самом деле равен 256 или 2^ceil(log2(N)), а не floor(...). (Фактические вычисления в signal/signal/private/welchparse.m немного более запутаны, но это не важно.) - person Vicky; 29.09.2020