Кратковременный слой преобразования Фурье
Слой STFT вычисляет кратковременное преобразование Фурье входа. Использование этого слоя требует Deep Learning Toolbox™.
создает слой Short-Time Fourier Transform (STFT). Вход к layer
= stftLayerstftLayer
должен быть dlarray
Объект (Deep Learning Toolbox) в "CBT"
формат с размером вдоль измерения времени, больше, чем длина Window
.
задает дополнительные параметры с помощью аргументов name-value. Можно задать аналитическое окно и формат выхода среди других.layer
= stftLayer(Name=Value
)
Window
— Окно Analysishann
(128, 'периодический')
(значение по умолчанию) | векторЭто свойство доступно только для чтения.
Окно Analysis использовалось для расчета STFT в виде вектора с двумя или больше элементами.
Пример: (1-cos(2*pi*(0:127)'/127))/2
и
оба задают окно Hann длины 128.hann
(128)
Типы данных: double |
single
OverlapLength
— Количество перекрытых выборок
(значение по умолчанию) | положительное целое числоЭто свойство доступно только для чтения.
Количество перекрытых выборок в виде положительного целого числа, строго меньшего, чем длина Window
.
Шаг между последовательными окнами является различием между длиной окна и количеством перекрытых выборок.
Типы данных: double |
single
FFTLength
— Количество точек ДПФ
(значение по умолчанию) | положительное целое числоЭто свойство доступно только для чтения.
Количество точек частоты использовалось для расчета дискретного преобразования Фурье в виде положительного целого числа, больше, чем или равный длине окна. Если не заданный, этот аргумент значения по умолчанию к длине окна.
Если длина входных данных вдоль измерения времени меньше количества точек ДПФ, stftLayer
правильные клавиатуры данные и окно с нулями, таким образом, у них есть длина, равная FFTLength
.
Типы данных: double |
single
TransformMode
— Слой преобразовывает режим"mag"
(значение по умолчанию) | "squaremag"
| "logmag"
| "logsquaremag"
| "realimag"
Слой преобразовывает режим в виде одного из них:
"mag"
— Величина STFT
"squaremag"
— STFT придал величине квадратную форму
"logmag"
— Натуральный логарифм величины STFT
"logsquaremag"
— Натуральный логарифм STFT придал величине квадратную форму
"realimag"
— Действительные и мнимые части STFT, конкатенированного по измерению канала
Типы данных: char |
string
OutputMode
— Режим вывода слоя"spatiotemporal"
(значение по умолчанию) | "spatial"
| "temporal"
Режим вывода слоя в виде одного из них:
"spatiotemporal"
— Отформатируйте выход как последовательность 1D изображений, где высота изображения соответствует частоте, второе измерение соответствует каналу, третья размерность соответствует пакету, и четвертая размерность соответствует времени.
Можно использовать этот режим вывода, чтобы питать выход stftLayer
к 1D сверточному слою, когда это необходимо, чтобы применить операцию свертки вдоль частоты. Для получения дополнительной информации смотрите convolution1dLayer
(Deep Learning Toolbox).
"spatial"
— Отформатируйте выход как последовательность 2D изображений, где высота изображения соответствует частоте, и ширина изображения соответствует времени. Третьи и четвертые размерности соответствуют каналу и пакету, соответственно.
Можно использовать этот режим вывода, чтобы питать выход stftLayer
к 2D сверточному слою, когда это необходимо, чтобы применить операцию свертки по двум пространственным измерениям. Для получения дополнительной информации смотрите convolution2dLayer
(Deep Learning Toolbox).
"temporal"
— Отформатируйте выход как 1D последовательность. Этот формат берет "spatiotemporal"
выходной формат и сглаживает высоту изображения в размерность канала. Второе измерение STFT, выход соответствует пакету и третьей размерности, соответствует времени.
Можно использовать этот режим вывода, чтобы питать выход stftLayer
к 1D сверточному слою, когда это необходимо, чтобы применить операцию свертки вдоль времени. Для получения дополнительной информации смотрите convolution1dLayer
(Deep Learning Toolbox). Можно также использовать этот режим вывода, чтобы использовать stftLayer
как часть рекуррентной нейронной сети. Для получения дополнительной информации смотрите lstmLayer
(Deep Learning Toolbox) и gruLayer
(Deep Learning Toolbox).
Типы данных: char |
string
WeightLearnRateFactor
— Множитель для скорости обучения веса
(значение по умолчанию) | неотрицательный скалярМножитель для скорости обучения веса в виде неотрицательного скаляра. Если не заданный, это свойство значения по умолчанию, чтобы обнулить, приводя к весам, которые не обновляются с обучением. Можно также установить это свойство с помощью setLearnRateFactor
(Deep Learning Toolbox) функция.
Типы данных: double |
single
Name
— Имя слоя''
(значение по умолчанию) | вектор символов | строковый скаляр
Имя слоя в виде вектора символов или строкового скаляра. Для Layer
вход массивов, trainNetwork
, assembleNetwork
, layerGraph
, и dlnetwork
функции автоматически присваивают имена к слоям с Name
установите на ''
.
Типы данных: char |
string
NumInputs
— Количество входных параметров
(значение по умолчанию)Это свойство доступно только для чтения.
Количество входных параметров слоя. Этот слой принимает один вход только.
Типы данных: double
InputNames
— Введите имена{'in'}
(значение по умолчанию)Это свойство доступно только для чтения.
Введите имена слоя. Этот слой принимает один вход только.
Типы данных: cell
NumOutputs
— Количество выходных параметров
(значение по умолчанию)Это свойство доступно только для чтения.
Количество выходных параметров слоя. Этот слой имеет один выход только.
Типы данных: double
OutputNames
— Выведите имена{'out'}
(значение по умолчанию)Это свойство доступно только для чтения.
Выведите имена слоя. Этот слой имеет один выход только.
Типы данных: cell
Сгенерируйте сигнал, произведенный на уровне 600 Гц в течение 2 секунд. Сигнал состоит из щебета с синусоидально различным содержимым частоты. Сохраните сигнал в массиве глубокого обучения с "CTB"
формат.
fs = 6e2;
x = vco(sin(2*pi*(0:1/fs:2)),[0.1 0.4]*fs,fs);
dlx = dlarray(x,"CTB");
Создайте кратковременный слой преобразования Фурье со свойствами по умолчанию. Создайте dlnetwork
объект, состоящий из последовательности, ввел слой и кратковременный слой преобразования Фурье. Задайте минимальную продолжительность последовательности 128 выборок. Запустите сигнал через predict
метод сети.
ftl = stftLayer; dlnet = dlnetwork([sequenceInputLayer(1,MinLength=128) ftl]); netout = predict(dlnet,dlx);
Преобразуйте сетевой выход в числовой массив. Используйте squeeze
функция, чтобы удалить длину 1 канал и пакетные размерности. Постройте величину STFT. Первая размерность массива соответствует частоте и второму ко времени.
q = extractdata(netout); waterfall(squeeze(q)') set(gca,XDir="reverse",View=[30 45]) xlabel("Frequency") ylabel("Time")
Сгенерируйте 3 × 160 (× 1), массив, содержащий один пакет синусоидального сигнала с 160 выборками, с тремя каналами. Нормированные частоты синусоиды являются π/4 рад/отсчетом, π/2 рад/отсчет и рад/отсчет 3π/4. Сохраните сигнал как dlarray
, определение размерностей в порядке. dlarray
переставляет измерения массива к "CBT"
форма ожидается нейронной сетью для глубокого обучения.
nch = 3;
N = 160;
x = dlarray(cos(pi.*(1:nch)'/4*(0:N-1)),"CTB");
Создайте кратковременный слой преобразования Фурье, который может использоваться с синусоидой. Задайте прямоугольное окно с 64 выборками, 48 выборок перекрытия между смежными окнами и точки ДПФ 10:24. Задайте режим вывода слоя как "spatial"
. По умолчанию слой выводит величину STFT.
stfl = stftLayer(Window=rectwin(64), ... OverlapLength=48, ... FFTLength=1024, ... OutputMode="spatial");
Создайте 2D слой dlnetwork
объект, содержащий последовательность, ввел слой и слой STFT, который вы только создали. Обработайте каждый канал синусоиды как функция. Задайте длину сигнала как минимальную длину последовательности для входного слоя.
layers = [sequenceInputLayer(nch,MinLength=N) stfl]; dlnet = dlnetwork(layers);
Запустите синусоиду через forward
метод сети.
dataout = forward(dlnet,x);
Преобразуйте сетевой выход в числовой массив. Используйте squeeze
функционируйте, чтобы свернуть размер 1 пакетная размерность. Постройте величину STFT отдельно для каждого канала в графике водопада.
q = squeeze(extractdata(dataout)); for kj = 1:nch subplot(nch,1,kj) waterfall(q(:,:,kj)') view(30,45) zlabel("Ch. "+string(kj)) end
Кратковременное преобразование Фурье (STFT) используется, чтобы анализировать, как содержимое частоты неустановившегося сигнала изменяется в зависимости от времени.
STFT сигнала вычисляется путем скольжения analysis window длины по сигналу и вычислению дискретного преобразования Фурье оконных данных. Окно скачкообразно двигается по исходному сигналу с промежутками в выборки. Функции окна Most сужаются в ребрах, чтобы избежать спектрального вызова. Если ненулевая длина перекрытия задан, добавление перекрытия, которое оконные сегменты компенсируют затухание сигнала в ребрах окна. ДПФ каждого оконного сегмента добавляется к матрице, которая содержит величину и фазу для каждого момента времени и частоты. Количеством столбцов в матрице STFT дают
где длина исходного сигнала и ⌊⌋ символы обозначают функцию пола. Количество строк в матрице равняется ДПФ N, количеству точек ДПФ, для и двухсторонних преобразований в центре и ⌊NDFT/2 ⌋ + 1 для односторонних преобразований.
Матрицей STFT дают таким образом, что элемент th этой матрицы
где
— Функция окна длины .
— ДПФ оконных данных сосредоточен во время .
— Скачкообразно переместите размер между последовательными ДПФ, размер транзитного участка является различием между длиной окна и длина перекрытия .
Величина, в квадрате из STFT, уступает spectrogram
представление спектральной плотности мощности функции.
dlstft
| stft
| istft
| stftmag2sig
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.