I need to implement a 6th order IIR filter. The filter I need to implement is the A-weighting. I've simply used the bilinear function of Matlab with an fs of 20Khz. I need to implement this over the LPC1769 micro-controller. The application is mainly the filter and the communication with the ADC and the LCD to show the RMS value of the signal after being processed by the filter.

I've been reading the book "Real-Time Digital Signal Processing..." of Kuo, but I need more detail in the implemetation considerations.Could you recommend me some books or papers about this?

I would like to know more about how to implement filters, the implications of the ordering choise of the biquad stages, or the meaning of the parameters that are used in the fdatool of matlab at the moment of quantizing a filter.

Screen print of the parameters that I would like to understand their meaning and their implications

  • 1
    $\begingroup$ Is your question about how to design an A-weighting filter (presumably for an audio VU meter) as a discrete-time (a.k.a "digital") IIR filter? Why would your sample rate (I presume that is what $f_\text{s}$ is) be 20 kHz? That means you can have no filter definition above 10 kHz, and I believe the A-weighting filter is well-defined above 10 kHz. $\endgroup$ – robert bristow-johnson Jul 8 '19 at 3:21
  • $\begingroup$ Acording to the wikipedia article it's not defined above 11Khz but our band of interest for this project is from 0 to 8Khz (it's an University project so.. It's only to learn about this subject, we don't worry about that, but thanks for pointing it out). I'm mostly interested in bilbiography about the implementation of this filters $\endgroup$ – Gaston Jul 8 '19 at 20:36
  • $\begingroup$ no, the wikipedia article has it defined to 20 kHz. That's a log frequency scale on the horizontal axis. $\endgroup$ – robert bristow-johnson Jul 8 '19 at 20:58

Okay, according to the wikipedia article you cited (with an appropriate substitution in notation):

$$ \Big|H(j2\pi f)\Big|^2= 10^{\frac{2.00}{10}} \times \frac{12194^4\cdot f^8}{\big(f^2+20.6^2 \big)^2(f^2+107.7^2)(f^2+737.9^2)\big(f^2+12194^2\big)^2}$$

and the dB amplitude curve is this:

$$A(f)=10\log_{10}\left(\Big|H(j2\pi f)\Big|^2\right) $$

I hope you can see how I modified the language and that it is equivalent. The purpose is to express this transfer function as an $H(s)$ and get where (and how many) the poles as zeros are.

Now you gotta factor some more shit out. Oh, this is laborious and painful. Sorry, unless someone wants to finish this answer, I will have to return to it.

| improve this answer | |
  • $\begingroup$ oh, i just realized that the wikipedia article has the transfer function equivalents. so you need to take those and apply the bilinear transform (with compensation for frequency warping applied to each pole frequency). $\endgroup$ – robert bristow-johnson Jul 8 '19 at 21:00
  • $\begingroup$ Thank you for your help. But like I said, I am looking for bibliography about the implementation of digital filters. I kinda know what to do with the design. I am looking for things like effects of quatization, how to order the second order sections or other things of the sort. $\endgroup$ – Gaston Jul 8 '19 at 21:12
  • $\begingroup$ issues such as quantization error and factoring and ordering second-order sections (or implementing these second-order sections in parallel) is more general to DSP and filter design. A-weighting filters are just an application of such techniques. $\endgroup$ – robert bristow-johnson Jul 8 '19 at 21:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.