Bonjour, j'ai trouvé un programme enn c++, mais je ne comprend pas tout le fonctionnement.
voivi le code.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 #ifndef CIC #define CIC namespace SPUC { /*! \addtogroup fir FIR filters */ /*! \brief class for CIC digital filter \ingroup fir interpolation */ //! //! Implementation for cascaded integrator comb filters //! This implementation provides for both decimation and //! interpolation filtering. Registers are signed long and //! the default number of stages is 3. //! \image html cic.gif //! \image latex cic.eps class cic { protected: signed long* nacc; //! Accumulators signed long* diff; //! Differentiators signed long* prev; //! Previous values char stages; //! Number of stages public: //! Constructor cic(char n=3); //! Reset void reset() { for (int i=0;i<stages;i++) nacc[i] = diff[i] = prev[i] = 0; } //! For CIC interpolation, non-zero dump implies new input signed long interpolate(signed long in=0, signed char dump=0); //! For CIC decimation, non-zero dump implies output required signed long decimate(signed long in, signed char dump); //! To change the number of stages dynamically void num_stages(char n); }; } // namespace SPUC #endif
le code .c
En fait, je dois faire un filtre cic en c. J'aimerais savoir ce que fait exactement ce programme afin de le retrnscrire en c.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 #include <cic.h> namespace SPUC { cic::cic(char n) : stages(n) { int i; nacc = new signed long[n]; diff = new signed long[n]; prev = new signed long[n]; for (i=0;i<stages;i++) nacc[i] = diff[i] = prev[i] = 0; } void cic::num_stages(char n) { int i; stages = n; delete nacc; delete diff; delete prev; nacc = new signed long[n]; diff = new signed long[n]; prev = new signed long[n]; for (i=0;i<stages;i++) nacc[i] = diff[i] = prev[i] = 0; } signed long cic::interpolate(signed long in, signed char dump) { char i; if (dump) { diff[0] = in - prev[0]; prev[0] = in; for (i=1;i<stages;i++) { diff[i] = diff[i-1] - prev[i]; prev[i] = diff[i-1]; } nacc[0] += diff[stages-1]; } for (i=0;i<(stages-1);i++) nacc[i+1] += nacc[i]; return(nacc[stages-1]); } signed long cic::decimate(signed long in, signed char dump) { char i; nacc[0] += in; for (i=0;i<(stages-1);i++) nacc[i+1] += nacc[i]; if (dump) { diff[0] = nacc[stages-1] - prev[0]; prev[0] = nacc[stages-1]; for (i=1;i<stages;i++) { diff[i] = diff[i-1] - prev[i]; prev[i] = diff[i-1]; } } return(diff[stages-1]); } } // namespace SPUC
Merci.
Ps: je ne peux pas exécuter du code c++.
Partager