1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-25 08:38:39 +02:00

Optimisation for speed, due to some code I found in an FFT routine.

This commit is contained in:
martynshaw99 2014-02-17 00:00:59 +00:00
parent d6fc910e2d
commit f1ce8a5cc2

View File

@ -831,11 +831,21 @@ void EqualizationPanel::OnPaint(wxPaintEvent & WXUNUSED(event))
freq = lin ? step*i : pow(10., loLog + i*step); //Hz freq = lin ? step*i : pow(10., loLog + i*step); //Hz
if( ( lin ? step : (pow(10., loLog + (i+1)*step)-freq) ) < delta) if( ( lin ? step : (pow(10., loLog + (i+1)*step)-freq) ) < delta)
{ //not enough resolution in FFT { //not enough resolution in FFT
freq = M_PI*freq/mHiFreq; //radians, normalized // set up for calculating cos using recurrance - faster than calculating it directly each time
double theta = M_PI*freq/mHiFreq; //radians, normalized
double wtemp = sin(0.5 * theta);
double wpr = -2.0 * wtemp * wtemp;
double wpi = -1.0 * sin(theta);
double wr = cos(theta*halfM);
double wi = sin(theta*halfM);
yF = 0.; yF = 0.;
for(int j=0;j<halfM;j++) for(int j=0;j<halfM;j++)
{ {
yF += 2. * mOutr[j] * cos(freq*(halfM-j)); yF += 2. * mOutr[j] * wr; // This works for me, compared to the previous version. Compare wr to cos(theta*(halfM-j)). Works for me. Keep everything as doubles though.
// do recurrance
wr = (wtemp = wr) * wpr - wi * wpi + wr;
wi = wi * wpr + wtemp * wpi + wi;
} }
yF += mOutr[halfM]; yF += mOutr[halfM];
yF = fabs(yF); yF = fabs(yF);