| Line |  | 
|---|
| 1 |  | 
|---|
| 2 | #include <deque> | 
|---|
| 3 | #include "factfir.h" | 
|---|
| 4 |  | 
|---|
| 5 | using namespace std; | 
|---|
| 6 |  | 
|---|
| 7 | // source vector is | 
|---|
| 8 | void factfir(double b, vector<double> &a, int k, vector<float> &source, vector<float> &dest){ | 
|---|
| 9 | //dest.clear(); | 
|---|
| 10 |  | 
|---|
| 11 | for (int slice =0; slice < (int)source.size(); slice++) { | 
|---|
| 12 | float currentval = 0; | 
|---|
| 13 |  | 
|---|
| 14 | for (int i=0; i < k ; i++){ | 
|---|
| 15 | currentval += a[i] * source[ (slice - i + source.size()) % source.size() ]; | 
|---|
| 16 | } | 
|---|
| 17 | dest[slice] = currentval / b; | 
|---|
| 18 | } | 
|---|
| 19 | } | 
|---|
| 20 |  | 
|---|
| 21 | void sliding_avg(vector<float> &source, vector<float> &dest, unsigned int HalfWidth){ | 
|---|
| 22 | // make local copy of source, in case source and dest are the same | 
|---|
| 23 |  | 
|---|
| 24 | deque<float> local; | 
|---|
| 25 | local.insert(local.end(), source.begin(), source.end()); | 
|---|
| 26 | // edge treatment. | 
|---|
| 27 | local.insert(local.begin(), HalfWidth, source[0]); | 
|---|
| 28 | local.insert(local.end(), HalfWidth, source[source.size()-1]); | 
|---|
| 29 |  | 
|---|
| 30 | deque<float>::iterator it; | 
|---|
| 31 |  | 
|---|
| 32 | dest.clear(); | 
|---|
| 33 |  | 
|---|
| 34 | float x; | 
|---|
| 35 | for (it=local.begin()+HalfWidth; it<local.end()-HalfWidth; ++it) { | 
|---|
| 36 |  | 
|---|
| 37 | x=*it; | 
|---|
| 38 | float FullWidth = 2*HalfWidth+1; | 
|---|
| 39 |  | 
|---|
| 40 | for ( unsigned int i=0; i < HalfWidth ; i++){ | 
|---|
| 41 | x += *(it+i); // add the right neighbors | 
|---|
| 42 | x += *(it-i); // and don't forget the left neighbors on the left | 
|---|
| 43 | } | 
|---|
| 44 |  | 
|---|
| 45 | dest.push_back(x/FullWidth); | 
|---|
| 46 | } | 
|---|
| 47 | } | 
|---|
| 48 |  | 
|---|
       
      
  Note:
 See   
TracBrowser
 for help on using the repository browser.