Инвариационная шкала вейвлет-рассеяния и избыточная дискретизация

Этот пример показывает, как изменение инвариационной шкалы и коэффициента избыточной дискретизации влияет на выход преобразования вейвлет.

Шкала инвариации

The InvarianceScale свойство вейвлета времени устанавливает шкалу времени масштабирующего (lowpass) фильтра. Создайте вейвлет с длиной сигнала 10000 и шкалой инвариации 500. Получите банк фильтров.

sigLength = 1e4;
sf = waveletScattering('SignalLength',sigLength,'InvarianceScale',500);
[fb,f] = filterbank(sf);

Используйте функцию helper helperPlotScalingWavelet для построения графика масштабирующего фильтра во времени вместе с действительной и мнимой частями наиболее грубого вейвлета из первой группы фильтров. Исходный код для helperPlotScalingWavelet приведено в приложении. Поддержки масштабирующего фильтра и вейвлет по существу являются размером инвариационной шкалы.

helperPlotScalingWavelet(fb,f,500)

Figure contains an axes. The axes contains 5 objects of type line. These objects represent Scaling Function, Wavelet-Real Part, Wavelet-Imaginary Part.

Сгенерируйте случайный сигнал и используйте 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. Это означает, что мы ожидаем приблизительно 104/27 коэффициенты в каждом векторе.

Создайте вейвлет сеть с инвариационной шкалой 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 определяет, насколько коэффициенты рассеяния переизбраны относительно критически пониженных значений. Коэффициент на 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

См. также

| |