Mercurial > hg > qm-dsp
comparison dsp/signalconditioning/DFProcess.cpp @ 74:769da847732b
* A few fixes prompted by vamp-plugin-tester
author | cannam |
---|---|
date | Mon, 08 Jun 2009 12:30:20 +0000 |
parents | d72fcd34d9a7 |
children | a5eae96a357c |
comparison
equal
deleted
inserted
replaced
73:dcb555b90924 | 74:769da847732b |
---|---|
80 } | 80 } |
81 | 81 |
82 | 82 |
83 void DFProcess::medianFilter(double *src, double *dst) | 83 void DFProcess::medianFilter(double *src, double *dst) |
84 { | 84 { |
85 unsigned int i,k,j,l; | 85 int i,k,j,l; |
86 unsigned int index = 0; | 86 int index = 0; |
87 | 87 |
88 double val = 0; | 88 double val = 0; |
89 | 89 |
90 double* y = new double[ m_winPost + m_winPre + 1]; | 90 double* y = new double[ m_winPost + m_winPre + 1]; |
91 memset( y, 0, sizeof( double ) * ( m_winPost + m_winPre + 1) ); | 91 memset( y, 0, sizeof( double ) * ( m_winPost + m_winPre + 1) ); |
92 | 92 |
93 double* scratch = new double[ m_length ]; | 93 double* scratch = new double[ m_length ]; |
94 | 94 |
95 for( i = 0; i < m_winPre; i++) | 95 for( i = 0; i < m_winPre && index; i++) |
96 { | 96 { |
97 if (index >= m_length) break; | |
98 | |
97 k = i + m_winPost + 1; | 99 k = i + m_winPost + 1; |
98 | 100 |
99 for( j = 0; j < k; j++) | 101 for( j = 0; j < k; j++) |
100 { | 102 { |
101 y[ j ] = src[ j ]; | 103 y[ j ] = src[ j ]; |
102 } | 104 } |
103 scratch[ index ] = MathUtilities::median( y, k ); | 105 scratch[ index ] = MathUtilities::median( y, k ); |
104 index++; | 106 index++; |
105 } | 107 } |
106 | 108 |
107 for( i = 0; i < ( m_length - ( m_winPost + m_winPre ) ); i ++) | 109 for( i = 0; i + m_winPost + m_winPre < m_length; i ++) |
108 { | 110 { |
111 if (index >= m_length) break; | |
112 | |
109 | 113 |
110 l = 0; | 114 l = 0; |
111 for( j = i; j < ( i + m_winPost + m_winPre + 1); j++) | 115 for( j = i; j < ( i + m_winPost + m_winPre + 1); j++) |
112 { | 116 { |
113 y[ l ] = src[ j ]; | 117 y[ l ] = src[ j ]; |
115 } | 119 } |
116 | 120 |
117 scratch[ index++ ] = MathUtilities::median( y, (m_winPost + m_winPre + 1 )); | 121 scratch[ index++ ] = MathUtilities::median( y, (m_winPost + m_winPre + 1 )); |
118 } | 122 } |
119 | 123 |
120 for( i = std::max( m_length - m_winPost, (unsigned)1); i < m_length; i++) | 124 for( i = std::max( m_length - m_winPost, 1); i < m_length; i++) |
121 { | 125 { |
122 k = std::max( i - m_winPre, (unsigned)1); | 126 if (index >= m_length) break; |
127 | |
128 k = std::max( i - m_winPre, 1); | |
123 | 129 |
124 l = 0; | 130 l = 0; |
125 for( j = k; j < m_length; j++) | 131 for( j = k; j < m_length; j++) |
126 { | 132 { |
127 y[ l ] = src[ j ]; | 133 y[ l ] = src[ j ]; |