Вейвлет, рассеивающий шкалу инвариантности и сверхдискретизацию

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

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

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

Создайте среду рассеивания вейвлета со шкалой инвариантности 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 log2 шкала.

Создайте рассеивающуюся среду со шкалой инвариантности 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

Смотрите также

| |