How do I create high-Q bandpass filters?
I am working on a vowel-synthesis module using ADAU1701 and I have a need to create bandpass filters that have fairly high Q - about 20-30, with center frequencies upto 4kHz. I would like to use an algorithm module that allows for easy realization in the analog domain - such as a state-variable module. I find that most such filter blocks in SigmaStudio do not allow you to create Qs greater than 15 or so. In fact some top out at 10, some at 15 and one or two at 16. Why is there this arbitrary bunch of topouts, and what is the best way for me to create a higher-Q bandpass filter using standard analog-realizable blocks such as State Variable filters?
-Ram
Audio Signal Processors
q
state-variable
sigmastudio
SigmaDSP Audio Processors
adau1701
Show More
Hmmm - no responses yet, so let me make this more provocative:
1. In SigmaStudio 3.5 Help for "Medium Size EQ", I see "Q: Set the Q you want (max 51) by entering a value in the field...". I cannot get this block to accept anything more than 16. How do I get this magic figure of 51 promised by Help?
2. If I choose the block "General (2nd Order)" in Filters, set it to "General HP/LP/BP/BS" and then select the subtype to "Bandpass Filter", a spot of magic happens - I see a "Bandwidth (octaves)" setting instead of a Q setting which, lo and behold, I can set to ZERO, which implies an infinite Q. This happens ONLY with this particular filter subtype. Does this really work - can I really get an infinite Q with this 2nd order block?
Would be great to get one of the AD experts to comment on this. Thanks!
-Ram
Hi Ram,
For question 1 the max Q setting appears to be 16, not sure if this is an error in the help file but will try to get an answer on that.
As for question 2 what i would suggest is that you use the Simulation Stimuli and Simulation Probe, under Schematic Design, to plot the response of the filter for different Q settings, i'm pretty sure infinite Q is not possible.
Best Rgds,
Alan
1. Thanks for clarifying the bit on Q=16 and I await a firmer answer.
2. I agree infinite Q is not possible and I would not look for it. However I would not agree to the method of running a simulation to "confirm" that it is not possible or find out what the maximum Q possible is. This maximum figure is a design parameter that ought to be known before I begin a design using the blocks available in Studio. I would therefore expect that
(i) AD / SigmaStudio should tell me somewhere what the maximum allowed Q is
(ii) Studio should not allow me to create a block that has a Q higher than the maximum allowed Q. It should restrict it by design rather than have me figure out by trial and error -- or worse still, from my customer's feedback -- that I have exceeded a limit imposed by the design of the chip/Studio.
Best - Ram
The State Variable filter blocks have a maximum Q of 15.999 because the Q input is a 5.23 format fixed-point number and it is not possible to represent a value larger than that. I apologize that this is not clear (or even mentioned) in the help file, we will add that as a note in the future. Since Fixed-point filters are subject to oscillation we impose Q limits in the user interface of other filter types in an attempt to prevent instability regardless of frequency or filter precision, but I believe these may have been chosen somewhat arbitrarily.
If you have a microcontroller elsewhere in your system, you might consider using the "IIR Coefficient" filter type and calculate the coefficients externally and you can use any filter design method you like with arbitrary Q values.
We typically do not perform bounds checking of input control signals by default because it adds both instruction and memory overhead to the algorithms that might not be desirable in resource constrained designs, instead we suggest using the "Min" and "Max" cells to do this explicitly in a design when necessary.
Regards,
John
Thanks John, that makes things clearer. I'll work with the IIR type for my design.
I was of course not talking of run-time checking of bounds - that would be an overhead as you pointed out. I was only talking of SigmaStudio allowing me to enter Q-values which are not permissible - surely when Studio can limit the Q as it does in one place to 15.999, it can also limit the bandwidth (either at design time or at compile time) rather than allow one to enter arbitrary values down to "0"! I will probably not need this check now that I know how it works (or doesn't), but I'm sure a simple Studio design check of this sort will help lots of filter designers.
Best - Ram
Dear ADI engineers,
In response to my query in a separate thread on State-Variable (Q/F input) filter blocks, BrettG has pointed out that the Q-input to this filter block is actually 1/Q. This in fact directly answers my question in a very positive way because not only does this allow me to create high-Q bandpasses using 5.23 format inputs (unlike the filters which take Q using 5.23 formats and therefore limit it to 16), it allows me to set the Q using the aux-ADC input at runtime. This is probably a much simpler solution than configuring IIR filters.
With this I think this thread can be treated as answered but I will wait to see if any caveats are pointed out by ADI engineers here. I hope the SigmaStudio documentation improves soon because these golden nuggets need to be writtyen about there :-).
-Ram
This question has been assumed as answered either offline via email or with a multi-part answer. This question has now been closed out. If you have an inquiry related to this topic please post a new question in the applicable product forum.
Thank you,
EZ Admin
Please log in to reply.