pkg load signal #faktor = 134217728; #faktor = 268435456; #faktor = 536870912; faktorb = 63566; # 15.16 faktora = 0 - faktorb; fid = fopen("../filter_long_lp1.c", "wt"); fprintf(fid, "#include \n\n"); fprintf(fid, "extern long dsp12_par[8][32];\n"); fprintf(fid, "extern long(*dsp12_effect_1)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_2)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_3)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_4)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_5)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_6)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_7)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_8)(long,long*);\n"); fprintf(fid, "extern void dsp12_calc_pregain(int pos,int gain);\n"); fprintf(fid, "extern void dsp12_calc_postgain(int pos,int gain);\n"); fprintf(fid, "extern void dsp12_clear_states(int pos);\n"); fprintf(fid, "extern void ticks_wait(unsigned int);\n"); fprintf(fid, "extern void dsp12_bypass(int pos);\n\n"); fprintf(fid, "extern long dsp12_effect_filter1(long inval,long *param);\n"); fprintf(fid, "//#######################################################################\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# filter table for butterworth 1st grade low pass #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# (a0 is fixed to 1), a1, b0, b1 #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# (c) 2021-2022 Joerg Wolfram #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//#######################################################################\n"); fprintf(fid, "TAB_TYPE long dsp12_filterkoeff_long_lp1[252]\n = {\n") fd = 1.05946309436; sv = 0.707107; for i=0:83 sv = sv / fd; [b,a]=butter ( 1, sv , "low", "z"); k1 = round(a(1,2) * faktora); # A1 k3 = round(b(1,1) * faktorb); # B0 k4 = round(b(1,2) * faktorb); # B1 kf = round(24000 * sv); # printf("LP(%dHz) -> %i\n",kf,g(1,1)); if i < 83 fprintf(fid, '\t%iL, %iL, %iL,\t// (%i) frequ = %d Hz\n',k1,k3,k4,i,kf); else fprintf(fid, '\t%iL, %iL, %iL}; \t// (%i) frequ = %d Hz\n',k1,k3,k4,i,kf); end end fprintf(fid,"\n") fprintf(fid, "//########################################################################\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# setup butterworth lowpass filter 1st grade #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# Parameter 1 ; position (0..7) #\n"); fprintf(fid, "//# Parameter 2 ; frequency index (0->16KHz..83->133Hz) #\n"); fprintf(fid, "//# Parameter 3 ; pregain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# Parameter 4 ; post-gain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//########################################################################\n"); fprintf(fid, "void dsp12_lowpass1(int pos,int freq,int gain,int postgain)\n"); fprintf(fid, "{\n"); fprintf(fid, " long *param=&dsp12_par[pos][0];\n\n"); fprintf(fid, " dsp12_bypass(pos);\n\n"); fprintf(fid, " if(freq > 83) freq=83;\n"); fprintf(fid, " freq *=3;\n"); fprintf(fid, " dsp12_calc_pregain(pos,gain);\n"); fprintf(fid, " dsp12_calc_postgain(pos,postgain);\n"); fprintf(fid, " param[0] = dsp12_filterkoeff_long_lp1[freq];\t//-a1\n"); fprintf(fid, " param[1] = 0;\t//-a2\n"); fprintf(fid, " param[2] = dsp12_filterkoeff_long_lp1[freq+1];\t//b0\n"); fprintf(fid, " param[3] = dsp12_filterkoeff_long_lp1[freq+2];\t//b1\n"); fprintf(fid, " param[4] = 0;\t//b2\n"); fprintf(fid, " dsp12_clear_states(pos);\n"); fprintf(fid, " switch(pos)\n"); fprintf(fid, " {\n"); fprintf(fid, " case 0: dsp12_effect_1 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " case 1: dsp12_effect_2 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " case 2: dsp12_effect_3 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " case 3: dsp12_effect_4 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " case 4: dsp12_effect_5 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " case 5: dsp12_effect_6 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " case 6: dsp12_effect_7 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " default: dsp12_effect_8 = dsp12_effect_filter1+ASM_OFFSET;\n"); fprintf(fid, " }\n"); fprintf(fid, "}\n\n"); fprintf(fid,"\n") fprintf(fid, "//########################################################################\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# set butterworth lowpass filter 1st grade #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# Parameter 1 ; position (0..7) #\n"); fprintf(fid, "//# Parameter 2 ; frequency index (0->16KHz..83->133Hz) #\n"); fprintf(fid, "//# Parameter 3 ; pregain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# Parameter 4 ; post-gain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//########################################################################\n"); fprintf(fid, "void dsp12_lowpass1_set(int pos,int freq,int gain,int postgain)\n"); fprintf(fid, "{\n"); fprintf(fid, " long *param=&dsp12_par[pos][0];\n\n"); fprintf(fid, " if(freq > 83) freq=83;\n"); fprintf(fid, " freq *=3;\n"); fprintf(fid, " ticks_wait(1);\n"); fprintf(fid, " dsp12_calc_pregain(pos,gain);\n"); fprintf(fid, " dsp12_calc_postgain(pos,postgain);\n"); fprintf(fid, " param[0] = dsp12_filterkoeff_long_lp1[freq];\t//-a1\n"); fprintf(fid, " param[1] = 0;\t//-a2\n"); fprintf(fid, " param[2] = dsp12_filterkoeff_long_lp1[freq+1];\t//b0\n"); fprintf(fid, " param[3] = dsp12_filterkoeff_long_lp1[freq+2];\t//b1\n"); fprintf(fid, " param[4] = 0;\t//b2\n"); fprintf(fid, "}\n\n"); fclose(fid); #----------------------------------------------------------------------------------------------------------------------- fid = fopen("../filter_long_hp1.c", "wt"); fprintf(fid, "#include \n\n"); fprintf(fid, "extern long dsp12_par[8][32];\n"); fprintf(fid, "extern long(*dsp12_effect_1)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_2)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_3)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_4)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_5)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_6)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_7)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_8)(long,long*);\n"); fprintf(fid, "extern void dsp12_calc_pregain(int pos,int gain);\n"); fprintf(fid, "extern void dsp12_calc_postgain(int pos,int gain);\n"); fprintf(fid, "extern void dsp12_clear_states(int pos);\n"); fprintf(fid, "extern void ticks_wait(unsigned int);\n"); fprintf(fid, "extern void dsp12_bypass(int pos);\n\n"); fprintf(fid, "extern long dsp12_effect_filter1(long inval,long *param);\n"); fprintf(fid, "//#######################################################################\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# filter table for butterworth 1st grade high pass #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# (a0 is fixed to 1), a1, b0, b1 #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# (c) 2021-2022 Joerg Wolfram #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//#######################################################################\n"); fprintf(fid,"TAB_TYPE long dsp12_filterkoeff_long_hp1[252]\n = {\n") fd = 1.05946309436; sv = 0.707107; for i=0:83 sv = sv / fd; [b,a]=butter ( 1, sv ,"high", "z"); k1 = round(a(1,2) * faktora); # A1 k3 = round(b(1,1) * faktorb); # B0 k4 = round(b(1,2) * faktorb); # B1 kf = round(24000 * sv); # printf("LP(%dHz) -> %i\n",kf,g(1,1)); if i < 83 fprintf(fid, '\t%iL, %iL, %iL,\t// (%i) frequ = %d Hz\n',k1,k3,k4,i,kf); else fprintf(fid, '\t%iL, %iL, %iL}; \t// (%i) frequ = %d Hz\n',k1,k3,k4,i,kf); end end fprintf(fid,"\n") fprintf(fid, "//########################################################################\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# set butterworth highpass filter 1st grade #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# Parameter 1 ; position (0..7) #\n"); fprintf(fid, "//# Parameter 2 ; frequency index (0->16KHz..83->133Hz) #\n"); fprintf(fid, "//# Parameter 3 ; pregain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# Parameter 4 ; post-gain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//########################################################################\n"); fprintf(fid, "void dsp12_highpass1(int pos,int freq,int gain,int postgain)\n"); fprintf(fid, "{\n"); fprintf(fid, " long *param=&dsp12_par[pos][0];\n\n"); fprintf(fid, " dsp12_bypass(pos);\n\n"); fprintf(fid, " if(freq > 83) freq=83;\n"); fprintf(fid, " freq *=3;\n"); fprintf(fid, " dsp12_calc_pregain(pos,gain);\n"); fprintf(fid, " dsp12_calc_postgain(pos,postgain);\n"); fprintf(fid, " param[0] = dsp12_filterkoeff_long_hp1[freq];\t//-a1\n"); fprintf(fid, " param[1] = 0;\t//-a2\n"); fprintf(fid, " param[2] = dsp12_filterkoeff_long_hp1[freq+1];\t//b0\n"); fprintf(fid, " param[3] = dsp12_filterkoeff_long_hp1[freq+2];\t//b1\n"); fprintf(fid, " param[4] = 0;\t//b2\n"); fprintf(fid, " dsp12_clear_states(pos);\n"); fprintf(fid, " switch(pos)\n"); fprintf(fid, " {\n"); fprintf(fid, " case 0: dsp12_effect_1 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " case 1: dsp12_effect_2 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " case 2: dsp12_effect_3 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " case 3: dsp12_effect_4 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " case 4: dsp12_effect_5 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " case 5: dsp12_effect_6 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " case 6: dsp12_effect_7 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " default: dsp12_effect_8 = dsp12_effect_filter1+ASM_OFFSET;\n"); fprintf(fid, " }\n"); fprintf(fid, "}\n\n"); fprintf(fid,"\n") fprintf(fid, "//########################################################################\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# set butterworth highpass filter 1st grade #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# Parameter 1 ; position (0..7) #\n"); fprintf(fid, "//# Parameter 2 ; frequency index (0->16KHz..83->133Hz) #\n"); fprintf(fid, "//# Parameter 3 ; pregain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# Parameter 4 ; post-gain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//########################################################################\n"); fprintf(fid, "void dsp12_highpass1_set(int pos,int freq,int gain,int postgain)\n"); fprintf(fid, "{\n"); fprintf(fid, " long *param=&dsp12_par[pos][0];\n\n"); fprintf(fid, " if(freq > 83) freq=83;\n"); fprintf(fid, " freq *=3;\n"); fprintf(fid, " ticks_wait(1);\n"); fprintf(fid, " dsp12_calc_pregain(pos,gain);\n"); fprintf(fid, " dsp12_calc_postgain(pos,postgain);\n"); fprintf(fid, " param[0] = dsp12_filterkoeff_long_hp1[freq];\t//-a1\n"); fprintf(fid, " param[1] = 0;\t//-a2\n"); fprintf(fid, " param[2] = dsp12_filterkoeff_long_hp1[freq+1];\t//b0\n"); fprintf(fid, " param[3] = dsp12_filterkoeff_long_hp1[freq+2];\t//b1\n"); fprintf(fid, " param[4] = 0;\t//b2\n"); fprintf(fid, "}\n\n"); fclose(fid); #----------------------------------------------------------------------------------------------------------------------- fid = fopen("../filter_long_bp1.c", "wt"); fprintf(fid, "#include \n\n"); fprintf(fid, "extern long dsp12_par[8][32];\n"); fprintf(fid, "extern long(*dsp12_effect_1)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_2)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_3)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_4)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_5)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_6)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_7)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_8)(long,long*);\n"); fprintf(fid, "extern void dsp12_calc_pregain(int pos,int gain);\n"); fprintf(fid, "extern void dsp12_calc_postgain(int pos,int gain);\n"); fprintf(fid, "extern void dsp12_clear_states(int pos);\n"); fprintf(fid, "extern void ticks_wait(unsigned int);\n"); fprintf(fid, "extern void dsp12_bypass(int pos);\n\n"); fprintf(fid, "extern long dsp12_effect_filter1(long inval,long *param);\n"); fprintf(fid, "//#######################################################################\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# filter table for butterworth 1st grade band pass #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# (a0 is fixed to 1), a1, a2, b0, b1, b2 #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# (c) 2021-2022 Joerg Wolfram #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//#######################################################################\n"); fprintf(fid, "TAB_TYPE long dsp12_filterkoeff_long_bp1[420]\n = {\n") fd = 1.05946309436; sv = 0.707107; for i=0:83 sv = sv / fd; [b,a]=butter ( 1, [sv * 0.91,sv * 1.1],"pass","z"); k1 = round(a(1,2) * faktora); # A1 k2 = round(a(1,3) * faktora); # A2 k3 = round(b(1,1) * faktorb); # B0 k4 = round(b(1,2) * faktorb); # B1 k5 = round(b(1,3) * faktorb); # B2 kf = round(24000 * sv); # printf("LP(%dHz) -> %i\n",kf,g(1,1)); if i < 83 fprintf(fid, '\t%iL, %iL, %iL, %iL, %iL,\t// (%i) frequ = %d Hz\n',k1,k2,k3,k4,k5,i,kf); else fprintf(fid, '\t%iL, %iL, %iL, %iL, %iL};\t// (%i) frequ = %d Hz\n',k1,k2,k3,k4,k5,i,kf); end end fprintf(fid,"\n") fprintf(fid, "//########################################################################\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# setup butterworth bandpass filter 1st grade #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# Parameter 1 ; position (0..7) #\n"); fprintf(fid, "//# Parameter 2 ; frequency index (0->16KHz..83->133Hz) #\n"); fprintf(fid, "//# Parameter 3 ; pregain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# Parameter 4 ; post-gain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//########################################################################\n"); fprintf(fid, "void dsp12_bandpass1(int pos,int freq,int gain,int postgain)\n"); fprintf(fid, "{\n"); fprintf(fid, " long *param=&dsp12_par[pos][0];\n\n"); fprintf(fid, " dsp12_bypass(pos);\n\n"); fprintf(fid, " if(freq > 83) freq=83;\n"); fprintf(fid, " freq *=5;\n"); fprintf(fid, " dsp12_calc_pregain(pos,gain);\n"); fprintf(fid, " dsp12_calc_postgain(pos,postgain);\n"); fprintf(fid, " param[0] = dsp12_filterkoeff_long_bp1[freq];\t//-a1\n"); fprintf(fid, " param[1] = dsp12_filterkoeff_long_bp1[freq+1];\t//-a2\n"); fprintf(fid, " param[2] = dsp12_filterkoeff_long_bp1[freq+2];\t//b0\n"); fprintf(fid, " param[3] = dsp12_filterkoeff_long_bp1[freq+3];\t//b1\n"); fprintf(fid, " param[4] = dsp12_filterkoeff_long_bp1[freq+4];\t//b2\n"); fprintf(fid, " dsp12_clear_states(pos);\n"); fprintf(fid, " switch(pos)\n"); fprintf(fid, " {\n"); fprintf(fid, " case 0: dsp12_effect_1 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " case 1: dsp12_effect_2 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " case 2: dsp12_effect_3 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " case 3: dsp12_effect_4 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " case 4: dsp12_effect_5 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " case 5: dsp12_effect_6 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " case 6: dsp12_effect_7 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " default: dsp12_effect_8 = dsp12_effect_filter1+ASM_OFFSET;\n"); fprintf(fid, " }\n"); fprintf(fid, "}\n\n"); fprintf(fid,"\n") fprintf(fid, "//########################################################################\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# set butterworth bandpass filter 1st grade #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# Parameter 1 ; position (0..7) #\n"); fprintf(fid, "//# Parameter 2 ; frequency index (0->16KHz..83->133Hz) #\n"); fprintf(fid, "//# Parameter 3 ; pregain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# Parameter 4 ; post-gain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//########################################################################\n"); fprintf(fid, "void dsp12_bandpass1_set(int pos,int freq,int gain,int postgain)\n"); fprintf(fid, "{\n"); fprintf(fid, " long *param=&dsp12_par[pos][0];\n\n"); fprintf(fid, " if(freq > 83) freq=83;\n"); fprintf(fid, " freq *=5;\n"); fprintf(fid, " ticks_wait(1);\n"); fprintf(fid, " dsp12_calc_pregain(pos,gain);\n"); fprintf(fid, " dsp12_calc_postgain(pos,postgain);\n"); fprintf(fid, " param[0] = dsp12_filterkoeff_long_bp1[freq];\t//-a1\n"); fprintf(fid, " param[1] = dsp12_filterkoeff_long_bp1[freq+1];\t//-a2\n"); fprintf(fid, " param[2] = dsp12_filterkoeff_long_bp1[freq+2];\t//b0\n"); fprintf(fid, " param[3] = dsp12_filterkoeff_long_bp1[freq+3];\t//b1\n"); fprintf(fid, " param[4] = dsp12_filterkoeff_long_bp1[freq+4];\t//b2\n"); fprintf(fid, " dsp12_clear_states(pos);\n"); fprintf(fid, "}\n\n"); fclose(fid); #----------------------------------------------------------------------------------------------------------------------- fid = fopen("../filter_long_lp2.c", "wt"); fprintf(fid, "#include \n\n"); fprintf(fid, "extern long dsp12_par[8][32];\n"); fprintf(fid, "extern long(*dsp12_effect_1)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_2)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_3)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_4)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_5)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_6)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_7)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_8)(long,long*);\n"); fprintf(fid, "extern void dsp12_calc_pregain(int pos,int gain);\n"); fprintf(fid, "extern void dsp12_calc_postgain(int pos,int gain);\n"); fprintf(fid, "extern void dsp12_clear_states(int pos);\n"); fprintf(fid, "extern void ticks_wait(unsigned int);\n"); fprintf(fid, "extern void dsp12_bypass(int pos);\n\n"); fprintf(fid, "extern long dsp12_effect_filter1(long inval,long *param);\n"); fprintf(fid, "//#######################################################################\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# filter table for butterworth 2nd grade low pass #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# (a0 is fixed to 1), a1, a2, b0, b1, b2 #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# (c) 2021-2022 Joerg Wolfram #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//#######################################################################\n"); fprintf(fid, "TAB_TYPE long dsp12_filterkoeff_long_lp2[420]\n = {\n") fd = 1.05946309436; sv = 0.707107; for i=0:83 sv = sv / fd; [b,a]=butter ( 2, sv , "low", "z"); k1 = round(a(1,2) * faktora); # A1 k2 = round(a(1,3) * faktora); # A2 k3 = round(b(1,1) * faktorb); # B0 k4 = round(b(1,2) * faktorb); # B1 k5 = round(b(1,3) * faktorb); # B2 kf = round(24000 * sv); # printf("LP(%dHz) -> %i\n",kf,g(1,1)); if i < 83 fprintf(fid, '\t%iL, %iL, %iL, %iL, %iL,\t// (%i) frequ = %d Hz\n',k1,k2,k3,k4,k5,i,kf); else fprintf(fid, '\t%iL, %iL, %iL, %iL, %iL};\t// (%i) frequ = %d Hz\n',k1,k2,k3,k4,k5,i,kf); end end fprintf(fid,"\n") fprintf(fid, "//########################################################################\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# setup butterworth lowpass filter 2nd grade #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# Parameter 1 ; position (0..7) #\n"); fprintf(fid, "//# Parameter 2 ; frequency index (0->16KHz..83->133Hz) #\n"); fprintf(fid, "//# Parameter 3 ; pregain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# Parameter 4 ; post-gain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//########################################################################\n"); fprintf(fid, "void dsp12_lowpass2(int pos,int freq,int gain,int postgain)\n"); fprintf(fid, "{\n"); fprintf(fid, " long *param=&dsp12_par[pos][0];\n\n"); fprintf(fid, " dsp12_bypass(pos);\n\n"); fprintf(fid, " if(freq > 83) freq=83;\n"); fprintf(fid, " freq *=5;\n"); fprintf(fid, " dsp12_calc_pregain(pos,gain);\n"); fprintf(fid, " dsp12_calc_postgain(pos,postgain);\n"); fprintf(fid, " param[0] = dsp12_filterkoeff_long_lp2[freq];\t//-a1\n"); fprintf(fid, " param[1] = dsp12_filterkoeff_long_lp2[freq+1];\t//-a2\n"); fprintf(fid, " param[2] = dsp12_filterkoeff_long_lp2[freq+2];\t//b0\n"); fprintf(fid, " param[3] = dsp12_filterkoeff_long_lp2[freq+3];\t//b1\n"); fprintf(fid, " param[4] = dsp12_filterkoeff_long_lp2[freq+4];\t//b2\n"); fprintf(fid, " dsp12_clear_states(pos);\n"); fprintf(fid, " switch(pos)\n"); fprintf(fid, " {\n"); fprintf(fid, " case 0: dsp12_effect_1 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " case 1: dsp12_effect_2 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " case 2: dsp12_effect_3 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " case 3: dsp12_effect_4 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " case 4: dsp12_effect_5 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " case 5: dsp12_effect_6 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " case 6: dsp12_effect_7 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " default: dsp12_effect_8 = dsp12_effect_filter1+ASM_OFFSET;\n"); fprintf(fid, " }\n"); fprintf(fid, "}\n\n"); fprintf(fid,"\n") fprintf(fid, "//########################################################################\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# set butterworth lowpass filter 2nd grade #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# Parameter 1 ; position (0..7) #\n"); fprintf(fid, "//# Parameter 2 ; frequency index (0->16KHz..83->133Hz) #\n"); fprintf(fid, "//# Parameter 3 ; pregain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# Parameter 4 ; post-gain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//########################################################################\n"); fprintf(fid, "void dsp12_lowpass2_set(int pos,int freq,int gain,int postgain)\n"); fprintf(fid, "{\n"); fprintf(fid, " long *param=&dsp12_par[pos][0];\n\n"); fprintf(fid, " if(freq > 83) freq=83;\n"); fprintf(fid, " freq *=5;\n"); fprintf(fid, " ticks_wait(1);\n"); fprintf(fid, " dsp12_calc_pregain(pos,gain);\n"); fprintf(fid, " dsp12_calc_postgain(pos,postgain);\n"); fprintf(fid, " param[0] = dsp12_filterkoeff_long_lp2[freq];\t//-a1\n"); fprintf(fid, " param[1] = dsp12_filterkoeff_long_lp2[freq+1];\t//-a2\n"); fprintf(fid, " param[2] = dsp12_filterkoeff_long_lp2[freq+2];\t//b0\n"); fprintf(fid, " param[3] = dsp12_filterkoeff_long_lp2[freq+3];\t//b1\n"); fprintf(fid, " param[4] = dsp12_filterkoeff_long_lp2[freq+4];\t//b2\n"); fprintf(fid, " dsp12_clear_states(pos);\n"); fprintf(fid, "}\n\n"); fclose(fid); #----------------------------------------------------------------------------------------------------------------------- fid = fopen("../filter_long_hp2.c", "wt"); fprintf(fid, "#include \n\n"); fprintf(fid, "extern long dsp12_par[8][32];\n"); fprintf(fid, "extern long(*dsp12_effect_1)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_2)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_3)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_4)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_5)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_6)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_7)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_8)(long,long*);\n"); fprintf(fid, "extern void dsp12_calc_pregain(int pos,int gain);\n"); fprintf(fid, "extern void dsp12_calc_postgain(int pos,int gain);\n"); fprintf(fid, "extern void dsp12_clear_states(int pos);\n"); fprintf(fid, "extern void ticks_wait(unsigned int);\n"); fprintf(fid, "extern void dsp12_bypass(int pos);\n\n"); fprintf(fid, "extern long dsp12_effect_filter1(long inval,long *param);\n\n"); fprintf(fid, "//#######################################################################\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# filter table for butterworth 2nd grade high pass #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# (a0 is fixed to 1), a1, a2, b0, b1, b2 #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# (c) 2021-2022 Joerg Wolfram #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//#######################################################################\n"); fprintf(fid,"TAB_TYPE long dsp12_filterkoeff_long_hp2[420]\n = {\n") fd = 1.05946309436; sv = 0.707107; for i=0:83 sv = sv / fd; [b,a]=butter ( 2, sv ,"high", "z"); k1 = round(a(1,2) * faktora); # A1 k2 = round(a(1,3) * faktora); # A2 k3 = round(b(1,1) * faktorb); # B0 k4 = round(b(1,2) * faktorb); # B1 k5 = round(b(1,3) * faktorb); # B2 kf = round(24000 * sv); # printf("LP(%dHz) -> %i\n",kf,g(1,1)); if i < 83 fprintf(fid, '\t%iL, %iL, %iL, %iL, %iL,\t// (%i) frequ = %d Hz\n',k1,k2,k3,k4,k5,i,kf); else fprintf(fid, '\t%iL, %iL, %iL, %iL, %iL}; \t// (%i) frequ = %d Hz\n',k1,k2,k3,k4,k5,i,kf); end end fprintf(fid,"\n") fprintf(fid, "//########################################################################\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# setup butterworth highpass filter 2nd grade #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# Parameter 1 ; position (0..7) #\n"); fprintf(fid, "//# Parameter 2 ; frequency index (0->16KHz..83->133Hz) #\n"); fprintf(fid, "//# Parameter 3 ; pregain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# Parameter 4 ; post-gain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//########################################################################\n"); fprintf(fid, "void dsp12_highpass2(int pos,int freq,int gain,int postgain)\n"); fprintf(fid, "{\n"); fprintf(fid, " long *param=&dsp12_par[pos][0];\n\n"); fprintf(fid, " dsp12_bypass(pos);\n\n"); fprintf(fid, " if(freq > 83) freq=83;\n"); fprintf(fid, " freq *=5;\n"); fprintf(fid, " dsp12_calc_pregain(pos,gain);\n"); fprintf(fid, " dsp12_calc_postgain(pos,postgain);\n"); fprintf(fid, " param[0] = dsp12_filterkoeff_long_hp2[freq];\t//-a1\n"); fprintf(fid, " param[1] = dsp12_filterkoeff_long_hp2[freq+1];\t//-a2\n"); fprintf(fid, " param[2] = dsp12_filterkoeff_long_hp2[freq+2];\t//b0\n"); fprintf(fid, " param[3] = dsp12_filterkoeff_long_hp2[freq+3];\t//b1\n"); fprintf(fid, " param[4] = dsp12_filterkoeff_long_hp2[freq+4];\t//b2\n"); fprintf(fid, " dsp12_clear_states(pos);\n"); fprintf(fid, " switch(pos)\n"); fprintf(fid, " {\n"); fprintf(fid, " case 0: dsp12_effect_1 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " case 1: dsp12_effect_2 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " case 2: dsp12_effect_3 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " case 3: dsp12_effect_4 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " case 4: dsp12_effect_5 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " case 5: dsp12_effect_6 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " case 6: dsp12_effect_7 = dsp12_effect_filter1+ASM_OFFSET;break;\n"); fprintf(fid, " default: dsp12_effect_8 = dsp12_effect_filter1+ASM_OFFSET;\n"); fprintf(fid, " }\n"); fprintf(fid, "}\n\n"); fprintf(fid,"\n") fprintf(fid, "//########################################################################\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# set butterworth highpass filter 2nd grade #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# Parameter 1 ; position (0..7) #\n"); fprintf(fid, "//# Parameter 2 ; frequency index (0->16KHz..83->133Hz) #\n"); fprintf(fid, "//# Parameter 3 ; pregain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# Parameter 4 ; post-gain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//########################################################################\n"); fprintf(fid, "void dsp12_highpass2_set(int pos,int freq,int gain,int postgain)\n"); fprintf(fid, "{\n"); fprintf(fid, " long *param=&dsp12_par[pos][0];\n\n"); fprintf(fid, " if(freq > 83) freq=83;\n"); fprintf(fid, " freq *=5;\n"); fprintf(fid, " ticks_wait(1);\n"); fprintf(fid, " dsp12_calc_pregain(pos,gain);\n"); fprintf(fid, " dsp12_calc_postgain(pos,postgain);\n"); fprintf(fid, " param[0] = dsp12_filterkoeff_long_hp2[freq];\t//-a1\n"); fprintf(fid, " param[1] = dsp12_filterkoeff_long_hp2[freq+1];\t//-a2\n"); fprintf(fid, " param[2] = dsp12_filterkoeff_long_hp2[freq+2];\t//b0\n"); fprintf(fid, " param[3] = dsp12_filterkoeff_long_hp2[freq+3];\t//b1\n"); fprintf(fid, " param[4] = dsp12_filterkoeff_long_hp2[freq+4];\t//b2\n"); fprintf(fid, " dsp12_clear_states(pos);\n"); fprintf(fid, "}\n\n"); fclose(fid); #----------------------------------------------------------------------------------------------------------------------- fid = fopen("../filter_long_bp2.c", "wt"); fprintf(fid, "#include \n\n"); fprintf(fid, "extern long dsp12_par[8][32];\n"); fprintf(fid, "extern long(*dsp12_effect_1)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_2)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_3)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_4)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_5)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_6)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_7)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_8)(long,long*);\n"); fprintf(fid, "extern void dsp12_calc_pregain(int pos,int gain);\n"); fprintf(fid, "extern void dsp12_calc_postgain(int pos,int gain);\n"); fprintf(fid, "extern void dsp12_clear_states(int pos);\n"); fprintf(fid, "extern void ticks_wait(unsigned int);\n"); fprintf(fid, "extern void dsp12_bypass(int pos);\n\n"); fprintf(fid, "extern long dsp12_effect_filter2(long inval,long *param);\n\n"); fprintf(fid, "//#######################################################################\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# filter table for butterworth 2nd grade band pass #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# (a0 is fixed to 1), a1, a2, b0, b1, b2 [1.stage] #\n"); fprintf(fid, "//# a1, a2, b0, b1, b2 [2.stage] #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# (c) 2021-2022 Joerg Wolfram #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//#######################################################################\n"); fprintf(fid,"TAB_TYPE long dsp12_filterkoeff_long_bp2[840]\n = {\n") fd = 1.05946309436; sv = 0.707107; for i=0:83 sv = sv / fd; [b,a]=butter ( 2, [sv * 0.91,sv * 1.1],"pass","z"); [sos,g]=tf2sos(b,a); k0 = sqrt(g(1,1)); k1 = round(sos(1,5) * faktora); k2 = round(sos(1,6) * faktora); k3 = round(sos(1,1) * faktorb * k0); k4 = round(sos(1,2) * faktorb * k0); k5 = round(sos(1,3) * faktorb * k0); k6 = round(sos(2,5) * faktora); k7 = round(sos(2,6) * faktora); k8 = round(sos(2,1) * faktorb * k0); k9 = round(sos(2,2) * faktorb * k0); k10 = round(sos(2,3) * faktorb * k0); kf = round(24000 * sv); # printf("BP(%dHz) -> %i\n",kf,g(1,1)); if i < 83 fprintf(fid, '\t%iL, %iL, %iL, %iL, %iL,\t// (%i) frequ = %d Hz\n',k1,k2,k3,k4,k5,i,kf); fprintf(fid, '\t%iL, %iL, %iL, %iL, %iL,\n',k6,k7,k8,k9,k10); else fprintf(fid, '\t%iL, %iL, %iL, %iL, %iL,\t// (%i) frequ = %d Hz\n',k1,k2,k3,k4,k5,i,kf); fprintf(fid, '\t%iL, %iL, %iL, %iL, %iL};\n',k6,k7,k8,k9,k10); end end fprintf(fid,"\n") fprintf(fid, "//########################################################################\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# setup butterworth bandpass filter 2nd grade #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# Parameter 1 ; position (0..7) #\n"); fprintf(fid, "//# Parameter 2 ; frequency index (0->16KHz..83->133Hz) #\n"); fprintf(fid, "//# Parameter 3 ; pregain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# Parameter 4 ; post-gain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//########################################################################\n"); fprintf(fid, "void dsp12_bandpass2(int pos,int freq,int gain,int postgain)\n"); fprintf(fid, "{\n"); fprintf(fid, " long *param=&dsp12_par[pos][0];\n\n"); fprintf(fid, " dsp12_bypass(pos);\n\n"); fprintf(fid, " if(freq > 83) freq=83;\n"); fprintf(fid, " freq *=10;\n"); fprintf(fid, " dsp12_calc_pregain(pos,gain);\n"); fprintf(fid, " dsp12_calc_postgain(pos,postgain);\n"); fprintf(fid, " param[0] = dsp12_filterkoeff_long_bp2[freq+5];\t//-a1 (2)\n"); fprintf(fid, " param[1] = dsp12_filterkoeff_long_bp2[freq+6];\t//-a2 (2)\n"); fprintf(fid, " param[2] = dsp12_filterkoeff_long_bp2[freq+7];\t//b0 (2)\n"); fprintf(fid, " param[3] = dsp12_filterkoeff_long_bp2[freq+8];\t//b1 (2)\n"); fprintf(fid, " param[4] = dsp12_filterkoeff_long_bp2[freq+9];\t//b2 (2)\n"); fprintf(fid, " param[5] = dsp12_filterkoeff_long_bp2[freq+0];\t//-a1 (1)\n"); fprintf(fid, " param[6] = dsp12_filterkoeff_long_bp2[freq+1];\t//-a2 (1)\n"); fprintf(fid, " param[7] = dsp12_filterkoeff_long_bp2[freq+2];\t//b0 (1)\n"); fprintf(fid, " param[8] = dsp12_filterkoeff_long_bp2[freq+3];\t//b1 (1)\n"); fprintf(fid, " param[9] = dsp12_filterkoeff_long_bp2[freq+4];\t//b2 (1)\n"); fprintf(fid, " dsp12_clear_states(pos);\n"); fprintf(fid, " switch(pos)\n"); fprintf(fid, " {\n"); fprintf(fid, " case 0: dsp12_effect_1 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 1: dsp12_effect_2 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 2: dsp12_effect_3 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 3: dsp12_effect_4 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 4: dsp12_effect_5 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 5: dsp12_effect_6 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 6: dsp12_effect_7 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " default: dsp12_effect_8 = dsp12_effect_filter2+ASM_OFFSET;\n"); fprintf(fid, " }\n"); fprintf(fid, "}\n\n"); fprintf(fid,"\n") fprintf(fid, "//########################################################################\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# set butterworth bandpass filter 2nd grade #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# Parameter 1 ; position (0..7) #\n"); fprintf(fid, "//# Parameter 2 ; frequency index (0->16KHz..83->133Hz) #\n"); fprintf(fid, "//# Parameter 3 ; pregain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# Parameter 4 ; post-gain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//########################################################################\n"); fprintf(fid, "void dsp12_bandpass2_set(int pos,int freq,int gain,int postgain)\n"); fprintf(fid, "{\n"); fprintf(fid, " long *param=&dsp12_par[pos][0];\n\n"); fprintf(fid, " if(freq > 83) freq=83;\n"); fprintf(fid, " freq *=10;\n"); fprintf(fid, " ticks_wait(1);\n"); fprintf(fid, " dsp12_calc_pregain(pos,gain);\n"); fprintf(fid, " dsp12_calc_postgain(pos,postgain);\n"); fprintf(fid, " param[0] = dsp12_filterkoeff_long_bp2[freq+5];\t//-a1 (2)\n"); fprintf(fid, " param[1] = dsp12_filterkoeff_long_bp2[freq+6];\t//-a2 (2)\n"); fprintf(fid, " param[2] = dsp12_filterkoeff_long_bp2[freq+7];\t//b0 (2)\n"); fprintf(fid, " param[3] = dsp12_filterkoeff_long_bp2[freq+8];\t//b1 (2)\n"); fprintf(fid, " param[4] = dsp12_filterkoeff_long_bp2[freq+9];\t//b2 (2)\n"); fprintf(fid, " param[5] = dsp12_filterkoeff_long_bp2[freq+0];\t//-a1 (1)\n"); fprintf(fid, " param[6] = dsp12_filterkoeff_long_bp2[freq+1];\t//-a2 (1)\n"); fprintf(fid, " param[7] = dsp12_filterkoeff_long_bp2[freq+2];\t//b0 (1)\n"); fprintf(fid, " param[8] = dsp12_filterkoeff_long_bp2[freq+3];\t//b1 (1)\n"); fprintf(fid, " param[9] = dsp12_filterkoeff_long_bp2[freq+4];\t//b2 (1)\n"); fprintf(fid, "}\n\n"); fclose(fid); #----------------------------------------------------------------------------------------------------------------------- fid = fopen("../filter_long_bs2.c", "wt"); fprintf(fid, "#include \n\n"); fprintf(fid, "extern long dsp12_par[8][32];\n"); fprintf(fid, "extern long(*dsp12_effect_1)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_2)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_3)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_4)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_5)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_6)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_7)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_8)(long,long*);\n"); fprintf(fid, "extern void dsp12_calc_pregain(int pos,int gain);\n"); fprintf(fid, "extern void dsp12_calc_postgain(int pos,int gain);\n"); fprintf(fid, "extern void dsp12_clear_states(int pos);\n"); fprintf(fid, "extern void ticks_wait(unsigned int);\n"); fprintf(fid, "extern void dsp12_bypass(int pos);\n\n"); fprintf(fid, "extern long dsp12_effect_filter2(long inval,long *param);\n\n"); fprintf(fid, "//#######################################################################\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# filter table for butterworth 2nd grade band stop #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# (a0 is fixed to 1), a1, a2, b0, b1, b2 [1.stage] #\n"); fprintf(fid, "//# a1, a2, b0, b1, b2 [2.stage] #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# (c) 2021-2022 Joerg Wolfram #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//#######################################################################\n"); fprintf(fid,"TAB_TYPE long dsp12_filterkoeff_long_bs2[840]\n = {\n") fd = 1.05946309436; sv = 0.707107; for i=0:83 sv = sv / fd; [b,a]=butter ( 2, [sv * 0.91,sv * 1.1], "stop", "z"); [sos,g]=tf2sos(b,a); k0 = sqrt(g(1,1)); k1 = round(sos(1,5) * faktora); k2 = round(sos(1,6) * faktora); k3 = round(sos(1,1) * faktorb * k0); k4 = round(sos(1,2) * faktorb * k0); k5 = round(sos(1,3) * faktorb * k0); k6 = round(sos(2,5) * faktora); k7 = round(sos(2,6) * faktora); k8 = round(sos(2,1) * faktorb * k0); k9 = round(sos(2,2) * faktorb * k0); k10 = round(sos(2,3) * faktorb * k0); kf = round(24000 * sv); # printf("BP(%dHz) -> %i\n",kf,g(1,1)); if i < 83 fprintf(fid, '\t%iL, %iL, %iL, %iL, %iL,\t// (%i) frequ = %d Hz\n',k1,k2,k3,k4,k5,i,kf); fprintf(fid, '\t%iL, %iL, %iL, %iL, %iL,\n',k6,k7,k8,k9,k10); else fprintf(fid, '\t%iL, %iL, %iL, %iL, %iL,\t// (%i) frequ = %d Hz\n',k1,k2,k3,k4,k5,i,kf); fprintf(fid, '\t%iL, %iL, %iL, %iL, %iL};\n',k6,k7,k8,k9,k10); end end fprintf(fid,"\n") fprintf(fid, "//########################################################################\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# setup butterworth bandstop filter 2nd grade #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# Parameter 1 ; position (0..7) #\n"); fprintf(fid, "//# Parameter 2 ; frequency index (0->16KHz..83->133Hz) #\n"); fprintf(fid, "//# Parameter 3 ; pregain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# Parameter 4 ; post-gain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//########################################################################\n"); fprintf(fid, "void dsp12_bandstop2(int pos,int freq,int gain,int postgain)\n"); fprintf(fid, "{\n"); fprintf(fid, " long *param=&dsp12_par[pos][0];\n\n"); fprintf(fid, " dsp12_bypass(pos);\n\n"); fprintf(fid, " if(freq > 83) freq=83;\n"); fprintf(fid, " freq *=10;\n"); fprintf(fid, " dsp12_calc_pregain(pos,gain);\n"); fprintf(fid, " dsp12_calc_postgain(pos,postgain);\n"); fprintf(fid, " param[0] = dsp12_filterkoeff_long_bs2[freq+5];\t//-a1 (2)\n"); fprintf(fid, " param[1] = dsp12_filterkoeff_long_bs2[freq+6];\t//-a2 (2)\n"); fprintf(fid, " param[2] = dsp12_filterkoeff_long_bs2[freq+7];\t//b0 (2)\n"); fprintf(fid, " param[3] = dsp12_filterkoeff_long_bs2[freq+8];\t//b1 (2)\n"); fprintf(fid, " param[4] = dsp12_filterkoeff_long_bs2[freq+9];\t//b2 (2)\n"); fprintf(fid, " param[5] = dsp12_filterkoeff_long_bs2[freq+0];\t//-a1 (1)\n"); fprintf(fid, " param[6] = dsp12_filterkoeff_long_bs2[freq+1];\t//-a2 (1)\n"); fprintf(fid, " param[7] = dsp12_filterkoeff_long_bs2[freq+2];\t//b0 (1)\n"); fprintf(fid, " param[8] = dsp12_filterkoeff_long_bs2[freq+3];\t//b1 (1)\n"); fprintf(fid, " param[9] = dsp12_filterkoeff_long_bs2[freq+4];\t//b2 (1)\n"); fprintf(fid, " dsp12_clear_states(pos);\n"); fprintf(fid, " switch(pos)\n"); fprintf(fid, " {\n"); fprintf(fid, " case 0: dsp12_effect_1 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 1: dsp12_effect_2 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 2: dsp12_effect_3 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 3: dsp12_effect_4 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 4: dsp12_effect_5 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 5: dsp12_effect_6 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 6: dsp12_effect_7 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " default: dsp12_effect_8 = dsp12_effect_filter2+ASM_OFFSET;\n"); fprintf(fid, " }\n"); fprintf(fid, "}\n\n"); fprintf(fid,"\n") fprintf(fid, "//########################################################################\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# set butterworth bandstop filter 2nd grade #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# Parameter 1 ; position (0..7) #\n"); fprintf(fid, "//# Parameter 2 ; frequency index (0->16KHz..83->133Hz) #\n"); fprintf(fid, "//# Parameter 3 ; pregain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# Parameter 4 ; post-gain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//########################################################################\n"); fprintf(fid, "void dsp12_bandstop2_set(int pos,int freq,int gain,int postgain)\n"); fprintf(fid, "{\n"); fprintf(fid, " long *param=&dsp12_par[pos][0];\n\n"); fprintf(fid, " if(freq > 83) freq=83;\n"); fprintf(fid, " freq *=10;\n"); fprintf(fid, " ticks_wait(1);\n"); fprintf(fid, " dsp12_calc_pregain(pos,gain);\n"); fprintf(fid, " dsp12_calc_postgain(pos,postgain);\n"); fprintf(fid, " param[0] = dsp12_filterkoeff_long_bs2[freq+5];\t//-a1 (2)\n"); fprintf(fid, " param[1] = dsp12_filterkoeff_long_bs2[freq+6];\t//-a2 (2)\n"); fprintf(fid, " param[2] = dsp12_filterkoeff_long_bs2[freq+7];\t//b0 (2)\n"); fprintf(fid, " param[3] = dsp12_filterkoeff_long_bs2[freq+8];\t//b1 (2)\n"); fprintf(fid, " param[4] = dsp12_filterkoeff_long_bs2[freq+9];\t//b2 (2)\n"); fprintf(fid, " param[5] = dsp12_filterkoeff_long_bs2[freq+0];\t//-a1 (1)\n"); fprintf(fid, " param[6] = dsp12_filterkoeff_long_bs2[freq+1];\t//-a2 (1)\n"); fprintf(fid, " param[7] = dsp12_filterkoeff_long_bs2[freq+2];\t//b0 (1)\n"); fprintf(fid, " param[8] = dsp12_filterkoeff_long_bs2[freq+3];\t//b1 (1)\n"); fprintf(fid, " param[9] = dsp12_filterkoeff_long_bs2[freq+4];\t//b2 (1)\n"); fprintf(fid, "}\n\n"); fclose(fid); #----------------------------------------------------------------------------------------------------------------------- fid = fopen("../filter_long_bp2w.c", "wt"); fprintf(fid, "#include \n\n"); fprintf(fid, "extern long dsp12_par[8][32];\n"); fprintf(fid, "extern long(*dsp12_effect_1)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_2)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_3)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_4)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_5)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_6)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_7)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_8)(long,long*);\n"); fprintf(fid, "extern void dsp12_calc_pregain(int pos,int gain);\n"); fprintf(fid, "extern void dsp12_calc_postgain(int pos,int gain);\n"); fprintf(fid, "extern void dsp12_clear_states(int pos);\n"); fprintf(fid, "extern void ticks_wait(unsigned int);\n"); fprintf(fid, "extern void dsp12_bypass(int pos);\n\n"); fprintf(fid, "extern long dsp12_effect_filter2(long inval,long *param);\n\n"); fprintf(fid, "//#######################################################################\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# filter table for butterworth 2nd grade band pass (wide version) #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# (a0 is fixed to 1), a1, a2, b0, b1, b2 [1.stage] #\n"); fprintf(fid, "//# a1, a2, b0, b1, b2, gain [2.stage] #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# (c) 2021-2022 Joerg Wolfram #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//#######################################################################\n"); fprintf(fid,"TAB_TYPE long dsp12_filterkoeff_long_bp2w[840]\n = {\n") fd = 1.05946309436; sv = 0.707107; for i=0:83 sv = sv / fd; [b,a]=butter ( 2, [sv * 0.8,sv * 1.25],"pass","z"); [sos,g]=tf2sos(b,a); k0 = sqrt(g(1,1)); k1 = round(sos(1,5) * faktora); k2 = round(sos(1,6) * faktora); k3 = round(sos(1,1) * faktorb * k0); k4 = round(sos(1,2) * faktorb * k0); k5 = round(sos(1,3) * faktorb * k0); k6 = round(sos(2,5) * faktora); k7 = round(sos(2,6) * faktora); k8 = round(sos(2,1) * faktorb * k0); k9 = round(sos(2,2) * faktorb * k0); k10 = round(sos(2,3) * faktorb * k0); kf = round(24000 * sv); # printf("BP(%dHz) -> %i\n",kf,g(1,1)); if i < 83 fprintf(fid, '\t%iL, %iL, %iL, %iL, %iL,\t// (%i) frequ = %d Hz\n',k1,k2,k3,k4,k5,i,kf); fprintf(fid, '\t%iL, %iL, %iL, %iL, %iL,\n',k6,k7,k8,k9,k10); else fprintf(fid, '\t%iL, %iL, %iL, %iL, %iL,\t// (%i) frequ = %d Hz\n',k1,k2,k3,k4,k5,i,kf); fprintf(fid, '\t%iL, %iL, %iL, %iL, %iL};\n',k6,k7,k8,k9,k10); end end fprintf(fid,"\n") fprintf(fid, "//########################################################################\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# setup butterworth bandpass filter 2nd grade (wide version) #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# Parameter 1 ; position (0..7) #\n"); fprintf(fid, "//# Parameter 2 ; frequency index (0->16KHz..83->133Hz) #\n"); fprintf(fid, "//# Parameter 3 ; pregain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# Parameter 4 ; post-gain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//########################################################################\n"); fprintf(fid, "void dsp12_bandpass2w(int pos,int freq,int gain,int postgain)\n"); fprintf(fid, "{\n"); fprintf(fid, " long *param=&dsp12_par[pos][0];\n\n"); fprintf(fid, " dsp12_bypass(pos);\n\n"); fprintf(fid, " if(freq > 83) freq=83;\n"); fprintf(fid, " freq *=10;\n"); fprintf(fid, " dsp12_calc_pregain(pos,gain);\n"); fprintf(fid, " dsp12_calc_postgain(pos,postgain);\n"); fprintf(fid, " param[0] = dsp12_filterkoeff_long_bp2w[freq+5];\t//-a1 (2)\n"); fprintf(fid, " param[1] = dsp12_filterkoeff_long_bp2w[freq+6];\t//-a2 (2)\n"); fprintf(fid, " param[2] = dsp12_filterkoeff_long_bp2w[freq+7];\t//b0 (2)\n"); fprintf(fid, " param[3] = dsp12_filterkoeff_long_bp2w[freq+8];\t//b1 (2)\n"); fprintf(fid, " param[4] = dsp12_filterkoeff_long_bp2w[freq+9];\t//b2 (2)\n"); fprintf(fid, " param[5] = dsp12_filterkoeff_long_bp2w[freq+0];\t//-a1 (1)\n"); fprintf(fid, " param[6] = dsp12_filterkoeff_long_bp2w[freq+1];\t//-a2 (1)\n"); fprintf(fid, " param[7] = dsp12_filterkoeff_long_bp2w[freq+2];\t//b0 (1)\n"); fprintf(fid, " param[8] = dsp12_filterkoeff_long_bp2w[freq+3];\t//b1 (1)\n"); fprintf(fid, " param[9] = dsp12_filterkoeff_long_bp2w[freq+4];\t//b2 (1)\n"); fprintf(fid, " dsp12_clear_states(pos);\n"); fprintf(fid, " switch(pos)\n"); fprintf(fid, " {\n"); fprintf(fid, " case 0: dsp12_effect_1 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 1: dsp12_effect_2 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 2: dsp12_effect_3 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 3: dsp12_effect_4 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 4: dsp12_effect_5 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 5: dsp12_effect_6 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 6: dsp12_effect_7 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " default: dsp12_effect_8 = dsp12_effect_filter2+ASM_OFFSET;\n"); fprintf(fid, " }\n"); fprintf(fid, "}\n\n"); fprintf(fid,"\n") fprintf(fid, "//########################################################################\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# set butterworth bandpass filter 2nd grade (wide version) #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# Parameter 1 ; position (0..7) #\n"); fprintf(fid, "//# Parameter 2 ; frequency index (0->16KHz..83->133Hz) #\n"); fprintf(fid, "//# Parameter 3 ; pregain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# Parameter 4 ; post-gain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//########################################################################\n"); fprintf(fid, "void dsp12_bandpass2w_set(int pos,int freq,int gain,int postgain)\n"); fprintf(fid, "{\n"); fprintf(fid, " long *param=&dsp12_par[pos][0];\n\n"); fprintf(fid, " if(freq > 83) freq=83;\n"); fprintf(fid, " freq *=10;\n"); fprintf(fid, " ticks_wait(1);\n"); fprintf(fid, " dsp12_calc_pregain(pos,gain);\n"); fprintf(fid, " dsp12_calc_postgain(pos,postgain);\n"); fprintf(fid, " param[0] = dsp12_filterkoeff_long_bp2w[freq+5];\t//-a1 (2)\n"); fprintf(fid, " param[1] = dsp12_filterkoeff_long_bp2w[freq+6];\t//-a2 (2)\n"); fprintf(fid, " param[2] = dsp12_filterkoeff_long_bp2w[freq+7];\t//b0 (2)\n"); fprintf(fid, " param[3] = dsp12_filterkoeff_long_bp2w[freq+8];\t//b1 (2)\n"); fprintf(fid, " param[4] = dsp12_filterkoeff_long_bp2w[freq+9];\t//b2 (2)\n"); fprintf(fid, " param[5] = dsp12_filterkoeff_long_bp2w[freq+0];\t//-a1 (1)\n"); fprintf(fid, " param[6] = dsp12_filterkoeff_long_bp2w[freq+1];\t//-a2 (1)\n"); fprintf(fid, " param[7] = dsp12_filterkoeff_long_bp2w[freq+2];\t//b0 (1)\n"); fprintf(fid, " param[8] = dsp12_filterkoeff_long_bp2w[freq+3];\t//b1 (1)\n"); fprintf(fid, " param[9] = dsp12_filterkoeff_long_bp2w[freq+4];\t//b2 (1)\n"); fprintf(fid, "}\n\n"); fclose(fid); #----------------------------------------------------------------------------------------------------------------------- fid = fopen("../filter_long_bs2w.c", "wt"); fprintf(fid, "#include \n\n"); fprintf(fid, "extern long dsp12_par[8][32];\n"); fprintf(fid, "extern long(*dsp12_effect_1)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_2)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_3)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_4)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_5)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_6)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_7)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_8)(long,long*);\n"); fprintf(fid, "extern void dsp12_calc_pregain(int pos,int gain);\n"); fprintf(fid, "extern void dsp12_calc_postgain(int pos,int gain);\n"); fprintf(fid, "extern void dsp12_clear_states(int pos);\n"); fprintf(fid, "extern void ticks_wait(unsigned int);\n"); fprintf(fid, "extern void dsp12_bypass(int pos);\n\n"); fprintf(fid, "extern long dsp12_effect_filter2(long inval,long *param);\n\n"); fprintf(fid, "//#######################################################################\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# filter table for butterworth 2nd grade band stop (wide version) #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# (a0 is fixed to 1), a1, a2, b0, b1, b2 [1.stage] #\n"); fprintf(fid, "//# a1, a2, b0, b1, b2, gain [2.stage] #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# (c) 2021-2022 Joerg Wolfram #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//#######################################################################\n"); fprintf(fid,"TAB_TYPE long dsp12_filterkoeff_long_bs2w[924]\n = {\n") fd = 1.05946309436; sv = 0.707107; for i=0:83 sv = sv / fd; [b,a]=butter ( 2, [sv * 0.8,sv * 1.25], "stop", "z"); [sos,g]=tf2sos(b,a); k0 = sqrt(g(1,1)); k1 = round(sos(1,5) * faktora); k2 = round(sos(1,6) * faktora); k3 = round(sos(1,1) * faktorb * k0); k4 = round(sos(1,2) * faktorb * k0); k5 = round(sos(1,3) * faktorb * k0); k6 = round(sos(2,5) * faktora); k7 = round(sos(2,6) * faktora); k8 = round(sos(2,1) * faktorb * k0); k9 = round(sos(2,2) * faktorb * k0); k10 = round(sos(2,3) * faktorb * k0); kf = round(24000 * sv); # printf("BP(%dHz) -> %i\n",kf,g(1,1)); if i < 83 fprintf(fid, '\t%iL, %iL, %iL, %iL, %iL,\t// (%i) frequ = %d Hz\n',k1,k2,k3,k4,k5,i,kf); fprintf(fid, '\t%iL, %iL, %iL, %iL, %iL,\n',k6,k7,k8,k9,k10); else fprintf(fid, '\t%iL, %iL, %iL, %iL, %iL,\t// (%i) frequ = %d Hz\n',k1,k2,k3,k4,k5,i,kf); fprintf(fid, '\t%iL, %iL, %iL, %iL, %iL};\n',k6,k7,k8,k9,k10); end end fprintf(fid,"\n") fprintf(fid, "//########################################################################\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# setup butterworth bandstop filter 2nd grade (wide version) #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# Parameter 1 ; position (0..7) #\n"); fprintf(fid, "//# Parameter 2 ; frequency index (0->16KHz..83->133Hz) #\n"); fprintf(fid, "//# Parameter 3 ; pregain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# Parameter 4 ; post-gain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//########################################################################\n"); fprintf(fid, "void dsp12_bandstop2w(int pos,int freq,int gain,int postgain)\n"); fprintf(fid, "{\n"); fprintf(fid, " long *param=&dsp12_par[pos][0];\n\n"); fprintf(fid, " dsp12_bypass(pos);\n\n"); fprintf(fid, " if(freq > 83) freq=83;\n"); fprintf(fid, " freq *=10;\n"); fprintf(fid, " dsp12_calc_pregain(pos,gain);\n"); fprintf(fid, " dsp12_calc_postgain(pos,postgain);\n"); fprintf(fid, " param[0] = dsp12_filterkoeff_long_bs2w[freq+5];\t//-a1 (2)\n"); fprintf(fid, " param[1] = dsp12_filterkoeff_long_bs2w[freq+6];\t//-a2 (2)\n"); fprintf(fid, " param[2] = dsp12_filterkoeff_long_bs2w[freq+7];\t//b0 (2)\n"); fprintf(fid, " param[3] = dsp12_filterkoeff_long_bs2w[freq+8];\t//b1 (2)\n"); fprintf(fid, " param[4] = dsp12_filterkoeff_long_bs2w[freq+9];\t//b2 (2)\n"); fprintf(fid, " param[5] = dsp12_filterkoeff_long_bs2w[freq+0];\t//-a1 (1)\n"); fprintf(fid, " param[6] = dsp12_filterkoeff_long_bs2w[freq+1];\t//-a2 (1)\n"); fprintf(fid, " param[7] = dsp12_filterkoeff_long_bs2w[freq+2];\t//b0 (1)\n"); fprintf(fid, " param[8] = dsp12_filterkoeff_long_bs2w[freq+3];\t//b1 (1)\n"); fprintf(fid, " param[9] = dsp12_filterkoeff_long_bs2w[freq+4];\t//b2 (1)\n"); fprintf(fid, " dsp12_clear_states(pos);\n"); fprintf(fid, " switch(pos)\n"); fprintf(fid, " {\n"); fprintf(fid, " case 0: dsp12_effect_1 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 1: dsp12_effect_2 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 2: dsp12_effect_3 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 3: dsp12_effect_4 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 4: dsp12_effect_5 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 5: dsp12_effect_6 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 6: dsp12_effect_7 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " default: dsp12_effect_8 = dsp12_effect_filter2+ASM_OFFSET;\n"); fprintf(fid, " }\n"); fprintf(fid, "}\n\n"); fprintf(fid,"\n") fprintf(fid, "//########################################################################\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# set butterworth bandstop filter 2nd grade (wide version) #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# Parameter 1 ; position (0..7) #\n"); fprintf(fid, "//# Parameter 2 ; frequency index (0->16KHz..83->133Hz) #\n"); fprintf(fid, "//# Parameter 3 ; pregain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# Parameter 4 ; post-gain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//########################################################################\n"); fprintf(fid, "void dsp12_bandstop2w_set(int pos,int freq,int gain,int postgain)\n"); fprintf(fid, "{\n"); fprintf(fid, " long *param=&dsp12_par[pos][0];\n\n"); fprintf(fid, " if(freq > 83) freq=83;\n"); fprintf(fid, " freq *=10;\n"); fprintf(fid, " ticks_wait(1);\n"); fprintf(fid, " dsp12_calc_pregain(pos,gain);\n"); fprintf(fid, " dsp12_calc_postgain(pos,postgain);\n"); fprintf(fid, " param[0] = dsp12_filterkoeff_long_bs2w[freq+5];\t//-a1 (2)\n"); fprintf(fid, " param[1] = dsp12_filterkoeff_long_bs2w[freq+6];\t//-a2 (2)\n"); fprintf(fid, " param[2] = dsp12_filterkoeff_long_bs2w[freq+7];\t//b0 (2)\n"); fprintf(fid, " param[3] = dsp12_filterkoeff_long_bs2w[freq+8];\t//b1 (2)\n"); fprintf(fid, " param[4] = dsp12_filterkoeff_long_bs2w[freq+9];\t//b2 (2)\n"); fprintf(fid, " param[5] = dsp12_filterkoeff_long_bs2w[freq+0];\t//-a1 (1)\n"); fprintf(fid, " param[6] = dsp12_filterkoeff_long_bs2w[freq+1];\t//-a2 (1)\n"); fprintf(fid, " param[7] = dsp12_filterkoeff_long_bs2w[freq+2];\t//b0 (1)\n"); fprintf(fid, " param[8] = dsp12_filterkoeff_long_bs2w[freq+3];\t//b1 (1)\n"); fprintf(fid, " param[9] = dsp12_filterkoeff_long_bs2w[freq+4];\t//b2 (1)\n"); fprintf(fid, "}\n\n"); fclose(fid); #----------------------------------------------------------------------------------------------------------------------- fid = fopen("../filter_long_lp3.c", "wt"); fprintf(fid, "#include \n\n"); fprintf(fid, "extern long dsp12_par[8][32];\n"); fprintf(fid, "extern long(*dsp12_effect_1)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_2)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_3)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_4)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_5)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_6)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_7)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_8)(long,long*);\n"); fprintf(fid, "extern void dsp12_calc_pregain(int pos,int gain);\n"); fprintf(fid, "extern void dsp12_calc_postgain(int pos,int gain);\n"); fprintf(fid, "extern void dsp12_clear_states(int pos);\n"); fprintf(fid, "extern void ticks_wait(unsigned int);\n"); fprintf(fid, "extern void dsp12_bypass(int pos);\n\n"); fprintf(fid, "extern long dsp12_effect_filter2(long inval,long *param);\n\n"); fprintf(fid, "//#######################################################################\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# filter table for butterworth 3rd grade lowpass #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# (a0 is fixed to 1), a1, a2, b0, b1, b2 [1.stage] #\n"); fprintf(fid, "//# a1, a2, b0, b1, b2, gain [2.stage] #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# (c) 2021-2022 Joerg Wolfram #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//#######################################################################\n"); fprintf(fid,"TAB_TYPE long dsp12_filterkoeff_long_lp3[840]\n = {\n") fd = 1.05946309436; sv = 0.707107; for i=0:83 sv = sv / fd; [b,a]=butter ( 3, sv,"z"); [sos,g]=tf2sos(b,a); k0 = sqrt(g(1,1)); k1 = round(sos(1,5) * faktora); k2 = round(sos(1,6) * faktora); k3 = round(sos(1,1) * faktorb * k0); k4 = round(sos(1,2) * faktorb * k0); k5 = round(sos(1,3) * faktorb * k0); k6 = round(sos(2,5) * faktora); k7 = round(sos(2,6) * faktora); k8 = round(sos(2,1) * faktorb * k0); k9 = round(sos(2,2) * faktorb * k0); k10 = round(sos(2,3) * faktorb * k0); kf = round(24000 * sv); # printf("BP(%dHz) -> %i\n",kf,g(1,1)); if i < 83 fprintf(fid, '\t%iL, %iL, %iL, %iL, %iL,\t// (%i) frequ = %d Hz\n',k1,k2,k3,k4,k5,i,kf); fprintf(fid, '\t%iL, %iL, %iL, %iL, %iL,\n',k6,k7,k8,k9,k10); else fprintf(fid, '\t%iL, %iL, %iL, %iL, %iL,\t// (%i) frequ = %d Hz\n',k1,k2,k3,k4,k5,i,kf); fprintf(fid, '\t%iL, %iL, %iL, %iL, %iL};\n',k6,k7,k8,k9,k10); end end fprintf(fid,"\n") fprintf(fid, "//########################################################################\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# setup butterworth lowpass filter 3rd grade #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# Parameter 1 ; position (0..7) #\n"); fprintf(fid, "//# Parameter 2 ; frequency index (0->16KHz..83->133Hz) #\n"); fprintf(fid, "//# Parameter 3 ; pregain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# Parameter 4 ; post-gain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//########################################################################\n"); fprintf(fid, "void dsp12_lowpass3(int pos,int freq,int gain,int postgain)\n"); fprintf(fid, "{\n"); fprintf(fid, " long *param=&dsp12_par[pos][0];\n\n"); fprintf(fid, " dsp12_bypass(pos);\n\n"); fprintf(fid, " if(freq > 83) freq=83;\n"); fprintf(fid, " freq *=10;\n"); fprintf(fid, " dsp12_calc_pregain(pos,gain);\n"); fprintf(fid, " dsp12_calc_postgain(pos,postgain);\n"); fprintf(fid, " param[0] = dsp12_filterkoeff_long_lp3[freq+5];\t//-a1 (2)\n"); fprintf(fid, " param[1] = dsp12_filterkoeff_long_lp3[freq+6];\t//-a2 (2)\n"); fprintf(fid, " param[2] = dsp12_filterkoeff_long_lp3[freq+7];\t//b0 (2)\n"); fprintf(fid, " param[3] = dsp12_filterkoeff_long_lp3[freq+8];\t//b1 (2)\n"); fprintf(fid, " param[4] = dsp12_filterkoeff_long_lp3[freq+9];\t//b2 (2)\n"); fprintf(fid, " param[5] = dsp12_filterkoeff_long_lp3[freq+0];\t//-a1 (1)\n"); fprintf(fid, " param[6] = dsp12_filterkoeff_long_lp3[freq+1];\t//-a2 (1)\n"); fprintf(fid, " param[7] = dsp12_filterkoeff_long_lp3[freq+2];\t//b0 (1)\n"); fprintf(fid, " param[8] = dsp12_filterkoeff_long_lp3[freq+3];\t//b1 (1)\n"); fprintf(fid, " param[9] = dsp12_filterkoeff_long_lp3[freq+4];\t//b2 (1)\n"); fprintf(fid, " dsp12_clear_states(pos);\n"); fprintf(fid, " switch(pos)\n"); fprintf(fid, " {\n"); fprintf(fid, " case 0: dsp12_effect_1 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 1: dsp12_effect_2 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 2: dsp12_effect_3 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 3: dsp12_effect_4 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 4: dsp12_effect_5 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 5: dsp12_effect_6 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 6: dsp12_effect_7 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " default: dsp12_effect_8 = dsp12_effect_filter2+ASM_OFFSET;\n"); fprintf(fid, " }\n"); fprintf(fid, "}\n\n"); fprintf(fid,"\n") fprintf(fid, "//########################################################################\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# set butterworth lowpass filter 3rd grade #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# Parameter 1 ; position (0..7) #\n"); fprintf(fid, "//# Parameter 2 ; frequency index (0->16KHz..83->133Hz) #\n"); fprintf(fid, "//# Parameter 3 ; pregain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# Parameter 4 ; post-gain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//########################################################################\n"); fprintf(fid, "void dsp12_lowpass3_set(int pos,int freq,int gain,int postgain)\n"); fprintf(fid, "{\n"); fprintf(fid, " long *param=&dsp12_par[pos][0];\n\n"); fprintf(fid, " if(freq > 83) freq=83;\n"); fprintf(fid, " freq *=10;\n"); fprintf(fid, " ticks_wait(1);\n"); fprintf(fid, " dsp12_calc_pregain(pos,gain);\n"); fprintf(fid, " dsp12_calc_postgain(pos,postgain);\n"); fprintf(fid, " param[0] = dsp12_filterkoeff_long_lp3[freq+5];\t//-a1 (2)\n"); fprintf(fid, " param[1] = dsp12_filterkoeff_long_lp3[freq+6];\t//-a2 (2)\n"); fprintf(fid, " param[2] = dsp12_filterkoeff_long_lp3[freq+7];\t//b0 (2)\n"); fprintf(fid, " param[3] = dsp12_filterkoeff_long_lp3[freq+8];\t//b1 (2)\n"); fprintf(fid, " param[4] = dsp12_filterkoeff_long_lp3[freq+9];\t//b2 (2)\n"); fprintf(fid, " param[5] = dsp12_filterkoeff_long_lp3[freq+0];\t//-a1 (1)\n"); fprintf(fid, " param[6] = dsp12_filterkoeff_long_lp3[freq+1];\t//-a2 (1)\n"); fprintf(fid, " param[7] = dsp12_filterkoeff_long_lp3[freq+2];\t//b0 (1)\n"); fprintf(fid, " param[8] = dsp12_filterkoeff_long_lp3[freq+3];\t//b1 (1)\n"); fprintf(fid, " param[9] = dsp12_filterkoeff_long_lp3[freq+4];\t//b2 (1)\n"); fprintf(fid, "}\n\n"); fclose(fid); #----------------------------------------------------------------------------------------------------------------------- fid = fopen("../filter_long_hp3.c", "wt"); fprintf(fid, "#include \n\n"); fprintf(fid, "extern long dsp12_par[8][32];\n"); fprintf(fid, "extern long(*dsp12_effect_1)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_2)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_3)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_4)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_5)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_6)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_7)(long,long*);\n"); fprintf(fid, "extern long(*dsp12_effect_8)(long,long*);\n"); fprintf(fid, "extern void dsp12_calc_pregain(int pos,int gain);\n"); fprintf(fid, "extern void dsp12_calc_postgain(int pos,int gain);\n"); fprintf(fid, "extern void dsp12_clear_states(int pos);\n"); fprintf(fid, "extern void ticks_wait(unsigned int);\n"); fprintf(fid, "extern void dsp12_bypass(int pos);\n\n"); fprintf(fid, "extern long dsp12_effect_filter2(long inval,long *param);\n\n"); fprintf(fid, "//#######################################################################\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# filter tables for butterworth 3rd grade high pass #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# (a0 is fixed to 1), a1, a2, b0, b1, b2 [1.stage] #\n"); fprintf(fid, "//# a1, a2, b0, b1, b2, gain [2.stage] #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# (c) 2021-2022 Joerg Wolfram #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//#######################################################################\n"); fprintf(fid,"TAB_TYPE long dsp12_filterkoeff_long_hp3[840]\n = {\n") fd = 1.05946309436; sv = 0.707107; for i=0:83 sv = sv / fd; [b,a]=butter ( 3, sv, "high", "z"); [sos,g]=tf2sos(b,a); k0 = sqrt(g(1,1)); k1 = round(sos(1,5) * faktora); k2 = round(sos(1,6) * faktora); k3 = round(sos(1,1) * faktorb * k0); k4 = round(sos(1,2) * faktorb * k0); k5 = round(sos(1,3) * faktorb * k0); k6 = round(sos(2,5) * faktora); k7 = round(sos(2,6) * faktora); k8 = round(sos(2,1) * faktorb * k0); k9 = round(sos(2,2) * faktorb * k0); k10 = round(sos(2,3) * faktorb * k0); kf = round(24000 * sv); # printf("BP(%dHz) -> %i\n",kf,g(1,1)); if i < 83 fprintf(fid, '\t%iL, %iL, %iL, %iL, %iL,\t// (%i) frequ = %d Hz\n',k1,k2,k3,k4,k5,i,kf); fprintf(fid, '\t%iL, %iL, %iL, %iL, %iL,\n',k6,k7,k8,k9,k10); else fprintf(fid, '\t%iL, %iL, %iL, %iL, %iL,\t// (%i) frequ = %d Hz\n',k1,k2,k3,k4,k5,i,kf); fprintf(fid, '\t%iL, %iL, %iL, %iL, %iL};\n',k6,k7,k8,k9,k10); end end fprintf(fid,"\n") fprintf(fid, "//########################################################################\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# setup butterworth highpass filter 3rd grade #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# Parameter 1 ; position (0..7) #\n"); fprintf(fid, "//# Parameter 2 ; frequency index (0->16KHz..83->133Hz) #\n"); fprintf(fid, "//# Parameter 3 ; pregain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# Parameter 4 ; post-gain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//########################################################################\n"); fprintf(fid, "void dsp12_highpass3(int pos,int freq,int gain,int postgain)\n"); fprintf(fid, "{\n"); fprintf(fid, " long *param=&dsp12_par[pos][0];\n\n"); fprintf(fid, " dsp12_bypass(pos);\n\n"); fprintf(fid, " if(freq > 83) freq=83;\n"); fprintf(fid, " freq *=10;\n"); fprintf(fid, " dsp12_calc_pregain(pos,gain);\n"); fprintf(fid, " dsp12_calc_postgain(pos,postgain);\n"); fprintf(fid, " param[0] = dsp12_filterkoeff_long_hp3[freq+5];\t//-a1 (2)\n"); fprintf(fid, " param[1] = dsp12_filterkoeff_long_hp3[freq+6];\t//-a2 (2)\n"); fprintf(fid, " param[2] = dsp12_filterkoeff_long_hp3[freq+7];\t//b0 (2)\n"); fprintf(fid, " param[3] = dsp12_filterkoeff_long_hp3[freq+8];\t//b1 (2)\n"); fprintf(fid, " param[4] = dsp12_filterkoeff_long_hp3[freq+9];\t//b2 (2)\n"); fprintf(fid, " param[5] = dsp12_filterkoeff_long_hp3[freq+0];\t//-a1 (1)\n"); fprintf(fid, " param[6] = dsp12_filterkoeff_long_hp3[freq+1];\t//-a2 (1)\n"); fprintf(fid, " param[7] = dsp12_filterkoeff_long_hp3[freq+2];\t//b0 (1)\n"); fprintf(fid, " param[8] = dsp12_filterkoeff_long_hp3[freq+3];\t//b1 (1)\n"); fprintf(fid, " param[9] = dsp12_filterkoeff_long_hp3[freq+4];\t//b2 (1)\n"); fprintf(fid, " dsp12_clear_states(pos);\n"); fprintf(fid, " switch(pos)\n"); fprintf(fid, " {\n"); fprintf(fid, " case 0: dsp12_effect_1 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 1: dsp12_effect_2 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 2: dsp12_effect_3 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 3: dsp12_effect_4 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 4: dsp12_effect_5 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 5: dsp12_effect_6 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " case 6: dsp12_effect_7 = dsp12_effect_filter2+ASM_OFFSET;break;\n"); fprintf(fid, " default: dsp12_effect_8 = dsp12_effect_filter2+ASM_OFFSET;\n"); fprintf(fid, " }\n"); fprintf(fid, "}\n\n"); fprintf(fid,"\n") fprintf(fid, "//########################################################################\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# set butterworth highpass filter 3rd grade #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//# Parameter 1 ; position (0..7) #\n"); fprintf(fid, "//# Parameter 2 ; frequency index (0->16KHz..83->133Hz) #\n"); fprintf(fid, "//# Parameter 3 ; pregain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# Parameter 4 ; post-gain in 1/4 dB (-360..360) #\n"); fprintf(fid, "//# #\n"); fprintf(fid, "//########################################################################\n"); fprintf(fid, "void dsp12_highpass3_set(int pos,int freq,int gain,int postgain)\n"); fprintf(fid, "{\n"); fprintf(fid, " long *param=&dsp12_par[pos][0];\n\n"); fprintf(fid, " if(freq > 83) freq=83;\n"); fprintf(fid, " freq *=10;\n"); fprintf(fid, " ticks_wait(1);\n"); fprintf(fid, " dsp12_calc_pregain(pos,gain);\n"); fprintf(fid, " dsp12_calc_postgain(pos,postgain);\n"); fprintf(fid, " param[0] = dsp12_filterkoeff_long_hp3[freq+5];\t//-a1 (2)\n"); fprintf(fid, " param[1] = dsp12_filterkoeff_long_hp3[freq+6];\t//-a2 (2)\n"); fprintf(fid, " param[2] = dsp12_filterkoeff_long_hp3[freq+7];\t//b0 (2)\n"); fprintf(fid, " param[3] = dsp12_filterkoeff_long_hp3[freq+8];\t//b1 (2)\n"); fprintf(fid, " param[4] = dsp12_filterkoeff_long_hp3[freq+9];\t//b2 (2)\n"); fprintf(fid, " param[5] = dsp12_filterkoeff_long_hp3[freq+0];\t//-a1 (1)\n"); fprintf(fid, " param[6] = dsp12_filterkoeff_long_hp3[freq+1];\t//-a2 (1)\n"); fprintf(fid, " param[7] = dsp12_filterkoeff_long_hp3[freq+2];\t//b0 (1)\n"); fprintf(fid, " param[8] = dsp12_filterkoeff_long_hp3[freq+3];\t//b1 (1)\n"); fprintf(fid, " param[9] = dsp12_filterkoeff_long_hp3[freq+4];\t//b2 (1)\n"); fprintf(fid, "}\n\n"); fclose(fid);