Kodar-Holger, jag vet inte vad som är fel här, men jag försöker göra ett Butterworthfilter, 2:a graden, 400 Hz sampel, och 5 Hz gränsfrekvens.
Jag får denna kod på din (?) sida:
Kod: Markera allt
/* Digital filter designed by mkfilter/mkshape/gencode A.J. Fisher
Command line: /www/usr/fisher/helpers/mkfilter -Bu -Lp -o 2 -a 1.2500000000e-02 0.0000000000e+00 -l */
#define NZEROS 2
#define NPOLES 2
#define GAIN 6.847831502e+02
static float xv[NZEROS+1], yv[NPOLES+1];
static void filterloop()
{ for (;;)
{ xv[0] = xv[1]; xv[1] = xv[2];
xv[2] = next_input_value / GAIN;
yv[0] = yv[1]; yv[1] = yv[2];
yv[2] = (xv[0] + xv[2]) + 2 * xv[1]
+ ( -0.8948743446 * yv[0]) + ( 1.8890330794 * yv[1]);
next_output_value = yv[2];
}
}
Men jag får en DC dämpning på ca 4,1 dB... jag måste multiplicera utdata med 1,59888 för att få DC gain = 1,000
Kan det vara nåt fel i siffrorna eller har jag tolkat fel hur jag ska göra? (orange linje nedan visar BW-filtret. når aldrig 0 dB.
bwfilter5.gif
Nu är ju just GAIN väldigt enkelt att justera - bara att multiplicera utdata med en konstant. men frågan är ju varför det blir fel från början? Frågan uppstår ju om de andra parametrarna stämmer. En annan fundering jag har om detta filter , eftersom jag har noll koll på hur det fungerar egentligen, är om det är så noga egentligen med vilka parametrar man sätter. Om man nöjer sig med en UNGEFÄRLIG gränsfrekvens och en UNGEFÄRLIG dämpning per dekad, går det att höfta till ett par värden eller riskerar man nån slags "obalans" nånstans så att filtret fuckar ur...
Jag antar att det inte finns något enkelt sätt att beräkna fasförskjutningen vid en viss frekvens (f = 0,00833 Hz t.ex)? En så låg frekvens går ju inte att se på grafen.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.