FBFXLMS Algorithm - Periodic Noise Cancellation
#define taps 8
#define Hz 0.763
#define mu 8e-3
#define Pz 0.817
#define Fz 0.137 // feedback factor
void main()
{
float c[taps], d[taps], y[taps], xn[10], x1[taps],
x[taps], w[taps];
float x_n, un, fn, yn=0, rn, sn, en, e_n,
j, val;
int reg[14] = { 0,1, 0,0,0,0, 0,1,0,0, 0,1,0,1
};
int i, k, l=0, shift, value=0;
clrscr();
for( i=0; i for( i=0; i<200; i++ )
for( k=13; k>0;
k-- )
for( k=13; k>=0;
k-- )
value = 0;
en = Hz * yn;
for( k=taps-1;
k>0; k-- )
y[0] = yn;
rn = 0;
for( k=0; k sn=0;
fn = x_n - sn;
for( k=0; k for( i=0; i for( i=0,j=0; j<=5e-3; j+=5e-4,i++ )
for( i=0; i<30000; i++ )
sn=0;
x[0] = un - sn;
// Actual noise recovered
for( k=taps-1;
k>0; k-- )
yn = 0;
for( k=taps-1;
k>0; k-- )
e_n = en + rn;
for( k=0; k printf( "%.2f\n",
e_n );
l++;
{
shift = (reg[0]
^ reg[2]) ^ (reg[9] ^ reg[11]);
reg[k] = reg[k-1];
reg[0] = shift;
value += reg[k] * pow( 2, k );
value = value
- 8192;
yn = 5.0/8192
* value;
x_n = Fz * yn;
y[k] = y[k-1];
for( k=0; k
e_n = en - rn;
for( k=0; k
}
{
val = 5 * sin(
2*3.142*200*j );
xn[i] = val;
}
{
for( k=taps-1;
k>0; k-- )
x[k] = x[k-1];
un = xn[l] +
(yn*Fz); // u(n)
= Actual i/p noise + Feedback
for( k=0; k
en = Hz*Pz*x[0];
x1[k] = x1[k-1];
x1[0] = 0;
for( k=0; k
for( k=0; k
rn = yn*Hz;
y[k] = y[k-1];
y[0] = yn;
l = l>9 ? 0
: l;
}
}