fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <cmath>
  4. using namespace std;
  5.  
  6. // mean filter is centered
  7. std::vector<double> meanWindow(const std::vector<double>& arrayIn, int windowSize) {
  8.  
  9. int N = static_cast<int>(arrayIn.size());
  10.  
  11. std::vector<double> filteredOutput(N);
  12.  
  13. // YOUR CODE HERE
  14. // return a vector (of same size as arrayIn) with the moving average filter output of arrayIn
  15. // filteredOutput[i] contains the average of <windowSize> elements centered at i
  16. // At endpoints, use a shortened window
  17.  
  18. std::vector<double> paddedArray(N + windowSize-1);
  19.  
  20. for(int j=0; j<N+windowSize-1;j++)
  21. {
  22. if(j<windowSize/2 || j > (N + windowSize/2 - 1) )
  23. {
  24. paddedArray[j] = 0;
  25.  
  26. }
  27. else
  28. {
  29. paddedArray[j]=arrayIn[j-windowSize/2];
  30. }
  31. cout << paddedArray[j] << " ";
  32. }
  33.  
  34.  
  35. for(int j=0; j<N; j++){
  36.  
  37. double sum;
  38.  
  39. for(int i=0; i<windowSize; i++)
  40. {
  41.  
  42. sum = 0.0;
  43. sum += paddedArray[j - i +windowSize/2];
  44. }
  45.  
  46. filteredOutput[j] = sum/windowSize;
  47. }
  48.  
  49.  
  50. return filteredOutput;
  51. }
  52.  
  53. // To execute C++, please define "int main()"
  54. int main()
  55. {
  56. auto words = { "Hello, ", "World!", "\n" };
  57. for (const string& word : words) {
  58. cout << word;
  59. }
  60.  
  61. // Test input signals to use (constant time step in between values)
  62. std::vector<double> test = {1,2,3,0,5,1,2,6,-1,-3,-10,-8};
  63.  
  64. std::vector<double> result;
  65.  
  66. int windowSize = 3;
  67.  
  68. result = meanWindow(test, windowSize);
  69.  
  70. // print output
  71. for (size_t i = 0; i < result.size(); ++i){
  72. std::cout << result[i] << std::endl;
  73. }
  74.  
  75. return 0;
  76. }
  77.  
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
Hello, World!
0 1 2 3 0 5 1 2 6 -1 -3 -10 -8 0 2.12448e-322
0
0.333333
0.666667
1
0
1.66667
0.333333
0.666667
2
-0.333333
-1