exponenta event banner

Шкала инвариантности вейвлет-рассеяния и избыточная выборка

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

Шкала инвариантности

InvarianceScale свойство сети вейвлет-временного рассеяния устанавливает шкалу времени фильтра масштабирования (нижних частот). Создайте сеть вейвлет-рассеяния с длиной сигнала 10000 и шкалой инвариантности 500. Получите банк фильтров.

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

Использовать функцию помощника 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              

Каждая строка матрицы признаков является вектором, который свернут (отфильтрован) с фильтром нижних частот (после другой вейвлет-фильтрации). Вторым размером матрицы элементов является разрешение по времени. Выходной сигнал фильтрации максимально понижается без наложения, что называется «критическим понижением дискретизации». Величина понижающей дискретизации зависит от полосы пропускания фильтра. Чем больше масштаб инвариантности, тем больше временная поддержка функции нижних частот (масштабирования) и, соответственно, тем больше мы можем преуменьшить.

Получить преобразование рассеяния сигнала.

[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. 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

См. также

| |