Что такое спектрограмма и как мне установить ее параметры?
Я пытаюсь построить спектрограмму моего сигнала во временной области:
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, и я просто не понимаю идею. Любая помощь будет оценена!
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
говорит вам, сколько точек FFT желательно вычислить для каждого фрагмента. Количество баллов по умолчанию является наибольшим из 256 илиfloor(log2(N))
гдеN
это длина сигнала.nfft
также дает меру того, насколько детальным будет разрешение по частоте. Большее число точек БПФ дало бы более высокое разрешение по частоте и, таким образом, показало бы мелкие детали вдоль оси частоты спектрограммы, если визуализируется.fs
- Частота дискретизации вашего сигнала. По умолчанию это 1 Гц, но вы можете переопределить это на любую частоту дискретизации вашего сигнала.
Поэтому, вероятно, следует извлечь из этого то, что я не могу сказать вам, как настроить параметры. Все зависит от того, какой сигнал у вас есть, но, надеюсь, приведенное выше объяснение даст вам лучшее представление о том, как установить параметры.
Удачи!