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™.

    Version History

    Introduced before R2006a