8 void filter_init(DOLProcess *p)
11 p->local->process_index = GETINDEX(0);
13 srand(0); //initialize random number generator
14 for (k = 0; k < p->local->process_index; k++)
17 sprintf(p->local->id, "filter_%d",
19 p->local->first_invocation = 1;
20 //generate a random filter coefficient between -1 and 1
21 p->local->filter_coefficient = ((float) (rand() % 21) - 10)/10.0;
23 printf("init %s: filter coefficient = %+2.1f\n",
24 p->local->id, p->local->filter_coefficient);
30 int filter_fire(DOLProcess *p)
32 //behaviour of the top filter stage
33 if (p->local->process_index == 0) {
34 if (p->local->first_invocation) {
35 DOL_read((void*)PORT_INA, &(p->local->inA), sizeof(float), p);
36 p->local->out = p->local->inA;
38 p->local->first_invocation = 0;
41 DOL_read((void*)PORT_INA, &(p->local->inA), sizeof(float), p);
42 DOL_read((void*)PORT_INB, &(p->local->inB), sizeof(float), p);
43 p->local->out = p->local->inB + p->local->inA;
46 DOL_write((void*)PORT_OUTA, &(p->local->out), sizeof(float), p);
47 DOL_write((void*)PORT_OUTB, &(p->local->out), sizeof(float), p);
49 printf("%8s: inA: %6.4f, inB: %6.4f, outA = outB: %6.4f\n",
50 p->local->id, p->local->inA, p->local->inB, p->local->out);
52 //behaviour of the intermediate filter stages
54 if (p->local->first_invocation) {
55 DOL_read((void*)PORT_INA, &(p->local->inA), sizeof(float), p);
56 p->local->out = p->local->filter_coefficient * p->local->inA;
58 p->local->first_invocation = 0;
61 DOL_read((void*)PORT_INA, &(p->local->inA), sizeof(float), p);
62 DOL_read((void*)PORT_INB, &(p->local->inB), sizeof(float), p);
63 p->local->out = p->local->inB + p->local->filter_coefficient
67 if (p->local->process_index < N - 1) {
68 DOL_write((void*)PORT_OUTA, &(p->local->inA), sizeof(float), p);
69 DOL_write((void*)PORT_OUTB, &(p->local->out), sizeof(float), p);
71 //behaviour of the bottom filter stage
73 DOL_write((void*)PORT_OUTA, &(p->local->zero), sizeof(float), p);
74 DOL_write((void*)PORT_OUTB, &(p->local->out), sizeof(float), p);
77 printf("%8s: inA: %6.4f, inB: %6.4f, outA: %6.4f, outB: %6.4f\n",
78 p->local->id, p->local->inA, p->local->inB, p->local->inA,