Documentation |
2-D FIR filter using frequency sampling
h = fsamp2(Hd)
h = fsamp2(f1, f2, Hd,[m n])
h = fsamp2(Hd) designs a two-dimensional FIR filter with frequency response Hd, and returns the filter coefficients in matrix h. (fsamp2 returns h as a computational molecule, which is the appropriate form to use with filter2.) The filter h has a frequency response that passes through points in Hd. If Hd is m-by-n, then h is also m-by-n.
fsamp2 designs two-dimensional FIR filters based on a desired two-dimensional frequency response sampled at points on the Cartesian plane. Hd is a matrix containing the desired frequency response sampled at equally spaced points between -1.0 and 1.0 along the x and y frequency axes, where 1.0 corresponds to half the sampling frequency, or π radians.
$${H}_{d}({f}_{1},{f}_{2})={{H}_{d}({\omega}_{1},{\omega}_{2})|}_{{\omega}_{1}=\pi {f}_{1},{\omega}_{2}=\pi {f}_{1}}$$
For accurate results, use frequency points returned by freqspace to create Hd.
h = fsamp2(f1, f2, Hd,[m n]) produces an m-by-n FIR filter by matching the filter response at the points in the vectors f1 and f2. The frequency vectors f1 and f2 are in normalized frequency, where 1.0 corresponds to half the sampling frequency, or π radians. The resulting filter fits the desired response as closely as possible in the least squares sense. For best results, there must be at least m*n desired frequency points. fsamp2 issues a warning if you specify fewer than m*n points.
The input matrix Hd can be of class double or of any integer class. All other inputs to fsamp2 must be of class double. All outputs are of class double.
Use fsamp2 to design an approximately symmetric two-dimensional bandpass filter with passband between 0.1 and 0.5 (normalized frequency, where 1.0 corresponds to half the sampling frequency, or π radians):
Create a matrix Hd that contains the desired bandpass response. Use freqspace to create the frequency range vectors f1 and f2.
[f1,f2] = freqspace(21,'meshgrid'); Hd = ones(21); r = sqrt(f1.^2 + f2.^2); Hd((r<0.1)|(r>0.5)) = 0; colormap(jet(64)) mesh(f1,f2,Hd)
Design the filter that passes through this response.
h = fsamp2(Hd); freqz2(h)