Taps for simple IIR Filter in GNU Radio

  • Thread starter Thread starter Swamp Thing
  • Start date Start date
  • Tags Tags
    Filter
AI Thread Summary
The discussion revolves around the user's experimentation with GNU Radio to implement a 2nd order IIR filter at a frequency of 170 Hz, using a sample rate of 16,000 samples per second. The user derived the filter taps using Mathematica, confirming their functionality through a simulation that produced the expected resonant frequency. However, upon inputting the calculated feedforward and feedback taps into GNU Radio's IIR block, the output did not match the expected results. The user noted that changing the polarity convention in the IIR block led to instability and erratic behavior in the filter's response. A suggestion was made to examine the source code of the IIR block to better understand the calculations being performed, highlighting the advantages of open-source software for troubleshooting such issues.
Swamp Thing
Insights Author
Messages
1,032
Reaction score
770
I am experimenting with GNU Radio (using the Companion graphical editor) to do some simple audio processing.

As my first experiment, I am trying to set up a very simple 2nd order IIR filter at 170 Hz with a sample rate of 16000 samples/sec. I used this Mathematica code to find the taps:
Code:
fs=16000;
fr=170 (* Center Frequency *)
\[CapitalTheta]=N[2 Pi fr / fs ]

r=0.99; (* this controls the Q *)

t1=2 r Cos[\[CapitalTheta]]
t2= -r*r
{t1,t2} (* these are the tap values that I want to use in GNU Radio's IIR block *)

Here's how I verify within Mathematica that the filter should work OK:
Code:
y1=0;
y2=0;
yyy=Reap[For[i=0,i<400,i++,
       x=If[i<4,10,0];  (* inputs a short pulse to the system *)
       y=x + t1* y1 + t2*y2;
      Sow[y];
        y2=y1;
        y1=y;

    ]
][[2,1]];
ListPlot[yyy,PlotRange->All]

And this gives this plot, where I can verify that the resonant frequency is around 170 Hz as intended.

1728912835643.png


Now when I enter the feedforward taps into the GNU Radio IIR as [1] and the feedback taps as [1.97559, -0.9801] --- which I got from the first code block above and which works in the test filter above --- I get nothing resembling the above.

The impulse response in GNU Radio looks like this:

iir.png


Now, the IIR block has a dropdown that selects the so-called "old" or "new" convention for the polarities of the tap values. If I change that option, I get the following, where the filter seems to have become unstable and is "hunting" at the sample rate.
iir-2.png


So if anyone knows about the quirks of the IIR block in GNU Radio, please help me understand this. Thanks.
 
Technology news on Phys.org
I don't use GNU Radio but I've done some IIRs using liquid-dsp. My suggestion is to look at the source code for the IIR block. Walk through what it's actually calculating for the inputs you've given it. The one nice thing about open source is you have the source.
 
Thread 'Star maps using Blender'
Blender just recently dropped a new version, 4.5(with 5.0 on the horizon), and within it was a new feature for which I immediately thought of a use for. The new feature was a .csv importer for Geometry nodes. Geometry nodes are a method of modelling that uses a node tree to create 3D models which offers more flexibility than straight modeling does. The .csv importer node allows you to bring in a .csv file and use the data in it to control aspects of your model. So for example, if you...
I tried a web search "the loss of programming ", and found an article saying that all aspects of writing, developing, and testing software programs will one day all be handled through artificial intelligence. One must wonder then, who is responsible. WHO is responsible for any problems, bugs, deficiencies, or whatever malfunctions which the programs make their users endure? Things may work wrong however the "wrong" happens. AI needs to fix the problems for the users. Any way to...
Back
Top