Krotos Modules 3
Loading...
Searching...
No Matches
krotos::MusicScaleFilterBank Class Reference

#include <MusicScaleFilterBank.h>

Public Member Functions

 MusicScaleFilterBank (float sampleRate)
 
void setSamplingRate (float fs)
 
void setParameters (float fMin, float fMax, int numBandsPerOctave, int numFFTBins)
 
std::vector< std::vector< float > > filterSpectrum (const std::vector< std::vector< float > > &spectrum)
 

Private Member Functions

void musicScaleFilterUnrolled (std::vector< std::vector< float > > &filteredLogSpec, std::vector< std::vector< float > > &spectrum, int frame)
 A sparse unrolled version of the nested matrix multiply loops used in the filterSpectrum() method.
 
void musicScaleFilterUnrolled96000 (std::vector< std::vector< float > > &filteredLogSpec, const std::vector< std::vector< float > > &spectrum, int frame)
 
void musicScaleFilterUnrolled48000 (std::vector< std::vector< float > > &filteredLogSpec, const std::vector< std::vector< float > > &spectrum, int frame)
 
void musicScaleFilterUnrolled44100 (std::vector< std::vector< float > > &filteredLogSpec, const std::vector< std::vector< float > > &spectrum, int frame)
 
void musicScaleFilterUnrolled22050 (std::vector< std::vector< float > > &filteredLogSpec, const std::vector< std::vector< float > > &spectrum, int frame)
 
void buildLogFreqAxis ()
 
std::vector< float > mapNotesToFFTBins ()
 
std::vector< std::vector< float > > buildFilterBank ()
 
std::vector< float > triangularFilterCoeff (float start, float mid, float stop)
 

Private Attributes

float m_maxFreq
 
float m_minFreq
 
int m_bandsPerOct
 
int m_numFFTBins {-1}
 
int m_numBands {0}
 
std::vector< std::vector< float > > m_filterBank
 
const float m_A4 = 440.0f
 
std::vector< float > m_freqLogAxis
 
float m_samplingRate {-1.0f}
 
const float sr_441k = 44100.0f
 
const float sr_48k = 48000.0f
 
const float sr_96k = 96000.0f
 
const float sr_225k = 22050.0f
 

Constructor & Destructor Documentation

◆ MusicScaleFilterBank()

krotos::MusicScaleFilterBank::MusicScaleFilterBank ( float sampleRate)

Constructor

Copyright Krotos LTD 2023

All rights reserved.

Member Function Documentation

◆ buildFilterBank()

std::vector< std::vector< float > > krotos::MusicScaleFilterBank::buildFilterBank ( )
private

Build the FilterBank.

◆ buildLogFreqAxis()

void krotos::MusicScaleFilterBank::buildLogFreqAxis ( )
private

Get the list of frequencies aligned on the logarithmic scale.

◆ filterSpectrum()

std::vector< std::vector< float > > krotos::MusicScaleFilterBank::filterSpectrum ( const std::vector< std::vector< float > > & spectrum)

Apply filterbank to the incoming spectrogram

Parameters
spectrumincoming STFT matrix
Returns
filtered spectrogram

◆ mapNotesToFFTBins()

std::vector< float > krotos::MusicScaleFilterBank::mapNotesToFFTBins ( )
private

Map logarithmic frequencies to FFT bins.

◆ musicScaleFilterUnrolled()

void krotos::MusicScaleFilterBank::musicScaleFilterUnrolled ( std::vector< std::vector< float > > & filteredLogSpec,
std::vector< std::vector< float > > & spectrum,
int frame )
private

A sparse unrolled version of the nested matrix multiply loops used in the filterSpectrum() method.

Parameters
filteredLogSpec
spectrum
frame

Copyright Krotos LTD 2023

All rights reserved.

◆ musicScaleFilterUnrolled22050()

void krotos::MusicScaleFilterBank::musicScaleFilterUnrolled22050 ( std::vector< std::vector< float > > & filteredLogSpec,
const std::vector< std::vector< float > > & spectrum,
int frame )
private

◆ musicScaleFilterUnrolled44100()

void krotos::MusicScaleFilterBank::musicScaleFilterUnrolled44100 ( std::vector< std::vector< float > > & filteredLogSpec,
const std::vector< std::vector< float > > & spectrum,
int frame )
private

◆ musicScaleFilterUnrolled48000()

void krotos::MusicScaleFilterBank::musicScaleFilterUnrolled48000 ( std::vector< std::vector< float > > & filteredLogSpec,
const std::vector< std::vector< float > > & spectrum,
int frame )
private

◆ musicScaleFilterUnrolled96000()

void krotos::MusicScaleFilterBank::musicScaleFilterUnrolled96000 ( std::vector< std::vector< float > > & filteredLogSpec,
const std::vector< std::vector< float > > & spectrum,
int frame )
private

◆ setParameters()

void krotos::MusicScaleFilterBank::setParameters ( float fMin,
float fMax,
int numBandsPerOctave,
int numFFTBins )

Sets the frequency logarithmic scale conversion parameters

Parameters
fMinminimum frequency we want represented [Hz]
fMaxthe maximum frequency [Hz]
numBandsPerOctavenumber of filter bands
numFFTBinsnumber of FFT coefficients

◆ setSamplingRate()

void krotos::MusicScaleFilterBank::setSamplingRate ( float fs)

Sets the sampling Rate

Parameters
fssampling Rate [Hz]

◆ triangularFilterCoeff()

std::vector< float > krotos::MusicScaleFilterBank::triangularFilterCoeff ( float start,
float mid,
float stop )
private

Calculates a triangular filter of the given size.

Member Data Documentation

◆ m_A4

const float krotos::MusicScaleFilterBank::m_A4 = 440.0f
private

◆ m_bandsPerOct

int krotos::MusicScaleFilterBank::m_bandsPerOct
private

◆ m_filterBank

std::vector<std::vector<float> > krotos::MusicScaleFilterBank::m_filterBank
private

◆ m_freqLogAxis

std::vector<float> krotos::MusicScaleFilterBank::m_freqLogAxis
private

◆ m_maxFreq

float krotos::MusicScaleFilterBank::m_maxFreq
private

◆ m_minFreq

float krotos::MusicScaleFilterBank::m_minFreq
private

◆ m_numBands

int krotos::MusicScaleFilterBank::m_numBands {0}
private

◆ m_numFFTBins

int krotos::MusicScaleFilterBank::m_numFFTBins {-1}
private

◆ m_samplingRate

float krotos::MusicScaleFilterBank::m_samplingRate {-1.0f}
private

◆ sr_225k

const float krotos::MusicScaleFilterBank::sr_225k = 22050.0f
private

◆ sr_441k

const float krotos::MusicScaleFilterBank::sr_441k = 44100.0f
private

◆ sr_48k

const float krotos::MusicScaleFilterBank::sr_48k = 48000.0f
private

◆ sr_96k

const float krotos::MusicScaleFilterBank::sr_96k = 96000.0f
private

The documentation for this class was generated from the following files: