FastLED 3.9.15
Loading...
Searching...
No Matches

◆ calculateTrend()

float fl::audio::detector::DynamicsAnalyzer::calculateTrend ( )
private

Definition at line 113 of file dynamics_analyzer.cpp.hpp.

113 {
114 if (mRMSHistory.size() < 10) {
115 return 0.0f; // Not enough data
116 }
117
118 // Use linear regression to determine trend
119 // Compare recent average to older average
120 fl::size halfSize = mRMSHistory.size() / 2;
121
122 float recentSum = 0.0f;
123 float olderSum = 0.0f;
124
125 // Recent half
126 for (fl::size i = 0; i < halfSize; i++) {
127 fl::size idx = (mHistoryIndex + i) % mRMSHistory.size();
128 olderSum += mRMSHistory[idx];
129 }
130
131 // Older half
132 for (fl::size i = halfSize; i < mRMSHistory.size(); i++) {
133 fl::size idx = (mHistoryIndex + i) % mRMSHistory.size();
134 recentSum += mRMSHistory[idx];
135 }
136
137 float recentAvg = recentSum / halfSize;
138 float olderAvg = olderSum / halfSize;
139
140 // Avoid division by zero
141 if (olderAvg < 1e-6f) {
142 return 0.0f;
143 }
144
145 // Calculate normalized trend (-1 to +1)
146 float rawTrend = (recentAvg - olderAvg) / olderAvg;
147
148 // Clamp to reasonable range
149 return fl::max(-1.0f, fl::min(1.0f, rawTrend * 5.0f));
150}
FL_DISABLE_WARNING_PUSH U constexpr common_type_t< T, U > min(T a, U b) FL_NOEXCEPT
Definition math.h:71
constexpr common_type_t< T, U > max(T a, U b) FL_NOEXCEPT
Definition math.h:75

References fl::max(), mHistoryIndex, fl::min(), and mRMSHistory.

Referenced by update().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: