spectrogram
Спектрограмма с использованием оконного преобразования Фурье.
| Библиотека |
|
Синтаксис
Вызов функции
-
s, f, time, p = spectrogram(___, Name=Value)— использует аргументыName=Valueв дополнение к любым входным аргументам, представленным в предыдущих синтаксисах.
Аргументы
Входные аргументы
#
x —
входной сигнал
вектор
Details
Входной сигнал, заданный как вектора-строка или вектор-столбец.
| Типы данных |
|
| Поддержка комплексных чисел |
Да |
#
window —
окно
целое положительное число | вектор
Details
Значение окна, заданное как положительное целое число, вектор-строка или вектор-столбец. Используйте window для разделения сигнала на сегменты:
Если длина x не может быть точно разделена на целое число сегментов без перекрывающихся отсчетов, то x соответственно усекается.
Если вы не укажете window, то spectrogram использует окно Хэмминга таким образом, что x делится на восемь сегментов без перекрывающихся отсчетов.
#
noverlap —
количество пересекающихся точек
целое неотрицательное число
Details
Количество пересекающихся точек сигнала, заданное как неотрицательное целое число.
Если не указать значение аргумента noverlap, то спектрограмма использует число, которое дает 50% перекрытия между сегментами. Если длина сегмента не указана, функция устанавливает значение noverlap равным , где — длина входного сигнала, а символы обозначают округление вниз.
#
nfft —
количество точек в дискретном преобразовании Фурье
целое положительное число
Details
Количество точек в дискретном преобразовании Фурье, заданное как целый положительный скаляр.
Если не указать значение для nfft, то спектрограмма будет использовать значение , где , символы обозначают округление вверх, при этом:
#
freq —
нормализованные/циклические частоты
вещественный вектор
Входные аргументы «имя-значение»
Укажите необязательные пары аргументов в формате Name=Value, где Name — имя аргумента, а Value — соответствующее значение. Аргументы типа Name=Value должны располагаться после других аргументов, но порядок пар не имеет значения.
#
fs —
частота дискретизации
1 Гц (по умолчанию) | положительное вещественное число
Details
Частота дискретизации, заданная как положительный скаляр. Частота дискретизации — это количество отсчетов в единицу времени. Если единицей времени являются секунды, то частота дискретизации выражается в Гц.
#
freqrange —
частотный диапазон оценки плотности энергетического спектра
"onesided" | "twosided"
Details
Частотный диапазон для оценки плотности энергетического спектра (PSD), заданный как "onesided" или "twosided".
Для сигналов с вещественными значениями по умолчанию используется значение "onesided". Для комплексных сигналов по умолчанию используется значение "twosided", а указание значения "onesided" приводит к ошибке.
-
Значение
"onesided"— возвращает одностороннюю спектрограмму вещественного входного сигнала.-
Если значение аргумента
nfftчетное, то аргументpимеетnfft/2 + 1строк и вычисляется на интервале[0, π]радиан на отсчет. -
Если значение аргумента
nfftнечетное, тоpимеет(nfft + 1)/2строки и интервал[0, π)радиан на отсчет. Если вы укажетеfs, то интервалы будут соответственно[0, fs/2]циклов на единицу времени и[0, fs/2)циклов на единицу времени.
-
-
Значение
"twosided"— возвращает двухстороннюю спектрограмму вещественного или комплексного сигнала. Аргументpимеетnfftстрок и вычисляется на интервале[0, 2π)радиан на отсчет. Если вы укажете аргументfs, то интервал будет иметь[0, fs)циклов на единицу времени.
#
centered —
является ли частотный диапазон центрированным
false (по умолчанию) | true
Details
Включение центрирования частотного диапазона, заданное как false или true.
#
spectrumtype —
масштабирование плотности энергетического спектра
"psd" (по умолчанию) | "power"
Details
Масштабирование плотности энергетического спектра (PSD), заданное как "psd" или "power".
Если тип спектра не указан или указано значение "psd", то функция возвращает спектральную плотность мощности.
Значение "power" масштабирует каждую оценку плотности энергетического спектра на эквивалентную полосу шума окна. В результате получается оценка мощности на каждой частоте.
#
freqloc —
ось отображения частот
"xaxis" (по умолчанию) | "yaxis"
Details
Ось отображения частоты, заданная как "xaxis" или "yaxis".
-
Значение
"xaxis"— отображение частоты по оси и времени по оси . -
Значение
"yaxis"— отображение частоты по оси и времени по оси .
#
OutputTimeDimension —
направление времени
"acrosscolumns" (по умолчанию) | "downrows"
Details
Направление времени выходных данных, заданное как "acrosscolumns" или "downrows". Установите для этого аргумента значение "downrows", если хотите, чтобы направление времени для выходных аргументов отображалось по строкам, а направление частот — по столбцам. Установите значение "acrosscolumns", если хотите, чтобы направление времени для выходных аргументов отображалось по столбцам, а направление частот — по строкам.
#
out —
тип выходных данных
:plot (по умолчанию) | :data
Details
Тип выходных данных:
Если out = :plot, то можно дополнительно передавать параметры для отображения итогового heatmap(). Например, если вызвать spectrogram(x, c = cgrad([:black, :white], [0.1, 0.3, 0.8])), то на спектрограмме будут серые цвета вместо стандартных.
Выходные аргументы
#
s —
дискретное преобразование Фурье
матрица
Details
Дискретное преобразование Фурье, возвращаемое в виде матрицы. Время увеличивается по столбцам матрицы s, а частота увеличивается по строкам, начиная с нуля.
Если параметр freqrange имеет значение "onesided", то спектрограмма выводит значения s в положительном диапазоне Найквиста и не сохраняет полную мощность.
|
#
time —
моменты времени
вектор
Details
Моменты времени, возвращаемые в виде вектора. Значения времени в t соответствуют середине каждого сегмента.
#
p —
плотность энергетического спектра
матрица
Details
Плотность энергетического спектра (PSD) или спектр мощности, возвращаемый в виде матрицы.
-
Если
x— вещественное число, аfreqrangeне указан или установлен в значение"onesided", тоpсодержит одностороннюю модифицированную периодограмму PSD или спектра мощности каждого сегмента. Функция умножает мощность на2на всех частотах, кроме0и частоты Найквиста, чтобы сохранить общую мощность. -
Если
x— комплексное число или еслиfreqrangeустановлен в значение"twosided"или"centered", тоpсодержит двустороннюю модифицированную периодограмму PSD или спектра мощности каждого сегмента. -
Если вы зададите вектор нормализованных или циклических частот в
freq, тоpбудет содержать модифицированную периодограмму PSD или спектра мощности каждого сегмента, вычисленную на входных частотах.
Примеры
Значения по умолчанию для спектрограммы
Details
Сгенерируем отсчетов сигнала, представляющего собой сумму синусоид. Нормализованные частоты синусоид составляют рад/отсчет и рад/отсчет. Синусоида с более высокой частотой имеет в раз большую амплитуду, чем другая синусоида.
import EngeeDSP.Functions: spectrogram
N = 1024
n = 0:N-1
w0 = 2pi / 5
x = sin.(w0 * n) .+ 10 * sin.(2 * w0 * n)
Вычислим оконное преобразование Фурье, используя параметры функции по умолчанию. Построим спектрограмму.
spectrogram(x,freqloc="yaxis")

