spectralCrest
Спектральный гребень для сигналов и спектрограмм.
| Библиотека |
|
Синтаксис
Вызов функции
-
crest,spectralPeak,spectralMean = spectralCrest(x,f)— возвращает спектральный гребень сигналаxс течением времени, пик спектра и спектральное среднее. Интерпретацияxфункцией зависит от формыf.
-
crest,spectralPeak,spectralMean = spectralCrest(x,f,Name,Value)— задает параметры с использованием одного или нескольких аргументов типа «имя-значение».
-
spectralCrest(___,out=:plot)— строит график спектрального гребня.-
Если входной сигнал находится во временной области, график спектрального гребня строится в зависимости от времени.
-
Если входной сигнал находится в частотной области, график спектрального гребня строится в зависимости от номера кадра.
-
Аргументы
Входные аргументы
#
f —
частота дискретизации или вектор частот (Гц)
скаляр | вектор
Details
Частота дискретизации или вектор частот в Гц, заданные как скаляр или вектор соответственно. Интерпретация x функцией зависит от формы f:
-
Если
f— скаляр,xинтерпретируется как сигнал во временной области, аf— как частота дискретизации. В этом случаеxдолжен быть вещественным вектором или матрицей. Еслиxзадан как матрица, столбцы интерпретируются как отдельные каналы. -
Если
f— вектор,xинтерпретируется как сигнал в частотной области, аf— как частоты в Гц, соответствующие строкамx. В этом случаеxдолжен быть вещественным массивом размером , где — количество спектральных значений на заданных частотахf, — количество отдельных спектров, а — количество каналов. -
Количество строк
x, , должно быть равно количеству элементовf.
| Типы данных |
|
Входные аргументы «имя-значение»
Укажите необязательные пары аргументов в виде Name,Value, где Name — имя аргумента, а Value — соответствующее значение. Аргументы типа «имя-значение» должны располагаться после других аргументов, но порядок пар не имеет значения.
Используйте запятые для разделения имени и значения, а Name заключите в кавычки.
Следующие аргументы типа «имя-значение» применяются, если x — сигнал во временной области. Если x — сигнал в частотной области, аргументы типа «имя-значение» игнорируются.
|
#
Window —
окно, применяемое во временной области
rectwin(round(f*0.03)) (по умолчанию) | вектор
Details
Окно, применяемое во временной области, заданное как вещественный вектор. Количество элементов вектора должно находиться в диапазоне [1,size(x,1)]. Количество элементов вектора также должно быть больше OverlapLength.
| Типы данных |
|
#
FFTLength —
количество элементов в ДПФ
numel(Window) (по умолчанию) | положительный целочисленный скаляр
Details
Количество элементов, используемых для вычисления ДПФ оконных входных выборок, заданное как положительный целочисленный скаляр. Если не аргумент не задан, FFTLength по умолчанию равен количеству элементов в Window.
| Типы данных |
|
#
SpectrumType —
тип спектра
"power" (по умолчанию) | "magnitude"
Details
Тип спектра, заданный как "power" или "magnitude":
-
"power"— спектральный гребень рассчитывается для одностороннего спектра мощности; -
"magnitude"— спектральный гребень рассчитывается для одностороннего амплитудного спектра.
| Типы данных |
|
#
out —
тип выходных данных
:data (по умолчанию) | :plot
Details
Тип выходных данных:
-
:data— функция возвращает данные; -
:plot— функция возвращает график.
Примеры
Спектральный гребень сигнала во временной области
Details
Создадим ЛЧМ-сигнал с белым гауссовским шумом и рассчитаем гребень, используя параметры по умолчанию.
import EngeeDSP.Functions: chirp, randn, spectralCrest
fs = 1000
t = (0:1/fs:10)
f1 = 300
f2 = 400
x = chirp(t, f1, 10, f2) + randn(length(t), 1)
crest = spectralCrest(x, fs)
Построим график зависимости спектрального гребня от времени.
spectralCrest(x, fs, out=:plot)

([4.987046327015055, 5.236871947723927, 7.544804457899835, 10.3772996669661, 7.705619466415934, 5.99985432220379, 4.868975479415114, 5.902444766668258, 5.6781203280701815, 6.523480840096338 … 7.803614225515488, 8.289150599849984, 8.382547366360493, 6.028262627692971, 6.683863065009292, 5.194224063455523, 3.7499682104979466, 5.218718311184415, 3.207068721139457, 6.082745967003252], [0.439680011925611, 0.601102975643176, 1.034484757673182, 1.3330997948299792, 0.8496287200130014, 0.4947671774843161, 0.43476209921716236, 0.5070692566692776, 0.6240111902833801, 0.8937070726200211 … 0.962580947281854, 1.2053879463201618, 1.4011032035761652, 0.8161989525511318, 0.716299380591645, 0.37571979028258434, 0.25389759893331165, 0.48721486174074174, 0.31362312100811496, 0.6811440879165471], [0.08816441298005284, 0.11478282868925793, 0.13711220263502233, 0.12846307205270513, 0.11026092369549412, 0.08246319842355515, 0.08929231643396737, 0.08590834420556587, 0.1098974932247451, 0.1369984973554123 … 0.1233506577163312, 0.14541754692476894, 0.16714527724577494, 0.1353953871886124, 0.10716847033290458, 0.072334151490691, 0.06770660034464596, 0.09335910326805238, 0.09779120694884458, 0.11197970318200254], Plot{Plots.PlotlyJSBackend() n=1})
Спектральный гребень сигнала в частотной области
Details
Создадим ЛЧМ-сигнал с белым гауссовским шумом, а затем рассчитаем спектрограмму с помощью функции stft.
import EngeeDSP.Functions: chirp, randn, stft
fs = 1000
t = (0:1/fs:10)'
f1 = 300
f2 = 400
x = chirp(t, f1, 10, f2) + randn(size(t)...)
s, f = stft(x, fs, "FrequencyRange", "onesided")
s = abs.(s).^2
Рассчитаем гребень спектрограммы с течением времени.
import EngeeDSP.Functions: spectralCrest
crest = spectralCrest(s, f)
Построим график зависимости спектрального гребня от номера кадра.
spectralCrest(s, f, out=:plot)

