DSPRelated.com
Forums

Does it benefit to have "arbitrary frequency response" interpolated, rather than as "direct points"?

Started by Unknown August 29, 2016
So I'm trying to design arbitrary frequency response filter by following this:
http://www.dspguide.com/ch17/1.htm

there it displays one desired arbitrary frequency response:
http://www.dspguide.com/graphics/F_17_1.gif

which shows to be made of some sort of different interpolation algorithms applied to certain intervals.

Is this (interpolated "desired response") necessary or recommended for the design of such arbitrary frequency response filters? Or can the "desired" array be similarly designed by arbitrarily placing points?
On Monday, August 29, 2016 at 12:29:56 PM UTC+2, mavavil...@gmail.com wrote:
> So I'm trying to design arbitrary frequency response filter by following this: > http://www.dspguide.com/ch17/1.htm > > there it displays one desired arbitrary frequency response: > http://www.dspguide.com/graphics/F_17_1.gif > > which shows to be made of some sort of different interpolation algorithms applied to certain intervals.
Interpolation would suggest that there are a couple of data points between one is interpolating. But there is no mention of interpolation. Think of arbitrary functions just being sampled: the first section looks like a sine wave, the following like a ramp, then we have a couple of flat steps, then something like a parabola. It's just *arbitrary*.
> Is this (interpolated "desired response") necessary or recommended for the design of such arbitrary frequency response filters? Or can the "desired" array be similarly designed by arbitrarily placing points?
It's just a buffer with 1024 coefficients (in this case) where you can put anything in there. Most likely you are interested in a real-valued filter (no complex impulse response) in which case you need to make sure that the (frequency-domain) array is filled symmetrically: arr[0 ] = your DC response for k=1..511 { arr[k ] = your AC response for frequency k*fs/1024 arr[1024-k] = conj(arr[k]); // symmetry } arr[512 ] = your Nyquist frequency response It doesn't really matter much how you fill it. The frequency response is smoothed anyways due to the window function. If you want to use this method to build a software equilizer you might want to do some smooth interpolation of a couple of control points in "loglog space" (meaning logarithmic frequency and logarithmic amplitude response). I hope that answers your questions. SG