Прежде чем мы на самом деле перейдем к тому, что делает эта команда MATLAB, вы, вероятно, захотите узнать, что такое спектрограмма. Таким образом, вы получите больше смысла в том, как работает каждый параметр.
Спектрограмма — это визуальное представление кратковременного преобразования Фурье. Думайте об этом как о взятии фрагментов входного сигнала и применении локального преобразования Фурье к каждому фрагменту. Каждый фрагмент имеет указанную ширину, и вы применяете преобразование Фурье к этому фрагменту. Вы должны принять к сведению, что каждый фрагмент имеет связанное частотное распределение. Для каждого фрагмента, который находится в центре вашего временного сигнала в определенный момент времени, вы получаете набор частотных компонентов. Совокупность всех этих частотных составляющих в каждом фрагменте и построение их вместе — это, по сути, спектрограмма.
Спектрограмма представляет собой двухмерную визуальную тепловую карту, где горизонтальная ось представляет время сигнала, а вертикальная ось представляет ось частоты. Визуализируется изображение, в котором более темные цвета означают, что для определенного момента времени и определенной частоты чем ниже по величине частотная составляющая, тем темнее цвет. Точно так же, чем выше по величине частотная составляющая, тем светлее цвет.
Вот один прекрасный пример спектрограммы:
![](https://upload.wikimedia.org/wikipedia/commons/c/c5/Spectrogram-19thC.png)
Источник: Википедия
Поэтому для каждого момента времени мы видим распределение частотных составляющих. Думайте о каждом столбце как о частотной декомпозиции фрагмента с центром в этот момент времени. Для каждого столбца мы видим различный спектр цветов. Чем темнее цвет, тем меньше составляющая магнитуды на этой частоте, и наоборот.
Итак!... теперь, когда вы вооружены этим, давайте рассмотрим, как работает 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