Спектрограмма комплексного сигнала
Details
Сгенерируем 512 отсчетов частотной модуляции с синусоидально изменяющимся частотным составом.
Вычислим центрированное двустороннее оконное преобразование Фурье частотной модуляции. Разделим сигнал на сегменты по 32 отсчета с перекрытием в 16 отсчетов. Укажем 64 точки дискретного преобразования Фурье. Построим спектрограмму.
import EngeeDSP.Functions: spectrogram
N = 512
n = collect(0:N-1)
x = @. exp(im*pi*sin(8*n/N)*32)
spectrogram(x, 32, 16, 64, centered = true, freqloc="yaxis")

Отобразим результаты в виде данных.
spectrogram(x, 32, 16, 64, centered = true, freqloc="yaxis", out=:data)
(ComplexF64[-0.004799003568266007 - 0.0505661817205643im 0.04928181142575791 - 0.08168061694423136im … 0.06661413792128079 + 0.005582741943515573im 0.06563897996263357 - 0.03809302080510557im; 0.08251130568172917 - 0.009465091175966937im 0.01113491156754788 + 0.0019301579098507408im … -0.0033130937073331257 + 0.04853476281962177im 0.013263617768417113 + 0.025903864451430003im; … ; -0.009649405525420679 - 0.05239849276178002im 0.04401940995315085 - 0.0914065432314291im … 0.06820937107281076 - 6.325260894440854e-5im 0.06223032913485138 - 0.04414639111404428im; 0.08717673328273712 - 0.01888297777102288im 0.0132333274580263 + 0.0005901735083794213im … 0.002529248964486752 + 0.05007735729089752im 0.017119544189724056 + 0.024263377986849743im], [-3.043417883165112, -2.945243112740431, -2.84706834231575, -2.748893571891069, -2.650718801466388, -2.5525440310417067, -2.4543692606170255, -2.356194490192345, -2.2580197197676637, -2.1598449493429825 … 2.2580197197676637, 2.3561944901923453, 2.454369260617026, 2.5525440310417067, 2.6507188014663883, 2.748893571891069, 2.8470683423157497, 2.9452431127404313, 3.043417883165112, 3.1415926535897936], [2.5464790894703255 5.092958178940651 … 76.39437268410977 78.94085177358009], [3.3313443855835635e-5 0.00011750773553006685 … 5.770022477295285e-5 7.436932913915006e-5; 8.906550573571001e-5 1.6490579693362508e-6 … 3.0558345518866313e-5 1.0935898096347522e-5; … ; 3.665443356386854e-5 0.00013290498623780864 … 6.0074958410346855e-5 7.516942675213517e-5; 0.00010273510683279117 2.2657190730313684e-6 … 3.246341980220297e-5 1.1385977847041683e-5])
Дополнительно
Оконное преобразование Фурье (ОПФ)
Details
Оконное преобразование Фурье (ОПФ) используется для анализа изменения частотного содержания нестационарного сигнала с течением времени. Величина квадрата ОПФ известна как спектрограмма временно-частотного представления сигнала.
ОПФ сигнала вычисляется путем скольжения окна анализа длины по сигналу и вычисления дискретного преобразования Фурье (ДПФ) каждого сегмента оконных данных. Окно скользит по исходному сигналу с интервалом в отсчетов, что эквивалентно отсчетов перекрытия между соседними сегментами. Большинство оконных функций сужаются на краях, чтобы избежать спектрального звона. ДПФ каждого сегмента с окном складывается в комплексную матрицу, содержащую величину и фазу для каждой точки во времени и на частоте. Матрица ОПФ имеет столбцов, где — длина сигнала , а символы обозначают функцию округления вниз. Количество строк в матрице равно , числу точек ДПФ, для центрированных и двусторонних преобразований и нечетному числу, близкому к , для односторонних преобразований вещественных сигналов.
-й столбец матрицы ОПФ содержит ДПФ оконных данных, центрированных по времени :
Если в оконном преобразовании Фурье есть нули, его преобразование в децибелы приводит к отрицательным бесконечным значениям, которые невозможно вывести на график. Чтобы избежать этой потенциальной трудности, функция spectrogram добавляет eps к оконному преобразованию Фурье, когда вы вызываете ее без выходных аргументов.
|
Литература
-
Boashash, Boualem, ed. «Time Frequency Signal Analysis and Processing: A Comprehensive Reference.» Second edition. EURASIP and Academic Press Series in Signal and Image Processing. Amsterdam and Boston: Academic Press, 2016.
-
Chassande-Motin, Éric, François Auger, and Patrick Flandrin. «Reassignment.» In Time-Frequency Analysis: Concepts and Methods. Edited by Franz Hlawatsch and François Auger. London: ISTE/John Wiley and Sons, 2008.
-
Fulop, Sean A., and Kelly Fitz. «Algorithms for computing the time-corrected instantaneous frequency (reassigned) spectrogram, with applications.» Journal of the Acoustical Society of America. Vol. 119, January 2006, pp. 360–371.
-
Oppenheim, Alan V., and Ronald W. Schafer, with John R. Buck. «Discrete-Time Signal Processing.» Second edition. Upper Saddle River, NJ: Prentice Hall, 1999.
-
Rabiner, Lawrence R., and Ronald W. Schafer. «Digital Processing of Speech Signals.» Englewood Cliffs, NJ: Prentice-Hall, 1978.