В этом примере показано, как изменение шкалы инвариантности и сверхдискретизация фактора влияют на выход рассеивания вейвлета, преобразовывают.
InvarianceScale
свойство времени вейвлета, рассеивая среду устанавливает масштаб времени масштабирующегося (lowpass) фильтр. Создайте среду рассеивания вейвлета с длиной сигнала 10 000 и шкалой инвариантности 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 smat
Name Size Bytes Class Attributes smat 109x79 68888 double
Каждая строка матрицы функции является вектором, к которому применили операцию свертки (отфильтрованный) с фильтром lowpass (после другой фильтрации вейвлета). Второе измерение матрицы функции является разрешением времени. Выход фильтрации прорежен как можно больше без искажения, что называется "критически субдискретизацией". Объем субдискретизации зависит от пропускной способности фильтра. Чем больше шкала инвариантности, тем больше поддержка времени lowpass (масштабирование) функционирует и соответственно больше мы можем проредить.
Получите рассеивающееся преобразование сигнала.
[S,~] = scatteringTransform(sf,x); S{2}
ans=40×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=29×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
задает, насколько рассеивающиеся коэффициенты сверхдискретизированы относительно критически прореженных значений. Фактор находится на a шкала.
Создайте рассеивающуюся среду со шкалой инвариантности 500, и OversamplingFactor
равняйтесь 1. Получите рассеивающееся преобразование сигнала. Как ожидалось количество рассеивающихся путей больше в случае где InvarianceScale
200. Установкой OversamplingFactor
к 1, рассеивающееся преобразование возвращает в два раза больше коэффициентов для каждого пути к рассеиванию относительно критически произведенного номера. Размер рассеивающихся возвращенных векторов коэффициентов равен размеру, когда рассеивающаяся среда имеет шкалу инвариантности 200 с критической субдискретизацией по умолчанию.
sf = waveletScattering('SignalLength',sigLength,'InvarianceScale',500,'OversamplingFactor',1); [S,~] = scatteringTransform(sf,x); S{2}
ans=40×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