Main Content

qmf

Scaling and wavelet filter

    Description

    Y = qmf(X) changes the signs of the even-indexed elements of the reversed vector filter coefficients X.

    example

    Y = qmf(X,P) changes the signs of the even-indexed elements of the reversed vector filter coefficients X if P is 0. If P is 1, the signs of the odd-indexed elements are reversed. Changing P changes the phase of the Fourier transform of the resulting wavelet filter by π radians.

    Examples

    collapse all

    This example shows how to create a quadrature mirror filter associated with the db10 wavelet.

    Obtain the scaling filter associated with the db10 wavelet.

    sF = dbwavf("db10");

    dbwavf normalizes the filter coefficients so that the norm is equal to 1/2. 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

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

    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 G and 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.

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

    Compute the frequency responses of G and 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

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

    Confirm the sum of the squared magnitudes of the frequency responses of G and 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.

    dwtmode(origmode,"nodisplay")

    This example shows the effect of setting the phase parameter of the qmf function.

    Obtain the decomposition lowpass filter associated with a Daubechies wavelet.

    lowfilt = wfilters("db4");

    Use the 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 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
    
    

    Compute the magnitudes and display the difference between them. Unlike the phase, the magnitude is not affected by the sign reversals.

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

    Input Arguments

    collapse all

    Filter coefficients, specified as a vector.

    Data Types: single | double

    Phase parameter, specified as follows.

    • 0 — Change signs of even-indexed elements of the reversed vector X

    • 1 — Change signs of odd-indexed elements of the reversed vector X

    Data Types: single | double

    More About

    collapse all

    Quadrature Mirror Filters

    Let x be a finite energy signal. Two filters F0 and F1 are quadrature mirror filters (QMF) if, for any x,

    y02+y12=x2

    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 [1] p. 103).

    For example, if F0 is a Daubechies scaling filter with norm equal to 1 and F1 = qmf(F0), then the transfer functions F0(z) and F1(z) of the filters F0 and F1 satisfy the condition:

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

    References

    [1] Strang, Gilbert, and Truong Nguyen. Wavelets and Filter Banks. Rev. ed. Wellesley, Mass: Wellesley-Cambridge Press, 1997.

    Extended Capabilities

    C/C++ Code Generation
    Generate C and C++ code using MATLAB® Coder™.

    Introduced before R2006a