Scaling and wavelet filter
changes the signs of the even-indexed elements of the reversed
vector filter coefficients
Y = qmf(
Create Quadrature Mirror Filter
This example shows how to create a quadrature mirror filter associated with the
Obtain the scaling filter associated with the
sF = dbwavf("db10");
dbwavf normalizes the filter coefficients so that the norm is equal to . Normalize the coefficients so that the filter has norm equal to 1.
G = sqrt(2)*sF;
Obtain the wavelet filter coefficients by using
qmf. Plot the filters.
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
Save the current extension mode. Set the extension mode to Periodization. Generate a random signal of length 64. Perform a single-level wavelet decomposition of the signal using
H. For purposes of reproducibility, set the random seed to the default value.
origmode = dwtmode("status","nodisplay"); dwtmode("per","nodisplay") n = 64; rng default sig = randn(1,n); [a,d] = dwt(sig,G,H);
The lengths of the approximation and detail coefficients are both 32. Confirm that the filters preserve energy.
ans = 1×2 92.6872 92.6872
Compute the frequency responses of
H. Zeropad the filters when taking the Fourier transform.
n = 128; F = 0:1/n:1-1/n; Gdft = fft(G,n); Hdft = fft(H,n);
Plot the magnitude of each frequency response.
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") hold off
Confirm the sum of the squared magnitudes of the frequency responses of
H at each frequency is equal to 2.
sumMagnitudes = abs(Gdft).^2+abs(Hdft).^2; [min(sumMagnitudes) max(sumMagnitudes)]
ans = 1×2 2.0000 2.0000
Confirm that the filters are orthonormal.
df = [G;H]; id = df*df'
id = 2×2 1.0000 -0.0000 -0.0000 1.0000
Restore the original extension mode.
Controlling Phase of a Quadrature Mirror Filter
This example shows the effect of setting the phase parameter of the
Obtain the decomposition lowpass filter associated with a Daubechies wavelet.
lowfilt = wfilters("db4");
qmf function to obtain the decomposition lowpass filter for a wavelet. Then, compare the signs of the values when the
qmf phase parameter is set to 0 or 1. The reversed signs indicates a phase shift of radians, which is the same as multiplying the DFT by .
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
Compute the magnitudes and display the difference between them. Unlike the phase, the magnitude is not affected by the sign reversals.
ans = 1×8 0 0 0 0 0 0 0 0
X — Filter coefficients
Filter coefficients, specified as a vector.
P — Phase parameter
0 (default) |
Phase parameter, specified as follows.
0— Change signs of even-indexed elements of the reversed vector
1— Change signs of odd-indexed elements of the reversed vector
Quadrature Mirror Filters
x be a finite energy signal.
Two filters F0 and
quadrature mirror filters (QMF) if, for any x,
where y0 is a decimated version of the signal x filtered with F0, so y0 is defined by x0 = F0(x) and y0(n) = x0(2n). Similarly, y1 is defined by x1 = F1(x) and y1(n) = x1(2n). This property ensures a perfect reconstruction of the associated two-channel filter banks scheme (see  p. 103).
For example, if F0 is a
Daubechies scaling filter with norm equal to 1 and
then the transfer functions
of the filters F0 and
 Strang, Gilbert, and Truong Nguyen. Wavelets and Filter Banks. Rev. ed. Wellesley, Mass: Wellesley-Cambridge Press, 1997.
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
Introduced before R2006a