Этот пример показывает, как изменение инвариационной шкалы и коэффициента избыточной дискретизации влияет на выход преобразования вейвлет.
The InvarianceScale
свойство вейвлета времени устанавливает шкалу времени масштабирующего (lowpass) фильтра. Создайте вейвлет с длиной сигнала 10000 и шкалой инвариации 500. Получите банк фильтров.
sigLength = 1e4; sf = waveletScattering('SignalLength',sigLength,'InvarianceScale',500); [fb,f] = filterbank(sf);
Используйте функцию helper helperPlotScalingWavelet
для построения графика масштабирующего фильтра во времени вместе с действительной и мнимой частями наиболее грубого вейвлета из первой группы фильтров. Исходный код для helperPlotScalingWavelet
приведено в приложении. Поддержки масштабирующего фильтра и вейвлет по существу являются размером инвариационной шкалы.
helperPlotScalingWavelet(fb,f,500)
Сгенерируйте случайный сигнал и используйте featureMatrix
для получения матрицы функций рассеяния для сигнала и сети рассеяния.
x = randn(1,sigLength);
smat = featureMatrix(sf,x);
whos smat
Name Size Bytes Class Attributes smat 102x79 64464 double
Каждая строка матрицы функций является вектором, который был свернут (отфильтрован) с lowpass (после другой вейвлет). Вторым измерением матрицы функций является разрешение по времени. Выход фильтрации максимально уменьшается без сглаживания, что называется «критически сглаживанием». Величина понижающей дискретизации зависит от полосы пропускания фильтра. Чем больше шкала инвариации, тем больше временная поддержка функции lowpass (масштабирование) и, соответственно, тем больше мы можем понижать.
Получите преобразование рассеяния сигнала.
[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
. The OversamplingFactor
определяет, насколько коэффициенты рассеяния переизбраны относительно критически пониженных значений. Коэффициент на шкала.
Создайте рассеивающую сеть с инвариационной шкалой 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