qmf

Масштабирование и фильтр вейвлета

Синтаксис

Y = qmf(X,P)
Y = qmf(X)
Y = qmf(X,0)

Описание

Y = qmf(X,P) изменяет знаки даже элементы индекса обратных векторных коэффициентов фильтра X если P 0. Если P 1, знаки нечетных элементов индекса инвертируются. Изменение P изменяет фазу преобразования Фурье получившегося фильтра вейвлета по π радианам.

Y = qmf(X) эквивалентно Y = qmf(X,0).

Позвольте x будьте конечным энергетическим сигналом. Два фильтра F0 и F1 являются квадратурными фильтрами зеркала (QMF) если для любого x,

y02+y12=x2

где y0 является подкошенной версией x сигнала, отфильтрованного с F0 так y0 , заданный x0 = F0 (x) и y0 (n) = x0 (2n), и точно так же y1 задан x1 = F1 (x) и y1 (n) = x1 (2n). Это свойство гарантирует совершенную реконструкцию связанной двухканальной схемы наборов фильтров (см. Странга-Нгуена p. 103).

Например, если F0 является Daubechies, масштабирующий фильтр с нормой, равной 1 и F1 = qmf(F0), затем передаточные функции F0 (z) и F1 (z) фильтров, F0 и F1 удовлетворяют условию (см. пример для db10):

|F0(z)|2+|F1(z)|2=2.

Примеры

свернуть все

В этом примере показано, как создать квадратурный фильтр зеркала, сопоставленный с db10 вейвлет.

Вычислите масштабирующийся фильтр, сопоставленный с db10 вейвлет.

sF = dbwavf('db10');

dbwavf нормирует коэффициенты фильтра так, чтобы норма была равна 1/2. Нормируйте коэффициенты так, чтобы фильтр имел норму, равную 1.

G = sqrt(2)*sF;

Получите коэффициенты фильтра вейвлета при помощи qmf. Постройте фильтры.

H = qmf(G);
subplot(2,1,1)
stem(G)
title('Scaling (Lowpass) Filter G')
grid on
subplot(2,1,2)
stem(H)
title('Wavelet (Highpass) Filter H')
grid on

Установите дополнительный режим DWT на Periodization. Сгенерируйте случайный сигнал длины 64. Выполните одноуровневое разложение вейвлета сигнала с помощью G и H.

dwtmode('per')
 
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!  WARNING: Change DWT Extension Mode  !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                                         
*****************************************
**  DWT Extension Mode: Periodization  **
*****************************************
                                         
n = 64;
rng 'default'
sig = randn(1,n);
[a,d] = dwt(sig,G,H);

Продолжительности приближения и коэффициентов детали оба 32. Подтвердите, что фильтры сохраняют энергию.

[sum(sig.^2) sum(a.^2)+sum(d.^2)]
ans = 1×2

   92.6872   92.6872

Вычислите частотные характеристики G и H. Zeropad фильтры при взятии преобразования Фурье.

n = 128;
F = 0:1/n:1-1/n;
Gdft = fft(G,n);
Hdft = fft(H,n);

Постройте величину каждой частотной характеристики.

figure
plot(F(1:n/2+1),abs(Gdft(1:n/2+1)),'r')
hold on
plot(F(1:n/2+1),abs(Hdft(1:n/2+1)),'b')
grid on
title('Frequency Responses')
xlabel('Normalized Frequency')
ylabel('Magnitude')
legend('Lowpass Filter','Highpass Filter','Location','east')

Подтвердите сумму величин в квадрате частотных характеристик G и H на каждой частоте равно 2.

sumMagnitudes = abs(Gdft).^2+abs(Hdft).^2;
[min(sumMagnitudes) max(sumMagnitudes)]
ans = 1×2

    2.0000    2.0000

Подтвердите, что фильтры ортонормированы.

df = [G;H];
id = df*df'
id = 2×2

    1.0000    0.0000
    0.0000    1.0000

Этот пример показывает эффект установки параметра фазы qmf функция.

Получите разложение фильтр lowpass, сопоставленный с вейвлетом Daubechies.

lowfilt = wfilters('db4');

Используйте qmf функция, чтобы получить разложение фильтр lowpass для вейвлета. Затем сравните знаки значений когда qmf параметр фазы устанавливается на 0 или 1. Обратные знаки указывают на сдвиг фазы π радианы, который совпадает с умножением ДПФ eiπ.

p0 = qmf(lowfilt,0)
p0 = 1×8

    0.2304   -0.7148    0.6309    0.0280   -0.1870   -0.0308    0.0329    0.0106

p1 = qmf(lowfilt,1)
p1 = 1×8

   -0.2304    0.7148   -0.6309   -0.0280    0.1870    0.0308   -0.0329   -0.0106

Вычислите величины и отобразите различие между ними. В отличие от фазы, величина не затронута реверсированиями знака.

abs(p0)-abs(p1)
ans = 1×8

     0     0     0     0     0     0     0     0

Ссылки

Странг, Г.; Т. Нгуен (1996), вейвлеты и наборы фильтров, Wellesley-Кембриджское нажатие.

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

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Представлено до R2006a