Этот пример показывает, как изменение шкалы инвариантности и коэффициента избыточной дискретизации влияет на выходной сигнал преобразования вейвлет-рассеяния.
InvarianceScale свойство сети вейвлет-временного рассеяния устанавливает шкалу времени фильтра масштабирования (нижних частот). Создайте сеть вейвлет-рассеяния с длиной сигнала 10000 и шкалой инвариантности 500. Получите банк фильтров.
sigLength = 1e4; sf = waveletScattering('SignalLength',sigLength,'InvarianceScale',500); [fb,f] = filterbank(sf);
Использовать функцию помощника helperPlotScalingWavelet строят график масштабного фильтра во времени вместе с действительной и мнимой частями наиболее масштабного вейвлета из первого набора фильтров. Исходный код для helperPlotScalingWavelet перечислены в приложении. Опоры масштабного фильтра и вейвлета по существу имеют размер шкалы инвариантности.
helperPlotScalingWavelet(fb,f,500)

Генерировать случайный сигнал и использовать featureMatrix получение матрицы признаков рассеяния для сигнальной и рассеивающей сети.
x = randn(1,sigLength);
smat = featureMatrix(sf,x);
whos smatName Size Bytes Class Attributes smat 102x79 64464 double
Каждая строка матрицы признаков является вектором, который свернут (отфильтрован) с фильтром нижних частот (после другой вейвлет-фильтрации). Вторым размером матрицы элементов является разрешение по времени. Выходной сигнал фильтрации максимально понижается без наложения, что называется «критическим понижением дискретизации». Величина понижающей дискретизации зависит от полосы пропускания фильтра. Чем больше масштаб инвариантности, тем больше временная поддержка функции нижних частот (масштабирования) и, соответственно, тем больше мы можем преуменьшить.
Получить преобразование рассеяния сигнала.
[S,~] = scatteringTransform(sf,x);
S{2}ans=41×4 table
signals path bandwidth resolution
_____________ _______ _________ __________
{79x1 double} 0 1 0.0084478 -7
{79x1 double} 0 2 0.0084478 -7
{79x1 double} 0 3 0.0084478 -7
{79x1 double} 0 4 0.0084478 -7
{79x1 double} 0 5 0.0084478 -7
{79x1 double} 0 6 0.0084478 -7
{79x1 double} 0 7 0.0084478 -7
{79x1 double} 0 8 0.0084478 -7
{79x1 double} 0 9 0.0084478 -7
{79x1 double} 0 10 0.0084478 -7
{79x1 double} 0 11 0.0084478 -7
{79x1 double} 0 12 0.0084478 -7
{79x1 double} 0 13 0.0084478 -7
{79x1 double} 0 14 0.0084478 -7
{79x1 double} 0 15 0.0084478 -7
{79x1 double} 0 16 0.0084478 -7
⋮
Векторы коэффициентов рассеяния, signals, имеют длину 79, а разрешение -7. Это означает, что мы ожидаем приблизительно коэффициентов в каждом векторе.
Создайте сеть вейвлет-рассеяния со шкалой инвариантности 200. Получить преобразование рассеяния сигнала. Поскольку масштаб инвариантности меньше, пропускная способность масштабного фильтра увеличивается, и мы не можем так сильно понизить выборку без наложения. Следовательно, количество коэффициентов рассеяния увеличивается.
sf = waveletScattering('SignalLength',sigLength,'InvarianceScale',200); [S,~] = scatteringTransform(sf,x); S{2}
ans=30×4 table
signals path bandwidth resolution
______________ _______ _________ __________
{157x1 double} 0 1 0.02112 -6
{157x1 double} 0 2 0.02112 -6
{157x1 double} 0 3 0.02112 -6
{157x1 double} 0 4 0.02112 -6
{157x1 double} 0 5 0.02112 -6
{157x1 double} 0 6 0.02112 -6
{157x1 double} 0 7 0.02112 -6
{157x1 double} 0 8 0.02112 -6
{157x1 double} 0 9 0.02112 -6
{157x1 double} 0 10 0.02112 -6
{157x1 double} 0 11 0.02112 -6
{157x1 double} 0 12 0.02112 -6
{157x1 double} 0 13 0.02112 -6
{157x1 double} 0 14 0.02112 -6
{157x1 double} 0 15 0.02112 -6
{157x1 double} 0 16 0.02112 -6
⋮
Поскольку шкала инвариантности является таким важным гиперпараметром для сетей рассеяния (одним из наиболее важных для производительности), следует установить значение, основываясь на рассматриваемой проблеме, а не потому, что нужно определенное количество коэффициентов. Вы можете использовать OversamplingFactor свойство для корректировки количества коэффициентов для данного InvarianceScale. OversamplingFactor определяет, насколько коэффициенты рассеяния избыточно дискретизированы относительно критически пониженных значений. Коэффициент имеет шкалу log2.
Создание сети рассеяния с масштабом инвариантности 500 и OversamplingFactor равно 1. Получить преобразование рассеяния сигнала. Как и ожидалось, количество путей рассеяния больше, чем в случае, когда InvarianceScale составляет 200. По настройке OversamplingFactor 1, преобразование рассеяния возвращает в два раза больше коэффициентов для каждого пути рассеяния относительно критически дискретизированного числа. Размер возвращаемых векторов коэффициентов рассеяния равен размеру, когда сеть рассеяния имеет шкалу инвариантности 200 с критической понижающей выборкой по умолчанию.
sf = waveletScattering('SignalLength',sigLength,'InvarianceScale',500,'OversamplingFactor',1); [S,~] = scatteringTransform(sf,x); S{2}
ans=41×4 table
signals path bandwidth resolution
______________ _______ _________ __________
{157x1 double} 0 1 0.0084478 -6
{157x1 double} 0 2 0.0084478 -6
{157x1 double} 0 3 0.0084478 -6
{157x1 double} 0 4 0.0084478 -6
{157x1 double} 0 5 0.0084478 -6
{157x1 double} 0 6 0.0084478 -6
{157x1 double} 0 7 0.0084478 -6
{157x1 double} 0 8 0.0084478 -6
{157x1 double} 0 9 0.0084478 -6
{157x1 double} 0 10 0.0084478 -6
{157x1 double} 0 11 0.0084478 -6
{157x1 double} 0 12 0.0084478 -6
{157x1 double} 0 13 0.0084478 -6
{157x1 double} 0 14 0.0084478 -6
{157x1 double} 0 15 0.0084478 -6
{157x1 double} 0 16 0.0084478 -6
⋮
function helperPlotScalingWavelet(fb,f,invScale) % This function is in support of wavelet scattering examples only. It may % change or be removed in a future release. fBin = diff(f(1:2)); time = (-1/2:fBin:1/2-fBin)*1e4; phi = ifftshift(ifft(fb{1}.phift)); psiL1 = ifftshift(ifft(fb{2}.psift(:,end))); figure plot(time,phi,'b','LineWidth',1.5) grid on hold on plot(time,real(psiL1)); plot(time,imag(psiL1)); plot([-invScale/2 -invScale/2],[-6e-3 6.5e-3],'k--') plot([invScale/2 invScale/2],[-6e-3 6.5e-3],'k--') ylim([-6e-3 6.5e-3]) xlim([-invScale invScale]) legend('Scaling Function','Wavelet-Real Part','Wavelet-Imaginary Part') end