// berechnet die BiQuad-Parameter fŸr 8polige Filter mit Eckfrequenz 500Hz..10kHz // und legt die Daten als C-Konstante in einem File ab. Da das Filter-Gain // frequenzabhŠngig ist, wird es ebenfalls als Konstante in die Tabelle geschrieben. // Format eines Eintrags (21 Float-Elemente): // Gain // 1. Stufe: b0, b1, b2, a1, a2 // 2. Stufe: b0, b1, b2, a1, a2 // 3. Stufe: b0, b1, b2, a1, a2 // 4. Stufe: b0, b1, b2, a1, a2 // Filterfunktion: y(n) = b0 * x(n) + b1 * x(n-1) + b2 * x(n-2) // - a1 * y(n-1) - a2 * y(n-2) function [] = iirparameter(att) fd_w = mopen('c:/st/coeff.c', 'wt'); fs = 50e3; // Samplingfrequenz mfprintf(fd_w,'// fs: %f Hz, SperrdŠmpfung: %f dB\n', fs, att); mfprintf(fd_w,'const float IIR_LP_PARAM[] = {\n'); for f = 5:100, // Filterfrequenzen 500Hz..10kHz fc = f*100/fs; // Eckfrequenz relativ zur Samplingfrequenz sys=iir(8,'lp','ellip',fc,[10^(1/20)-1,10^(-att/20)]); [n,d,g]=factors(sys); mfprintf(fd_w,'%e,\n',g); // Gain // Achtung! Koeffizientenreihenfolge gegenŸber Matlab verkehrt! for ii=1:4, x=coeff(n(ii)); // ZŠhler mfprintf(fd_w,'%e, %e, %e, ', x(3), x(2), x(1)); // ZŠhlerkoeffizienten x=coeff(d(ii)); // Nenner, quadratischer Term ist immer 1 und wird weggelassen mfprintf(fd_w,'%e, %e,\n', x(2), x(1)); // ZŠhlerkoeffizienten end end mfprintf(fd_w,'0.0};\n'); // Abschluss, Zahl wird nicht gebraucht mclose(fd_w); endfunction