MCPcopy Create free account
hub / github.com/audacity/audacity / NewWindowFunc

Function NewWindowFunc

libraries/lib-fft/FFT.cpp:368–510  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

366}
367
368void NewWindowFunc(int whichFunction, size_t NumSamplesIn, bool extraSample, float *in)
369{
370 int NumSamples = (int)NumSamplesIn;
371 if (extraSample) {
372 wxASSERT(NumSamples > 0);
373 --NumSamples;
374 }
375 wxASSERT(NumSamples > 0);
376
377 switch (whichFunction) {
378 default:
379 wxFprintf(stderr, "FFT::WindowFunc - Invalid window function: %d\n", whichFunction);
380 break;
381 case eWinFuncRectangular:
382 // Multiply all by 1.0f -- do nothing
383 break;
384
385 case eWinFuncBartlett:
386 {
387 // Bartlett (triangular) window
388 const int nPairs = (NumSamples - 1) / 2; // whether even or odd NumSamples, this is correct
389 const float denom = NumSamples / 2.0f;
390 in[0] = 0.0f;
391 for (int ii = 1;
392 ii <= nPairs; // Yes, <=
393 ++ii) {
394 const float value = ii / denom;
395 in[ii] *= value;
396 in[NumSamples - ii] *= value;
397 }
398 // When NumSamples is even, in[half] should be multiplied by 1.0, so unchanged
399 // When odd, the value of 1.0 is not reached
400 }
401 break;
402 case eWinFuncHamming:
403 {
404 // Hamming
405 const double multiplier = 2 * M_PI / NumSamples;
406 static const double coeff0 = 0.54, coeff1 = -0.46;
407 for (int ii = 0; ii < NumSamples; ++ii)
408 in[ii] *= coeff0 + coeff1 * cos(ii * multiplier);
409 }
410 break;
411 case eWinFuncHann:
412 {
413 // Hann
414 const double multiplier = 2 * M_PI / NumSamples;
415 static const double coeff0 = 0.5, coeff1 = -0.5;
416 for (int ii = 0; ii < NumSamples; ++ii)
417 in[ii] *= coeff0 + coeff1 * cos(ii * multiplier);
418 }
419 break;
420 case eWinFuncBlackman:
421 {
422 // Blackman
423 const double multiplier = 2 * M_PI / NumSamples;
424 const double multiplier2 = 2 * multiplier;
425 static const double coeff0 = 0.42, coeff1 = -0.5, coeff2 = 0.08;

Callers 3

SpectrumTransformerMethod · 0.85
WindowFuncFunction · 0.85
RecreateWindowFunction · 0.85

Calls

no outgoing calls

Tested by 2

SpectrumTransformerMethod · 0.68
RecreateWindowFunction · 0.68