Ich experimentiere seit einiger Zeit mit digitalen Filtern, obwohl ich 
kein Experte bin. Momentan versuche ich Fensterfunktionen auf ein 
Goertzel Filter anzuwenden, also auf die Eingangsdaten. Im Prinzip 
scheint das auch zu funktionieren.
Aber für einige Fensterfunktionen finde ich keinen Skalierungsfaktor 
(bzw. Verstärkungsfaktor). In einem Buch habe ich gefunden, das die 
Skalierung vom ersten konstanten Faktor der Fenster Funktion abhängig 
ist. Aber diesen scheint es für Sinc und Cosinus Fenster nicht zu geben. 
Durch Experimente habe ich herausgefunden, das für Cosinus Fenster PI/2 
zu funktionieren scheint. Aber für Sinc-Fenster finde ich nichts.
Kann mir da vielleicht jemand einen produktiven Denkanstoß geben?
Also der Programmcode für die entsprechenden Fensterfunktionen ist etwa:
| 1 |     switch( type ) {
 | 
| 2 |         ...
 | 
| 3 |         case wt_HANNING:  // Von Hann window - zum Vergleich
 | 
| 4 |             scale = 1.0 / 0.5;
 | 
| 5 |             for( n = 0; n < num; n++ ) {
 | 
| 6 |                 weight =  0.5
 | 
| 7 |                        - (0.5  * cos( 2 * M_PI * i * factor ))
 | 
| 8 |                        ;
 | 
| 9 |                 v[i] *= weight;
 | 
| 10 |                 i--;
 | 
| 11 |             }
 | 
| 12 |             break;
 | 
| 13 | 
 | 
| 14 |         case wt_LANCZOS:
 | 
| 15 |             //scale = M_PI / 2.0; // Ergebnis noch ca 1dB zu niedrig
 | 
| 16 |             //                       bei scale = 1.0 ca. 6 dB zu niedrig
 | 
| 17 |             for( n = 0; n < num; n++ ) {
 | 
| 18 |                 weight =  Sinc( ((2 * i * factor) - 1) * M_PI );
 | 
| 19 |                 v[i] *= weight;
 | 
| 20 |                 i--;
 | 
| 21 |             }
 | 
| 22 |             break;
 | 
| 23 | 
 | 
| 24 |         case wt_COSINUS: // ok
 | 
| 25 |             scale = M_PI / 2.0;
 | 
| 26 |             for( n = 0; n < num; n++ ) {
 | 
| 27 |                 weight = sin( M_PI * i * factor );
 | 
| 28 |                 v[i] *= weight;
 | 
| 29 |                 i--;
 | 
| 30 |             }
 | 
| 31 |             break;
 | 
| 32 |        ...
 | 
Anmerkung:
 i ist der datenindex
 factor ist
| 1 |     double  factor = 1.0 / (num - 1); // num=num of samples
 | 
Um das zu demonstrieren füge ich mal 2 Bilder meines Auswerteprogramms 
an, das erste ohne Fensterfunktion und das zweite mit Lanczos 
Fensterfunktion. Die kleinen Einsprünge in den Kurven bitte ich zu 
ignorieren. Die habe mit der nicht optimalen Auswertung zu tun 
(Phasenlage des Oszillators).