Arbitrary response magnitude and phase filter
Syntax
Hd = arbmagphase (Nb,Na,mag,phase,freq,Type,DFormat)
Description
Find the poles and zeros of an unknown filter from its complex frequency response specification, \(H(k)\). Where, \(mag= 20{log}_{10}(\left|H(k)\right|), phase =\frac{180}{\pi}arg\ (H(k))\) and \(freq = 0 \rightarrow Nyquist \) in Hz. Data may have gaps, and is not required to have equally spaced incremental frequency steps between 0 and Nyquist. Use the fsunits keyword to scale a normalised frequency specification into Hz.
Nb: The number of zeros(0-20) to be fitted to the data. If you want to create all-zero model, set Na=0
Na: The number of poles (0-20) to be fitted to the data. If you want to create all-pole model, set Nb=0
Mag, phase and freq: the complex frequency response data in dB, degrees and Hz.
Type: real
produces a real filter, whereas complex
produces a complex filter.
DFormat: allows you to specify the display format of resulting digital filter object.
symbolic |
Display a symbolic representation of the filter object. |
numeric |
Display a matrix representation of the filter object |
void |
Create a filter object, but do not display output |
Example
ClearH1; // clear primary filter from cascade
ShowH2DM;
interface Na = {0,10,1,5}; // interface variable definition
interface Nb = {0,20,1,6}; // interface variable definition
H=importdata("Datafiles\mysteryfilter.txt"); // load specification (Fs=500Hz)
freq=H(:,0); // extract frequency specification (Hz)
mag=H(:,1); // extract magnitude specification (dB)
phase=H(:,2); // extract phase specification (degrees)
Main()
// design a "real" filter from the specification
Hd=arbmagphase(Nb,Na,mag,phase,freq,"real","symbolic");
Num = getnum(Hd); // define numerator coefficients
Den = getden(Hd); // define denominator coefficients
Gain = getgain(Hd); // define gain
See also
bessel / butter / cheby1 / cheby2 / ellip / arbmagphase / cplxfreqshift / dcremover / notch / peaking