Код: Выделить всё
double yn = 0.6*xn-0.6*xn_1+1.32*yn_1-1.35*yn_2;Хотя может тут есть специалисты в цифровой обработке сигналов и хотел узнать каким образом рассичтываются коэффициенты? Был в гугле там трехэтажные формулы и подчти нет объянений не может же быть все так сложно. И большинство информации по КИХ фильру про БИХ очень мало.
Проблема еще в типах данныйх ММХ работает с целыми числами а тут вещественные как тут быть? Попробовал решить на осонве тог очто есть граффик вообще странный получился.
Код: Выделить всё
__int64 a1 = 132, a2 = 135, b1 = 60,b2 = 60;
unsigned __int64 iMask, mem1,mem2,mem3;
__int32 mem32_1=0;
__int16 iTmp=0, yn_2=0,yn_1=ys,xn;
mem1 = mem2 = 0;
iMask = 0;
yn_2 = (__int16)yn_1;
yn_1 = (__int16)iTmp;
mem1 = (b1 << 48) | (a1 << 32) | (b2 << 16) | a2;
xn_1 = xn;
xn=xs*100; // âõîä Õ
iMask = xn;
iMask <<= 48;
mem2 = iMask;
iMask = 0;
iMask = yn_1;
iMask <<= 32;
mem2 |= (0x0000ffff00000000)&iMask;
iMask = 0;
iMask = xn_1;
iMask <<= 16;
mem2 |= (0x00000000ffff0000)&iMask;
iMask = yn_2;
mem2 |= (0x000000000000ffff)&iMask;
asm{
movq mm0, mem2
movq mm1, mem1
movq mm2, mem1
pmullw mm1, mm0 // ìëàäøèå ñëîâà â mm1
pmulhw mm2, mm0 // ñòàðøèå ñëîâà â mm2
movq mm0, mm1
punpcklwd mm0, mm2 // b2*xn_1 | a2*yn_2 //
movq mm3, mm1
punpckhwd mm3, mm2 // b1*xn | a1*yn_1 //
psubd mm3, mm0
movq mm1, mm3
psrlq mm1, 32
paddd mm1, mm3
movd mem32_1, mm1
emms
}
mem32_1 /= 100;
iTmp = (signed __int16) mem32_1; // Âûõîä ôèëüòðà