filter control without Sigma Studio.
Hi.
I need to use Butterworth 8th without Sigma Studio.
and I found there are 4 casecade biquad coefficent in its param.h
Fullscreen
butterworth_paramh.txt
Download
/* Module Impact1_Rout1_HP - Butterworth/Chebyshev Filter */
#define MOD_IMPACT1_ROUT1_HP_COUNT 21
#define MOD_IMPACT1_ROUT1_HP_SCHEMATIC "ADAU146xSchematic_0"
#define MOD_IMPACT1_ROUT1_HP_A1_STAGE0_ADDR 3243
#define MOD_IMPACT1_ROUT1_HP_A1_STAGE0_FIXPT 0x01E979DE
#define MOD_IMPACT1_ROUT1_HP_A1_STAGE0_VALUE SIGMASTUDIOTYPE_8_24_CONVERT(1.91201580296606)
#define MOD_IMPACT1_ROUT1_HP_A1_STAGE0_TYPE SIGMASTUDIOTYPE_8_24
#define MOD_IMPACT1_ROUT1_HP_A1_STAGE0_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_A1_STAGE0_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_A1_STAGE0_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_A1_STAGE0_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_A2_STAGE0_ADDR 3242
#define MOD_IMPACT1_ROUT1_HP_A2_STAGE0_FIXPT 0xFF160282
#define MOD_IMPACT1_ROUT1_HP_A2_STAGE0_VALUE SIGMASTUDIOTYPE_8_24_CONVERT(-0.914024224264171)
#define MOD_IMPACT1_ROUT1_HP_A2_STAGE0_TYPE SIGMASTUDIOTYPE_8_24
#define MOD_IMPACT1_ROUT1_HP_A2_STAGE0_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_A2_STAGE0_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_A2_STAGE0_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_A2_STAGE0_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_B0_STAGE0_ADDR 3241
#define MOD_IMPACT1_ROUT1_HP_B0_STAGE0_FIXPT 0x00F4DDD7
#define MOD_IMPACT1_ROUT1_HP_B0_STAGE0_VALUE SIGMASTUDIOTYPE_8_24_CONVERT(0.956510006807557)
#define MOD_IMPACT1_ROUT1_HP_B0_STAGE0_TYPE SIGMASTUDIOTYPE_8_24
#define MOD_IMPACT1_ROUT1_HP_B0_STAGE0_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_B0_STAGE0_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_B0_STAGE0_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_B0_STAGE0_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_B1_STAGE0_ADDR 3240
#define MOD_IMPACT1_ROUT1_HP_B1_STAGE0_FIXPT 0xFE164452
#define MOD_IMPACT1_ROUT1_HP_B1_STAGE0_VALUE SIGMASTUDIOTYPE_8_24_CONVERT(-1.91302001361511)
#define MOD_IMPACT1_ROUT1_HP_B1_STAGE0_TYPE SIGMASTUDIOTYPE_8_24
#define MOD_IMPACT1_ROUT1_HP_B1_STAGE0_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_B1_STAGE0_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_B1_STAGE0_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_B1_STAGE0_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_B2_STAGE0_ADDR 3239
#define MOD_IMPACT1_ROUT1_HP_B2_STAGE0_FIXPT 0x00F4DDD7
#define MOD_IMPACT1_ROUT1_HP_B2_STAGE0_VALUE SIGMASTUDIOTYPE_8_24_CONVERT(0.956510006807557)
#define MOD_IMPACT1_ROUT1_HP_B2_STAGE0_TYPE SIGMASTUDIOTYPE_8_24
#define MOD_IMPACT1_ROUT1_HP_B2_STAGE0_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_B2_STAGE0_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_B2_STAGE0_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_B2_STAGE0_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_A1_STAGE1_ADDR 3248
#define MOD_IMPACT1_ROUT1_HP_A1_STAGE1_FIXPT 0x01ECB356
#define MOD_IMPACT1_ROUT1_HP_A1_STAGE1_VALUE SIGMASTUDIOTYPE_8_24_CONVERT(1.924611453885)
#define MOD_IMPACT1_ROUT1_HP_A1_STAGE1_TYPE SIGMASTUDIOTYPE_8_24
#define MOD_IMPACT1_ROUT1_HP_A1_STAGE1_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_A1_STAGE1_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_A1_STAGE1_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_A1_STAGE1_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_A2_STAGE1_ADDR 3247
#define MOD_IMPACT1_ROUT1_HP_A2_STAGE1_FIXPT 0xFF12C82C
#define MOD_IMPACT1_ROUT1_HP_A2_STAGE1_VALUE SIGMASTUDIOTYPE_8_24_CONVERT(-0.926633105917677)
#define MOD_IMPACT1_ROUT1_HP_A2_STAGE1_TYPE SIGMASTUDIOTYPE_8_24
#define MOD_IMPACT1_ROUT1_HP_A2_STAGE1_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_A2_STAGE1_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_A2_STAGE1_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_A2_STAGE1_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_B0_STAGE1_ADDR 3246
#define MOD_IMPACT1_ROUT1_HP_B0_STAGE1_FIXPT 0x00F67ACA
#define MOD_IMPACT1_ROUT1_HP_B0_STAGE1_VALUE SIGMASTUDIOTYPE_8_24_CONVERT(0.96281113995067)
#define MOD_IMPACT1_ROUT1_HP_B0_STAGE1_TYPE SIGMASTUDIOTYPE_8_24
#define MOD_IMPACT1_ROUT1_HP_B0_STAGE1_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_B0_STAGE1_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_B0_STAGE1_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_B0_STAGE1_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_B1_STAGE1_ADDR 3245
#define MOD_IMPACT1_ROUT1_HP_B1_STAGE1_FIXPT 0xFE130A6B
#define MOD_IMPACT1_ROUT1_HP_B1_STAGE1_VALUE SIGMASTUDIOTYPE_8_24_CONVERT(-1.92562227990134)
#define MOD_IMPACT1_ROUT1_HP_B1_STAGE1_TYPE SIGMASTUDIOTYPE_8_24
#define MOD_IMPACT1_ROUT1_HP_B1_STAGE1_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_B1_STAGE1_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_B1_STAGE1_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_B1_STAGE1_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_B2_STAGE1_ADDR 3244
#define MOD_IMPACT1_ROUT1_HP_B2_STAGE1_FIXPT 0x00F67ACA
#define MOD_IMPACT1_ROUT1_HP_B2_STAGE1_VALUE SIGMASTUDIOTYPE_8_24_CONVERT(0.96281113995067)
#define MOD_IMPACT1_ROUT1_HP_B2_STAGE1_TYPE SIGMASTUDIOTYPE_8_24
#define MOD_IMPACT1_ROUT1_HP_B2_STAGE1_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_B2_STAGE1_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_B2_STAGE1_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_B2_STAGE1_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_A1_STAGE2_ADDR 3253
#define MOD_IMPACT1_ROUT1_HP_A1_STAGE2_FIXPT 0x01F2C592
#define MOD_IMPACT1_ROUT1_HP_A1_STAGE2_VALUE SIGMASTUDIOTYPE_8_24_CONVERT(1.94832717685175)
#define MOD_IMPACT1_ROUT1_HP_A1_STAGE2_TYPE SIGMASTUDIOTYPE_8_24
#define MOD_IMPACT1_ROUT1_HP_A1_STAGE2_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_A1_STAGE2_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_A1_STAGE2_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_A1_STAGE2_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_A2_STAGE2_ADDR 3252
#define MOD_IMPACT1_ROUT1_HP_A2_STAGE2_FIXPT 0xFF0CB44E
#define MOD_IMPACT1_ROUT1_HP_A2_STAGE2_VALUE SIGMASTUDIOTYPE_8_24_CONVERT(-0.950373740374713)
#define MOD_IMPACT1_ROUT1_HP_A2_STAGE2_TYPE SIGMASTUDIOTYPE_8_24
#define MOD_IMPACT1_ROUT1_HP_A2_STAGE2_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_A2_STAGE2_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_A2_STAGE2_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_A2_STAGE2_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_B0_STAGE2_ADDR 3251
#define MOD_IMPACT1_ROUT1_HP_B0_STAGE2_FIXPT 0x00F98451
#define MOD_IMPACT1_ROUT1_HP_B0_STAGE2_VALUE SIGMASTUDIOTYPE_8_24_CONVERT(0.974675229306615)
#define MOD_IMPACT1_ROUT1_HP_B0_STAGE2_TYPE SIGMASTUDIOTYPE_8_24
#define MOD_IMPACT1_ROUT1_HP_B0_STAGE2_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_B0_STAGE2_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_B0_STAGE2_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_B0_STAGE2_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_B1_STAGE2_ADDR 3250
#define MOD_IMPACT1_ROUT1_HP_B1_STAGE2_FIXPT 0xFE0CF75E
#define MOD_IMPACT1_ROUT1_HP_B1_STAGE2_VALUE SIGMASTUDIOTYPE_8_24_CONVERT(-1.94935045861323)
#define MOD_IMPACT1_ROUT1_HP_B1_STAGE2_TYPE SIGMASTUDIOTYPE_8_24
#define MOD_IMPACT1_ROUT1_HP_B1_STAGE2_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_B1_STAGE2_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_B1_STAGE2_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_B1_STAGE2_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_B2_STAGE2_ADDR 3249
#define MOD_IMPACT1_ROUT1_HP_B2_STAGE2_FIXPT 0x00F98451
#define MOD_IMPACT1_ROUT1_HP_B2_STAGE2_VALUE SIGMASTUDIOTYPE_8_24_CONVERT(0.974675229306615)
#define MOD_IMPACT1_ROUT1_HP_B2_STAGE2_TYPE SIGMASTUDIOTYPE_8_24
#define MOD_IMPACT1_ROUT1_HP_B2_STAGE2_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_B2_STAGE2_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_B2_STAGE2_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_B2_STAGE2_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_STAGES_ADDR 0
#define MOD_IMPACT1_ROUT1_HP_STAGES_FIXPT 0x00000004
#define MOD_IMPACT1_ROUT1_HP_STAGES_VALUE SIGMASTUDIOTYPE_INTEGER_CONVERT(4)
#define MOD_IMPACT1_ROUT1_HP_STAGES_TYPE SIGMASTUDIOTYPE_INTEGER
#define MOD_IMPACT1_ROUT1_HP_A1_STAGE3_ADDR 3258
#define MOD_IMPACT1_ROUT1_HP_A1_STAGE3_FIXPT 0x01FAEEF0
#define MOD_IMPACT1_ROUT1_HP_A1_STAGE3_VALUE SIGMASTUDIOTYPE_8_24_CONVERT(1.98020836788497)
#define MOD_IMPACT1_ROUT1_HP_A1_STAGE3_TYPE SIGMASTUDIOTYPE_8_24
#define MOD_IMPACT1_ROUT1_HP_A1_STAGE3_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_A1_STAGE3_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_A1_STAGE3_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_A1_STAGE3_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_A2_STAGE3_ADDR 3257
#define MOD_IMPACT1_ROUT1_HP_A2_STAGE3_FIXPT 0xFF0488BF
#define MOD_IMPACT1_ROUT1_HP_A2_STAGE3_VALUE SIGMASTUDIOTYPE_8_24_CONVERT(-0.982288420076269)
#define MOD_IMPACT1_ROUT1_HP_A2_STAGE3_TYPE SIGMASTUDIOTYPE_8_24
#define MOD_IMPACT1_ROUT1_HP_A2_STAGE3_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_A2_STAGE3_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_A2_STAGE3_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_A2_STAGE3_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_B0_STAGE3_ADDR 3256
#define MOD_IMPACT1_ROUT1_HP_B0_STAGE3_FIXPT 0x00FD998C
#define MOD_IMPACT1_ROUT1_HP_B0_STAGE3_VALUE SIGMASTUDIOTYPE_8_24_CONVERT(0.990624196990309)
#define MOD_IMPACT1_ROUT1_HP_B0_STAGE3_TYPE SIGMASTUDIOTYPE_8_24
#define MOD_IMPACT1_ROUT1_HP_B0_STAGE3_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_B0_STAGE3_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_B0_STAGE3_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_B0_STAGE3_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_B1_STAGE3_ADDR 3255
#define MOD_IMPACT1_ROUT1_HP_B1_STAGE3_FIXPT 0xFE04CCE8
#define MOD_IMPACT1_ROUT1_HP_B1_STAGE3_VALUE SIGMASTUDIOTYPE_8_24_CONVERT(-1.98124839398062)
#define MOD_IMPACT1_ROUT1_HP_B1_STAGE3_TYPE SIGMASTUDIOTYPE_8_24
#define MOD_IMPACT1_ROUT1_HP_B1_STAGE3_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_B1_STAGE3_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_B1_STAGE3_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_B1_STAGE3_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_B2_STAGE3_ADDR 3254
#define MOD_IMPACT1_ROUT1_HP_B2_STAGE3_FIXPT 0x00FD998C
#define MOD_IMPACT1_ROUT1_HP_B2_STAGE3_VALUE SIGMASTUDIOTYPE_8_24_CONVERT(0.990624196990309)
#define MOD_IMPACT1_ROUT1_HP_B2_STAGE3_TYPE SIGMASTUDIOTYPE_8_24
#define MOD_IMPACT1_ROUT1_HP_B2_STAGE3_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_B2_STAGE3_MEM_PAGE 0
#define MOD_IMPACT1_ROUT1_HP_B2_STAGE3_DATA_MEMORY "DM0"
#define MOD_IMPACT1_ROUT1_HP_B2_STAGE3_MEM_PAGE 0
To adjust butterworth using biquad coefficient,
can I calculate the biquad coefficient value of 2nd order hp (frequency, gain, Q => a0,a1,b0,b1,b2)
and put the same value in "_VALUE" and "_FIXPT" of 4 biquad cascades by MCU?
thanks
Audio Signal Processors
software
adau1467
SigmaDSP Audio Processors
sigma studio plus 2.3.0.3
Hello gine,
If you want to change the filter parameters, then change the parameters in sigma studio+ and get all 20 updated coefficients and load them into their respective addresses from MCU.
gine said:
can I calculate the biquad coefficient value of 2nd order hp (frequency, gain, Q => a0,a1,b0,b1,b2)
and put the same value in "_VALUE" and "_FIXPT" of 4 biquad cascades by MCU?
Here is the 8th order Butterworth filter (there are 20 coefficients, thus 4 2nd order IIR filters cascaded) but each filter has different coefficients (slightly changed). Here all four cascaded filters don't have the same coefficients, so it's not like a single 2nd order filter copy pasted three times.
So, you should get all 20 coefficients and load them from your MCU, just to simulate this block's function.
If you get a single 2nd order filter (5 coeff) and put the same value for all 4 sets of Nth order filter block's respective addresses, then response will not be the expected one.
Below is an example from SS stimulus and probe.
Here I took the Nth order filters coefficients and used 4 cascaded 2nd order IIR filter, you can see the response here. (I can't use stimulus and probe with Nth order filter directly, so I used its coeff with 2nd order IIR entry mode filter)
In below example, I used a 2nd order filter and cascaded the same filter (same parameters/coeff), you can see the response below.
You can compare the two responses, if you are ok with the differences then you can use it. But note that it's not the same.
Regards,
Harish
Hi Harish
thank you very much for your detailed explanation
I understand 2nd order filter cascade (x4) = 8th order filter.
what I am trying to do is,
to control parameters using another Program(that we are building) instead of Sigma Studio 4.7 or Sigma studio plus.
for example, to control "mute" named "impact1_rout1_Mute",
in PARAM.h file,
another program, write 0 or 1 into "impact1_rout1_Mute_Mute_Value".
then the mute funtion on and off.
am I right?
but to do same thing for IIR filter,
I found parameters using biquad coefficient instead of Frequency, Q, Gain on the Sigma studio module.
so, to get same result from our program with Sigma Studio,
I think to know how biquad calculation carry out in Sigma Studio.(
is there any other way to use Frequency, Q, Gain in another program using biquad calculation of Sigma Studio?
thanks
Hello gine,
You are right, after you designed your sigma studio program, just compile it and export system files, now you have the param.h file which contains the parameter addresses, you can send commands from your uC to access the particular module. For example, to control the mute module, you will send commands to mute/unmute the module from your uC. It seems like you are aware of that.
For filters, a general 2nd order (Biquad) IIR filter has 5 coefficients which design the filter (freq/phase response). The filter calculations happen in your PC (sigma studio). SS calculates the coefficients from the parameters (freq, gain etc) you enter in the GUI and safeload them into the DSP in runtime. Here is the formula for calculating the filter coefficients.
If your project has a filter and you compiled it and exported the files, you will have the address of the filter coefficients in the param.h file (like you attached above). If you want to change the filter parameters in between to have a different filter, then you have to update the new set of coefficients. For that you can either use SS to enter your desired parameters (freq,gain,boost) and get/copy the updated coefficients from capture window and send those coefficients from your uC (or) use the formula given in that link to derive your new coefficients and send them from your uC. This is the same for most of the filters, filters which use SS for coefficients calculation.
If you don't want to do all these, you just want to update the freq, gain parameter directly from your uC, then there is also a version of the general second order filter that does the coefficient calculation inside the DSP. Look in the Tree Toolbox under Filters/Coeff Calculations/Second Order/Single Precision/General (2nd Order). The documentation is here:
This version of the filter block calculates the biquad coefficients on the DSP based on parameters that may be updated by a microcontroller (or using the Parameter Update block).
Here you don't need to calculate the filter coefficients externally and load them into the DSP, you can just change the filter parameter from Uc, then the DSP itself calculates the new coefficients for that parameter and use it. This version uses a little more DSP resource obviously.
I used SS by default, SS+ also has the same things available.
Hope this helps!
Regards,
Harish
Hi Harish
I think I understand.
thank you very much.
I tested the module under coeff calculation, it have Frequency/Q/Gain.
I have one more question.
Is there a way to disable or exclude some module(block) to reduce total instant cycle of a project?
I'm using sigma studio plus,
The post I found is below,
Is this the only way?
thanks again
Please log in to reply.








