fonctionnement d'un programme en c++
Bonjour, j'ai trouvé un programme enn c++, mais je ne comprend pas tout le fonctionnement.
voivi le code.h
Code:
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
Code:
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 |
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.
Merci.
Ps: je ne peux pas exécuter du code c++.