dualtree

Q-сдвиг Кингсбери 1D двойной древовидный комплексный вейвлет преобразовывает

Описание

[A,D] = dualtree(X) возвращает 1D двойной древовидный комплексный вейвлет преобразовывает (DTCWT) X. Выход A матрица итогового уровня с действительным знаком, масштабирующего (lowpass) коэффициенты. Выход D L-by-1 массив ячеек коэффициентов вейвлета с комплексным знаком, где L является уровнем преобразования.

Вход X должен иметь по крайней мере две выборки. DTCWT получен по умолчанию вниз, чтобы выровнять floor(log2N), где N является длиной X если X вектор и размерность строки X если X матрица. Если N является нечетным, X расширен одной выборкой путем отражения последнего элемента X.

По умолчанию, dualtree использует почти симметричную биоортогональную пару фильтра с длинами 5 (масштабирующий фильтр) и 7 (фильтр вейвлета) для уровня 1 и ортогональной пары фильтра вейвлета К-шифта Гильберта длины 10 для уровней, больше, чем или равный 2.

[___,Ascale] = dualtree(X) возвращает масштабирующийся (lowpass) коэффициенты на каждом уровне.

пример

[___] = dualtree(X,Name,Value) задает аргументы пары "имя-значение" использования дополнительных опций. Например, 'Level',10 задает разложение вниз к уровню 10.

Примеры

свернуть все

Загрузите сигнал ECG.

load wecg
plot(wecg)
axis tight

Получите 4-уровневое двойное древовидное преобразование. Возвратите приближение (lowpass) коэффициенты на всех уровнях.

[a,d,as] = dualtree(wecg,'Level',4);

Постройте коэффициенты вейвлета итогового уровня от дерева A и дерева B.

figure
subplot(2,1,1)
plot(real(d{4}))
axis tight
title('Tree A')
subplot(2,1,2)
plot(imag(d{4}))
axis tight
title('Tree B')

Постройте коэффициенты lowpass на каждом уровне преобразования.

figure
for k=1:4
    subplot(2,2,k)
    plot(as{k})
    axis tight
    title(['Level: ',num2str(k)])
end

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

Загрузите сигнал ECG. Сигнал имеет 2 048 выборок.

load wecg
len = numel(wecg);
plot(wecg)
axis tight

Создайте два 1 3000 нулевых вектора. Вставьте сигнал ECG в различные сегменты каждого нулевого вектора.

shift1 = 328;
shift2 = 368;
vec1 = zeros(1,3000);
vec2 = zeros(1,3000);
vec1(shift1+[1:len]) = wecg;
vec2(shift2+[1:len]) = wecg;

Получите двойное древовидное преобразование обоих векторов. Используйте настройки по умолчанию.

[a1,d1] = dualtree(vec1);
[a2,d2] = dualtree(vec2);

Вычислите энергию в каждой шкале для обоих разложений. Обратите внимание на то, что энергетическое распределение переключенных сигналов через все шкалы остается приблизительно то же самое.

energy1 = cell2mat(cellfun(@(x)(sum(abs(x).^2)),d1,'uni',0));
energy2 = cell2mat(cellfun(@(x)(sum(abs(x).^2)),d2,'uni',0));
levels =cell(numel(energy1),1);
for k=1:numel(energy1)
    levels{k} = sprintf('Level %d',k);
end
energies = table(levels,energy1,energy2)
energies=11×3 table
       levels       energy1    energy2
    ____________    _______    _______

    {'Level 1' }    16.014     16.014 
    {'Level 2' }    19.095     19.095 
    {'Level 3' }     35.99      35.99 
    {'Level 4' }    25.141     25.065 
    {'Level 5' }     16.81     17.452 
    {'Level 6' }    9.7078      9.161 
    {'Level 7' }    2.3201     2.0513 
    {'Level 8' }    8.3808     8.4197 
    {'Level 9' }    23.006      22.56 
    {'Level 10'}    70.764     73.964 
    {'Level 11'}    64.097     59.022 

Входные параметры

свернуть все

Входные данные в виде вектора с действительным знаком, матрицы или расписания. Вход X должен иметь по крайней мере две выборки. Если X расписание, оно может содержать одну векторную или матричную переменную, или оно может содержать несколько переменных, каждый содержащий вектор-столбец. Если X матрица, dualtree работает со столбцами X.

Типы данных: double | single

Аргументы в виде пар имя-значение

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'LevelOneFilter','antonini','Level',4

Уровень разложения в виде положительного целого числа, меньше чем или равного floor(log2N), где N является длиной X если X вектор и размерность строки X если X матрица. Если незаданный, Level значения по умолчанию к floor(log2N).

Биоортогональный фильтр, чтобы использовать в анализе первого уровня в виде:

  • 'legall' — Фильтр LeGall 5/3 [3]

  • 'nearsym13_19' — (13,19) - касаются почти ортогонального фильтра [2]

  • 'nearsym5_7' — (5,7) - касаются почти ортогонального фильтра [1]

  • 'antonini' — (9,7) - касаются фильтра Antonini [1]

По умолчанию, dualtree использование 'nearsym5_7', почти симметричная биоортогональная пара фильтра с длинами 5 (масштабирующий фильтр) и 7 (фильтр вейвлета).

Ортогональный Гильбертов анализ Q-сдвига фильтрует парную длину, чтобы использовать для уровней 2 и выше в виде одного из перечисленных значений [2]. По умолчанию, dualtree использует ортогональную пару фильтра вейвлета К-шифта Гильберта длины 10.

Выходные аргументы

свернуть все

Коэффициенты приближения итогового уровня, возвращенные как вектор с действительным знаком, если X вектор или матрица если X мультисигнал. Коэффициенты приближения являются итоговым уровнем, масштабирующим (lowpass) коэффициенты. Если X матрица, размерности столбца X и A равны.

Коэффициенты вейвлета, возвращенные как L-by-1 массив ячеек коэффициентов вейвлета с комплексным знаком, где L является уровнем преобразования. Действительные части коэффициентов от дерева A, и мнимые части от дерева B. Если X матрица, каждый элемент D матрица, размерность столбца которой равняется размерности столбца X.

Коэффициенты приближения на каждом уровне преобразования, возвращенного как L-by-1 массив ячеек масштабирования с действительным знаком (lowpass) коэффициенты, где L является уровнем преобразования. Если X матрица, каждый элемент D матрица, размерность столбца которой равняется размерности столбца X.

Ссылки

[1] Antonini, M., М. Барло, П. Мэтью и я. Daubechies. “Отобразите Кодирование Используя Преобразование Вейвлета”. Транзакции IEEE на Обработке изображений 1, № 2 (апрель 1992): 205–20. https://doi.org/10.1109/83.136597.

[2] Кингсбери, Ник. “Комплексные Вейвлеты для Анализа Инварианта Сдвига и Фильтрации Сигналов”. Примененный и Вычислительный Гармонический Анализ 10, № 3 (май 2001): 234–53. https://doi.org/10.1006/acha.2000.0343.

[3] Le Gall, D. и А. Тэбэйтабай. “Кодирование поддиапазона Цифровых изображений Используя Симметричные Короткие Фильтры Ядра и Методы Кодирования Арифметики”. В ICASSP-88., Международная конференция по вопросам Акустики, Речи и Обработки сигналов, 761–64. Нью-Йорк, Нью-Йорк, США: IEEE, 1988. https://doi.org/10.1109/ICASSP.1988.196696.

Расширенные возможности

Введенный в R2020a