Krotos Modules 3
Loading...
Searching...
No Matches
SWIPE_PitchEstimation.h
Go to the documentation of this file.
1//=====================================================================================
7//=====================================================================================
8#pragma once
9#include "../krotos_eigen_updated/unsupported/Eigen/Polynomials"
10
11namespace krotos
12{
13 //==============================================================================
33 {
34 public:
35 /* Constructor
36 * @param sampleRate sampling rate in Hz
37 * @param timeStep pitch estimated every timeStep seconds
38 * @param log2PitchStep pitch samples samples distributed every DLOG2P units on a base-2 logarithmic scale of
39 *Hertz
40 * @param ERBStep spectrum is sampled uniformly in the ERB scale with a step size
41 * @param normOverlap spectrum is computed using a Hann window with an overlap normOverlap between 0 and 1
42 * @param strenThresh pitch estimates with a strength lower than strenThresh are treated as undefined
43 *
44 */
45 SWIPE_PitchEstimation(const float sampleRate, const float timeStep, const float log2PitchStep,
46 const float ERBStep, const float normOverlap, const float strenThresh);
47
51 void initVectors();
52
59 std::pair<Eigen::VectorXf, Eigen::VectorXf> calculatePitchStrengthPairs(std::vector<float>& signal);
60
64 Eigen::VectorXf getTimes() { return m_times; };
65
66 private:
68 Eigen::VectorXf calculateLog2PitchCands(float log2PitchStep);
69 Eigen::VectorXf calculatePitchCands(const Eigen::VectorXf& log2PitchCands);
70
72 std::pair<Eigen::VectorXf, Eigen::VectorXf> selectCandidatesForWindowSize(size_t winSizeIDx);
73
75 Eigen::VectorXf getERBsSubset(const Eigen::VectorXf& pitchCandsSubset);
76
77 Eigen::MatrixXf pitchStrengthAllCandidates(const Eigen::VectorXf& ERBs, Eigen::MatrixXf& ERBsDistrValues,
78 const Eigen::VectorXf& pitchCands);
79
80 Eigen::VectorXf pitchStrengthOneCandidate(const Eigen::VectorXf& ERBS,
81 const Eigen::MatrixXf& normERBsDistrValues, float pitchCand);
82
84 std::pair<Eigen::VectorXf, Eigen::VectorXf> fineTunePitch(Eigen::MatrixXf globStrMatrix);
85
87 Eigen::VectorXi primes(int n);
88 Eigen::MatrixXf cumsum(const Eigen::MatrixXf& input);
89
97 Eigen::VectorXf polyfit(const Eigen::VectorXf& x, const Eigen::VectorXf& y, int n);
98
99 Eigen::MatrixXf computeN(const Eigen::MatrixXf& ERBsDistrValues);
100
101 float m_sampleRate{-1.0f}, m_timeStep{-1.0f}, m_log2PitchStep{-1.0f}, m_ERBStep{-1.0f}, m_normOverlap{-1.0f},
103
105 Eigen::Vector2f m_pitchLims;
106 Eigen::VectorXf m_times;
107 Eigen::VectorXf m_pitchCands;
108 Eigen::VectorXf m_winSizes;
110 Eigen::VectorXf m_ERBs;
111 };
112} // namespace krotos
A Sawtooth waveform inspired pitch estimator for speech and music. Paper: https://www....
Definition SWIPE_PitchEstimation.h:33
float m_normOverlap
Definition SWIPE_PitchEstimation.h:101
Eigen::VectorXf getERBsSubset(const Eigen::VectorXf &pitchCandsSubset)
Definition SWIPE_PitchEstimation.cpp:286
Eigen::MatrixXf cumsum(const Eigen::MatrixXf &input)
Definition SWIPE_PitchEstimation.cpp:601
Eigen::VectorXf m_times
Definition SWIPE_PitchEstimation.h:106
Eigen::VectorXf m_ERBs
Definition SWIPE_PitchEstimation.h:110
std::pair< Eigen::VectorXf, Eigen::VectorXf > calculatePitchStrengthPairs(std::vector< float > &signal)
Definition SWIPE_PitchEstimation.cpp:70
Eigen::VectorXf polyfit(const Eigen::VectorXf &x, const Eigen::VectorXf &y, int n)
Definition SWIPE_PitchEstimation.cpp:578
Eigen::Vector2f m_pitchLims
Definition SWIPE_PitchEstimation.h:105
Eigen::VectorXi primes(int n)
Definition SWIPE_PitchEstimation.cpp:556
void initVectors()
Definition SWIPE_PitchEstimation.cpp:26
Eigen::VectorXf calculateLog2PitchCands(float log2PitchStep)
Definition SWIPE_PitchEstimation.cpp:188
float m_log2PitchStep
Definition SWIPE_PitchEstimation.h:101
Eigen::VectorXf m_log2DistWin1OptPitchAndPitchCands
Definition SWIPE_PitchEstimation.h:109
std::pair< Eigen::VectorXf, Eigen::VectorXf > fineTunePitch(Eigen::MatrixXf globStrMatrix)
Definition SWIPE_PitchEstimation.cpp:429
float m_strenThresh
Definition SWIPE_PitchEstimation.h:102
Eigen::MatrixXf pitchStrengthAllCandidates(const Eigen::VectorXf &ERBs, Eigen::MatrixXf &ERBsDistrValues, const Eigen::VectorXf &pitchCands)
Definition SWIPE_PitchEstimation.cpp:311
Eigen::MatrixXf computeN(const Eigen::MatrixXf &ERBsDistrValues)
Definition SWIPE_PitchEstimation.cpp:536
Eigen::VectorXf m_winSizes
Definition SWIPE_PitchEstimation.h:108
SWIPE_PitchEstimation(const float sampleRate, const float timeStep, const float log2PitchStep, const float ERBStep, const float normOverlap, const float strenThresh)
Definition SWIPE_PitchEstimation.cpp:10
Eigen::VectorXf calculatePitchCands(const Eigen::VectorXf &log2PitchCands)
Definition SWIPE_PitchEstimation.cpp:205
std::pair< Eigen::VectorXf, Eigen::VectorXf > selectCandidatesForWindowSize(size_t winSizeIDx)
Definition SWIPE_PitchEstimation.cpp:215
Eigen::VectorXf getTimes()
Definition SWIPE_PitchEstimation.h:64
float m_timeStep
Definition SWIPE_PitchEstimation.h:101
float m_sampleRate
Definition SWIPE_PitchEstimation.h:101
Eigen::VectorXf m_pitchCands
Definition SWIPE_PitchEstimation.h:107
Eigen::VectorXf pitchStrengthOneCandidate(const Eigen::VectorXf &ERBS, const Eigen::MatrixXf &normERBsDistrValues, float pitchCand)
Definition SWIPE_PitchEstimation.cpp:367
float m_ERBStep
Definition SWIPE_PitchEstimation.h:101
Definition AirAbsorptionFilter.cpp:2