Hello again, SEDers.
(I hate to "expose my ignorance" like this, but...)
I have a very-occasional need to design an analog filter, given a small
set of data points (e.g. ratio of input and output voltages for a
half-dozen frequencies).
I am looking for design-methods or procedures, and/or software tool(s),
that will facilitate or automate the design process.
I am not really even sure what the "standard" design procedure might
be, in this case. Currently, I use what I can remember from my basic
EE courses and try to roughly approximate in my mind what combination
of lowpass and highpass RC sections might be able to be combined in
series and/or parallel, to come close to the desired transfer function,
and then calculate very-approximate cutoff frequencies and amplitude
combinations, and then draw a schematic in LTSPice and tweak the
component values and architecture until the response matches the data
points. That last step can be quite tedious, which is mostly what has
driven me to make this request for help.
For example, below are the data points for a filter that I am currently
working on (which is for a filter that will help produce the correct
current levels (1 mA to 0.125 mA) versus frequency, for a
current-controlled resistance that will cause an audio-frequency ramp
generator to give a contant output-amplitude versus frequency):
60 Hz: 1.00v, 200 Hz: 1.20v, 750 Hz: 0.660v, 4.5kHz: 0.297v, 12 kHz:
0.178v, 22kHz: 0.125v.
I need to have the response at the data points above be accurate within
1%, but don't care what the response is like in between and outside the
data points' frequencies. [So, I realize that, for the six data points
above, I could just use six separate bandpass filters and sum their
outputs. But I think it "should" usually be able to be made more
parts-count-efficient (And board space is limited.). For the example
dataset above, for example, I came up with two parallel/summed
sections, each with three cascaded simple RC sections, i.e. a total of
six caps and six resistors, plus four opamps (for i/o buffering of each
parallel cascade), and one opamp and four resistors for summing, and a
couple of resistors for a voltage divider for the output of one of the
cascades (which could all change, somewhat, if I convert it to an
active-filter architecture), which is not yet optimized for component
count or performance, etc, etc.]
Actually, I can usually come up with the "rough approximation" for the
filter architecture and component values fairly quickly/easily. The
tedium usually lies in tweaking the component values, and possibly the
architecture, to get the response down from, say, 5% or 10% accuracy,
to 1% or less at every data point.
Since I currently use LTSpice for that "tweaking", I'm also looking
into being able to use LTSpice's features to automate that portion of
the process. I'm hoping that there is some good way to have it vary the
component values and stop when the response matches at the given data
points. (Anyone here know about that? I'm also posting a question about
that to the LT-Spice discussion group at www.yahoogroups.com.)
If anyone cares to offer any ideas, methods, procedures, advice,
software titles, websites, references, et al, I will truly appreciate
it.
Regards,
Tom Gootee
(I hate to "expose my ignorance" like this, but...)
I have a very-occasional need to design an analog filter, given a small
set of data points (e.g. ratio of input and output voltages for a
half-dozen frequencies).
I am looking for design-methods or procedures, and/or software tool(s),
that will facilitate or automate the design process.
I am not really even sure what the "standard" design procedure might
be, in this case. Currently, I use what I can remember from my basic
EE courses and try to roughly approximate in my mind what combination
of lowpass and highpass RC sections might be able to be combined in
series and/or parallel, to come close to the desired transfer function,
and then calculate very-approximate cutoff frequencies and amplitude
combinations, and then draw a schematic in LTSPice and tweak the
component values and architecture until the response matches the data
points. That last step can be quite tedious, which is mostly what has
driven me to make this request for help.
For example, below are the data points for a filter that I am currently
working on (which is for a filter that will help produce the correct
current levels (1 mA to 0.125 mA) versus frequency, for a
current-controlled resistance that will cause an audio-frequency ramp
generator to give a contant output-amplitude versus frequency):
60 Hz: 1.00v, 200 Hz: 1.20v, 750 Hz: 0.660v, 4.5kHz: 0.297v, 12 kHz:
0.178v, 22kHz: 0.125v.
I need to have the response at the data points above be accurate within
1%, but don't care what the response is like in between and outside the
data points' frequencies. [So, I realize that, for the six data points
above, I could just use six separate bandpass filters and sum their
outputs. But I think it "should" usually be able to be made more
parts-count-efficient (And board space is limited.). For the example
dataset above, for example, I came up with two parallel/summed
sections, each with three cascaded simple RC sections, i.e. a total of
six caps and six resistors, plus four opamps (for i/o buffering of each
parallel cascade), and one opamp and four resistors for summing, and a
couple of resistors for a voltage divider for the output of one of the
cascades (which could all change, somewhat, if I convert it to an
active-filter architecture), which is not yet optimized for component
count or performance, etc, etc.]
Actually, I can usually come up with the "rough approximation" for the
filter architecture and component values fairly quickly/easily. The
tedium usually lies in tweaking the component values, and possibly the
architecture, to get the response down from, say, 5% or 10% accuracy,
to 1% or less at every data point.
Since I currently use LTSpice for that "tweaking", I'm also looking
into being able to use LTSpice's features to automate that portion of
the process. I'm hoping that there is some good way to have it vary the
component values and stop when the response matches at the given data
points. (Anyone here know about that? I'm also posting a question about
that to the LT-Spice discussion group at www.yahoogroups.com.)
If anyone cares to offer any ideas, methods, procedures, advice,
software titles, websites, references, et al, I will truly appreciate
it.
Regards,
Tom Gootee