([13.278262719339581, 11.423943909400123, 10.704344652278133, 7.265409265608759, 15.671348771900583, 17.14664360019774, 16.805060471491807, 14.696328543184194, 17.09013028905847, 15.936360071580983 … 16.710312667671143, 16.761812477538534, 12.62023888820894, 10.886155724606253, 13.208164879678929, 15.219986950457587, 11.520098623729307, 16.272350151097733, 18.269299846830197, 16.45774860128549], [1038.875221526367, 1003.8420042054646, 878.9222908403066, 340.3639889446644, 1013.9709212810934, 1511.5917119138305, 1166.5576026614406, 845.4456363019548, 1122.2172446705913, 1132.3238949123497 … 1483.6967321132968, 1213.326351390993, 859.9980861071526, 864.0666804644605, 1179.3520050171578, 766.8614058144813, 652.278982569946, 1323.7297764621535, 1825.3095783670533, 1640.464109040237], [78.23879098379803, 87.87175533831703, 82.10893047555709, 46.847187336823175, 64.70221140755848, 88.15671143339087, 69.41704283899455, 57.52767664506604, 65.66463951354794, 71.05285584828131 … 88.78928609060397, 72.38634563039626, 68.14435873402103, 79.37298549858043, 89.28961863821208, 50.38515527711577, 56.62095472224257, 81.34840783111189, 99.91130441070254, 99.67730998832384], Plot{Plots.PlotlyJSBackend() n=1})
Указание параметров, отличных от стандартных
Details
Создадим ЛЧМ-сигнал с белым гауссовским шумом.
import EngeeDSP.Functions: chirp, randn
fs = 1000
t = (0:1/fs:10)
f1 = 300
f2 = 400
x = chirp(t, f1, 10, f2) + randn(length(t), 1)
Рассчитаем пик спектра мощности с течением времени. Рассчитаем пик для окон Хэмминга длительностью 50 мс с перекрытием 25 мс. Используем диапазон от 62.5 Гц до fs/2 для расчета пика.
import EngeeDSP.Functions: spectralCrest, hamming
crest = spectralCrest(x, fs,
"Window", hamming(round(Int, 0.05*fs)),
"OverlapLength", round(Int, 0.025*fs),
"Range", [62.5, fs/2])
Построим график зависимости гребня от времени.
spectralCrest(x, fs,
"Window", hamming(round(Int, 0.05*fs)),
"OverlapLength", round(Int, 0.025*fs),
"Range", [62.5, fs/2],
out=:plot)

([9.538007545680625, 5.730876827698805, 5.032509222116753, 8.153962933846854, 6.409421405881727, 5.675496154818911, 3.936388047909756, 6.4173265830507695, 8.571412474805326, 8.245914575869225 … 9.01887114861341, 6.801343613682713, 4.948170085776451, 4.303209591503631, 6.032361588552264, 5.892015558392096, 4.323588797979937, 4.386216853001777, 5.755291814282484, 8.589943998230682], [1.072192257755449, 0.7611738870970485, 0.6151487100923281, 0.694504549763681, 0.41087548375427874, 0.35978967731876343, 0.38720592502049855, 0.3867047677182591, 0.846628743616088, 0.5501511870614189 … 0.9982941134388452, 0.6086401775262335, 0.16918248208293274, 0.2568272244259427, 0.4861993272274322, 0.563021155034732, 0.48023412546096145, 0.37966201056426135, 0.5141970164720814, 1.0541601271133798], [0.11241260322141401, 0.1328197952917255, 0.12223498913601331, 0.08517386642522173, 0.06410492581705285, 0.06339351970369599, 0.0983657912552872, 0.06025948075318637, 0.09877353891259522, 0.06671803133534474 … 0.11068947510047597, 0.08948822645892963, 0.03419091889530009, 0.0596827133247307, 0.08059850526037807, 0.09555663074120903, 0.11107303397708311, 0.08655796630402203, 0.08934334401533499, 0.12272025607274167], Plot{Plots.PlotlyJSBackend() n=1})
Алгоритмы
Спектральный гребень рассчитывается, как описано в [1]:
где
-
— спектральное значение в бине ;
-
и — границы полосы в бинах, по которым рассчитывается спектральный гребень.