qmf

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

Синтаксис

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

Описание

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

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

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

y02+y12=x2

где y0 - подкошенная версия сигнала <reservedrangesplaceholder17>, фильтрованного с F0, таким образом y0 определенный x0 = F0 (<reservedrangesplaceholder12>) и y0 (<reservedrangesplaceholder10>) = x0 (2 n), и точно так же y1 определен x1 = F1 (<reservedrangesplaceholder4>) и y1 (<reservedrangesplaceholder2>) = x1 (2 n). Это свойство обеспечивает идеальную реконструкцию соответствующей двухканальной схемы фильтров (см. Strang-Nguyen 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

Figure contains 2 axes. Axes 1 with title Scaling (Lowpass) Filter G contains an object of type stem. Axes 2 with title Wavelet (Highpass) Filter H contains an object of type stem.

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

origmode = dwtmode('status','nodisplay');
dwtmode('per','nodisplay')
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')

Figure contains an axes. The axes with title Frequency Responses contains 2 objects of type line. These objects represent Lowpass Filter, Highpass Filter.

Подтвердите сумму квадратов величин частотных характеристик 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

Восстановите исходный режим расширения.

dwtmode(origmode,'nodisplay')

Этот пример показывает эффект установки параметра фазы 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

Ссылки

Странг, Г.; T. Nguyen (1996), Wavelets and Filter Banks, Wellesley-Cambridge Press.

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

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

.
Представлено до R2006a
Для просмотра документации необходимо авторизоваться на сайте