| 1 | #include <math.h>
 | 
|---|
| 2 | #include "tstnoisecancel.h"
 | 
|---|
| 3 | #include "noisegen.h"
 | 
|---|
| 4 | #include "wienerdecor.h"
 | 
|---|
| 5 | #include "asciitoiwtr.h"
 | 
|---|
| 6 | #include "toimanager.h"
 | 
|---|
| 7 | #include "toisegment.h"
 | 
|---|
| 8 | 
 | 
|---|
| 9 | TstNoiseCancel::TstNoiseCancel() {
 | 
|---|
| 10 | 
 | 
|---|
| 11 | }
 | 
|---|
| 12 | 
 | 
|---|
| 13 | void TstNoiseCancel::init() {
 | 
|---|
| 14 |   declareInput("noise");
 | 
|---|
| 15 |   declareOutput("signal");
 | 
|---|
| 16 |   declareOutput("probe");
 | 
|---|
| 17 |   declareOutput("theoric");
 | 
|---|
| 18 | }
 | 
|---|
| 19 | 
 | 
|---|
| 20 | void TstNoiseCancel::run() {
 | 
|---|
| 21 |   int snb = getMinIn();
 | 
|---|
| 22 |   int sne = getMaxIn();
 | 
|---|
| 23 | 
 | 
|---|
| 24 |   //cout << "TstNoiseCancel " << snb << " - " << sne << endl;
 | 
|---|
| 25 | 
 | 
|---|
| 26 |   double v1=0;
 | 
|---|
| 27 |   double v2=0;
 | 
|---|
| 28 |   for (int i=snb; i<=sne; i++) {
 | 
|---|
| 29 |     double noise = getData(0, i);
 | 
|---|
| 30 |     v1 = 0.8*v1 + noise;
 | 
|---|
| 31 |     v2 = -0.6*v2 + noise;
 | 
|---|
| 32 |     
 | 
|---|
| 33 | 
 | 
|---|
| 34 |     double sig = sin(i * 0.05 * 3.1415926);
 | 
|---|
| 35 | 
 | 
|---|
| 36 |     putData(0, i, sig+v1);
 | 
|---|
| 37 |     putData(1, i, v2);
 | 
|---|
| 38 |     putData(2, i, sig);
 | 
|---|
| 39 |   }
 | 
|---|
| 40 | 
 | 
|---|
| 41 |   //cout << "tstnoisecancel done" << endl;
 | 
|---|
| 42 | }
 | 
|---|
| 43 | 
 | 
|---|
| 44 | int main() {
 | 
|---|
| 45 |   TOIManager* mgr = TOIManager::getManager();
 | 
|---|
| 46 |   mgr->setRequestedSample(100,300);
 | 
|---|
| 47 |   
 | 
|---|
| 48 |   NoiseGenGauss gauss(1);
 | 
|---|
| 49 |   TstNoiseCancel correlnoise;
 | 
|---|
| 50 |   WienerDecorrelator wiener(200, 20);
 | 
|---|
| 51 |   ASCIITOIWriter wtr("noisecancel.out");
 | 
|---|
| 52 | 
 | 
|---|
| 53 |   TOISegmented* toi = new TOISegmented("gaussnoise");
 | 
|---|
| 54 |   gauss.addOutput("noise", toi);
 | 
|---|
| 55 |   correlnoise.addInput("noise", toi);
 | 
|---|
| 56 | 
 | 
|---|
| 57 |   toi = new TOISegmented("signal");
 | 
|---|
| 58 |   correlnoise.addOutput("signal" , toi);
 | 
|---|
| 59 |   wiener.addInput("signal", toi);
 | 
|---|
| 60 |   wtr.addInput("signal", toi);
 | 
|---|
| 61 | 
 | 
|---|
| 62 |   toi = new TOISegmented("probe");
 | 
|---|
| 63 |   correlnoise.addOutput("probe", toi);
 | 
|---|
| 64 |   wiener.addInput("probe", toi);
 | 
|---|
| 65 |   wtr.addInput("probe", toi);
 | 
|---|
| 66 | 
 | 
|---|
| 67 |   toi = new TOISegmented("filtered");
 | 
|---|
| 68 |   wiener.addOutput("signal", toi);
 | 
|---|
| 69 |   wtr.addInput("filtered", toi);
 | 
|---|
| 70 | 
 | 
|---|
| 71 |   toi = new TOISegmented("theoric");
 | 
|---|
| 72 |   correlnoise.addOutput("theoric", toi);
 | 
|---|
| 73 |   wtr.addInput("theoric", toi);
 | 
|---|
| 74 | 
 | 
|---|
| 75 |   gauss.start(); correlnoise.start(); wiener.start(); wtr.start();
 | 
|---|
| 76 |   
 | 
|---|
| 77 |   mgr->joinAll();
 | 
|---|
| 78 | }
 | 
|---|