1 #ifndef _FormantModeler_h_ 2 #define _FormantModeler_h_ 3 /* FormantModeler.h 4 * 5 * Copyright (C) 2014-2021 David Weenink 6 * 7 * This code is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 2 of the License, or (at 10 * your option) any later version. 11 * 12 * This code is distributed in the hope that it will be useful, but 13 * WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this work. If not, see <http://www.gnu.org/licenses/>. 19 */ 20 21 #include "Collection.h" 22 #include "Covariance.h" 23 #include "DataModeler.h" 24 #include "Formant.h" 25 #include "OptimalCeilingTier.h" 26 #include "Pitch.h" 27 #include "Sound_to_Formant.h" 28 #include "Table.h" 29 30 #include "FormantModeler_enums.h" 31 32 #include "FormantModeler_def.h" 33 34 autoFormantModeler FormantModeler_create (double tmin, double tmax, integer numberOfDataPoints, integer numberOfTracks, integer numberOfParameters); 35 36 autoFormantModeler FormantModeler_create (double tmin, double tmax, integer numberOfDataPoints, constINTVEC const& numberOfParameters); 37 38 double FormantModeler_indexToTime (FormantModeler me, integer index); 39 40 void FormantModeler_fit (FormantModeler me); 41 42 void FormantModeler_drawBasisFunction (FormantModeler me, Graphics g, double tmin, double tmax, double fmin, double fmax, 43 integer itrack, integer iterm, bool scaled, integer numberOfPoints, bool garnish); 44 45 void FormantModeler_setDataWeighing (FormantModeler me, integer fromTrack, integer toTrack, kFormantModelerWeights weighFormants); 46 47 void FormantModeler_setParameterValueFixed (FormantModeler me, integer itrack, integer index, double value); 48 49 void FormantModeler_setParametersFree (FormantModeler me, integer fromTrack, integer toTrack, integer fromIndex, integer toIndex); 50 51 void FormantModeler_setParameterValuesToZero (FormantModeler me, integer fromTrack, integer toTrack, double numberOfSigmas); 52 53 void FormantModeler_setTolerance (FormantModeler me, double tolerance); 54 55 void FormantModeler_drawModel_inside (FormantModeler me, Graphics g, double tmin, double tmax, double fmax, 56 integer fromTrack, integer toTrack, MelderColour oddTracks, MelderColour evenTracks, integer numberOfPoints); 57 58 void FormantModeler_speckle (FormantModeler me, Graphics g, double tmin, double tmax, double fmax, 59 integer fromTrack, integer toTrack, bool useEstimatedTrack, integer numberOfParameters, bool errorBars, 60 MelderColour oddTracks, MelderColour evenTracks, bool garnish); 61 62 void FormantModeler_speckle_inside (FormantModeler me, Graphics g, double xmin, double xmax, double fmax, 63 integer fromTrack, integer toTrack, bool useEstimatedTrack, integer numberOfParameters, bool errorBars, MelderColour oddTracks, MelderColour evenTracks); 64 65 void FormantModeler_drawTracks (FormantModeler me, Graphics g, double tmin, double tmax, double fmax, integer fromTrack, integer toTrack, bool useEstimatedTrack, integer numberOfParameters, MelderColour oddTracks, MelderColour evenTracks, bool garnish); 66 67 void FormantModeler_drawTracks_inside (FormantModeler me, Graphics g, double xmin, double xmax, double fmax, integer fromTrack, integer toTrack, bool useEstimatedTrack, integer numberOfParameters, MelderColour oddTracks, MelderColour evenTracks, bool garnish); 68 69 void FormantModeler_drawOutliersMarked (FormantModeler me, Graphics g, double tmin, double tmax, double fmax, integer fromTrack, integer toTrack, double numberOfSigmas, conststring32 mark, double marksFontSize, MelderColour oddTracks, MelderColour evenTracks, bool garnish); 70 71 void FormantModeler_drawCumulativeChiScores (FormantModeler me, Graphics g, double xmin, double xmax, double ymin, double ymax, bool garnish); 72 73 void FormantModeler_drawVariancesOfShiftedTracks (FormantModeler me, Graphics g, double xmin, double xmax, double ymin, double ymax, 74 kFormantModelerTrackShift shiftDirection, integer fromTrack, integer toTrack, bool garnish); 75 76 void FormantModeler_normalProbabilityPlot (FormantModeler me, Graphics g, integer itrack, integer numberOfQuantiles, double numberOfSigmas, double labelSize, conststring32 label, bool garnish); 77 78 autoTable FormantModeler_to_Table_zscores (FormantModeler me); 79 80 autoCovariance FormantModeler_to_Covariance_parameters (FormantModeler me, integer itrack); 81 82 83 /* 84 Precondition: fromFormant >= 1 85 toFormant == 0 signals 'all' data 86 */ 87 double FormantModeler_getChiSquaredQ (FormantModeler me, integer fromTrack, integer toTrack, double *probability, double *ndf); 88 89 double FormantModeler_getCoefficientOfDetermination (FormantModeler me, integer fromTrack, integer toTrack); 90 91 double FormantModeler_getStandardDeviation (FormantModeler me, integer itrack); 92 93 double FormantModeler_getResidualSumOfSquares (FormantModeler me, integer itrack, integer *numberOfDataPoints); 94 95 double FormantModeler_getEstimatedValueAtTime (FormantModeler me, integer itrack, double time); 96 97 integer FormantModeler_getNumberOfParameters (FormantModeler me, integer itrack); 98 99 integer FormantModeler_getNumberOfFixedParameters (FormantModeler me, integer itrack); 100 101 double FormantModeler_getParameterStandardDeviation ( FormantModeler me, integer itrack, integer index); 102 103 /* 104 Precondition: fromIndex >= 1 && fromFormant >= 1 105 toFormant == 0 && toIndex == 0 signal 'all' data 106 */ 107 double FormantModeler_getVarianceOfParameters (FormantModeler me, integer fromTrack, integer toTrack, integer fromIndex, integer toIndex, integer *numberOfFreeParameters); 108 109 kDataModelerParameterStatus FormantModeler_getParameterStatus (FormantModeler me, integer itrack, integer index); 110 111 integer FormantModeler_getNumberOfDataPoints (FormantModeler me); 112 113 integer FormantModeler_getNumberOfInvalidDataPoints (FormantModeler me, integer itrack); 114 115 void FormantModeler_setDataPointStatus (FormantModeler me, integer itrack, integer index, kDataModelerData status); 116 117 kDataModelerData FormantModeler_getDataPointStatus (FormantModeler me, integer itrack, integer index); 118 119 double FormantModeler_getDataPointValue (FormantModeler me, integer itrack, integer index); 120 121 void FormantModeler_setDataPointValue (FormantModeler me, integer itrack, integer index, double value); 122 123 double FormantModeler_getDataPointSigma (FormantModeler me, integer itrack, integer index); 124 125 void FormantModeler_setDataPointSigma (FormantModeler me, integer itrack, integer index, double sigma); 126 127 double FormantModeler_getDegreesOfFreedom (FormantModeler me, integer itrack); 128 129 integer FormantModeler_getNumberOfTracks (FormantModeler me); 130 131 double FormantModeler_getModelValueAtTime (FormantModeler me, integer itrack, double time); 132 133 double FormantModeler_getModelValueAtIndex (FormantModeler me, integer itrack, integer index); 134 135 double FormantModeler_getWeightedMean (FormantModeler me, integer itrack); 136 137 double FormantModeler_getParameterValue (FormantModeler me, integer itrack, integer iparameter); 138 139 autoFormantModeler Formant_to_FormantModeler (Formant me, double tmin, double tmax, integer numberOfTracks, 140 integer numberOfParametersPerTrack); 141 142 autoFormantModeler Formant_to_FormantModeler (Formant me, double tmin, double tmax, constINTVEC const& numberOfParametersPerTrack); 143 144 autoFormant FormantModeler_to_Formant (FormantModeler me, bool estimate, bool estimateUndefined); 145 146 autoFormantModeler FormantModeler_processOutliers (FormantModeler me, double numberOfSigmas); 147 148 /* 149 Get roughness criterion value according to Weenink's (2015) measure 150 W = (var/k)^t * (chi^2/d), where 151 var is the sum of all variances of all parameters of all modelled formants, 152 k is the total number of parameters to mode all tracks, chi^2 is the combined chi-squared of all 153 the modelled tracks, d is the combined degrees of freedom, and t is a number that if chosen 154 larger than 1 guarantees that for tracks that only differ in bandwidth the one with the largest 155 bandwidth obtains a higher value for W. 156 A lower value for W means a smoother track. 157 158 The routine returns log10 (W). 159 */ 160 double FormantModeler_getStress (FormantModeler me, integer fromTrack, integer toTrack, 161 integer numberOfParametersPerTrack, double power); 162 163 double FormantModeler_getAverageDistanceBetweenTracks (FormantModeler me, integer track1, integer track2, int type); 164 165 void FormantModeler_reportChiSquared (FormantModeler me); 166 167 integer Formants_getSmoothestInInterval (CollectionOf<structFormant>* me, double tmin, double tmax, integer numberOfFormantTracks, integer numberOfParametersPerTrack, kFormantModelerWeights weighFormants, bool useConstraints, double numberOfSigmas, double power, double minF1, double maxF1, double minF2, double maxF2, double minF3); 168 169 double FormantModeler_getFormantsConstraintsFactor (FormantModeler me, double minF1, double maxF1, double minF2, double maxF2, double minF3); 170 171 autoFormant Formants_extractSmoothestPart (CollectionOf<structFormant>* me, double tmin, double tmax, integer numberOfFormantTracks, integer numberOfParametersPerTrack, kFormantModelerWeights weighFormants, double numberOfSigmas, double power); 172 173 autoFormant Formants_extractSmoothestPart_withFormantsConstraints (CollectionOf<structFormant>* me, double tmin, double tmax, integer numberOfFormantTracks, integer numberOfParametersPerTrack, kFormantModelerWeights weighFormants, double numberOfSigmas, double power, double minF1, double maxF1, double minF2, double maxF2, double minF3); 174 175 autoDataModeler FormantModeler_extractDataModeler (FormantModeler me, integer itrack); 176 177 autoFormant Sound_to_Formant_interval (Sound me, double startTime, double endTime, 178 double windowLength, double timeStep, double minFreq, double maxFreq, integer numberOfFrequencySteps, 179 double preemphasisFrequency, integer numberOfFormantTracks, integer numberOfParametersPerTrack, kFormantModelerWeights weighFormants, 180 double numberOfSigmas, double power, bool useConstraints, double minF1, double maxF1, double minF2, double maxF2, double minF3, 181 double *out_optimalCeiling 182 ); 183 184 autoFormant Sound_to_Formant_interval_robust (Sound me, double startTime, double endTime, 185 double windowLength, double timeStep, double minFreq, double maxFreq, integer numberOfFrequencySteps, 186 double preemphasisFrequency, integer numberOfFormantTracks, integer numberOfParametersPerTrack, kFormantModelerWeights weighFormants, 187 double numberOfSigmas, double power, bool useConstraints, double minF1, double maxF1, double minF2, double maxF2, double minF3, 188 double *out_optimalCeiling 189 ); 190 191 double Sound_getOptimalFormantCeiling (Sound me, double startTime, double endTime, 192 double windowLength, double timeStep, double minFreq, double maxFreq, integer numberOfFrequencySteps, 193 double preemphasisFrequency, integer numberOfFormantTracks, integer numberOfParametersPerTrack, kFormantModelerWeights weighFormants, 194 double numberOfSigmas, double power 195 ); 196 197 autoOptimalCeilingTier Sound_to_OptimalCeilingTier (Sound me, 198 double windowLength, double timeStep, double minCeiling, double maxCeiling, integer numberOfFrequencySteps, 199 double preemphasisFrequency, double smoothingWindow, integer numberOfFormantTracks, integer numberOfParametersPerTrack, kFormantModelerWeights weighFormants, 200 double numberOfSigmas, double power 201 ); 202 203 #endif /* _FormantModeler_h_ */ 204