static void info (I) { iam (RealTier); classFunction -> info (me); MelderInfo_writeLine2 (L"Number of points: ", Melder_integer (my points -> size)); MelderInfo_writeLine2 (L"Minimum value: ", Melder_double (RealTier_getMinimumValue (me))); MelderInfo_writeLine2 (L"Maximum value: ", Melder_double (RealTier_getMaximumValue (me))); }
void structTube :: v_info () { structData :: v_info (); MelderInfo_writeLine5 (L"Time domain: ", Melder_double (xmin), L" to ", Melder_double (xmax), L" seconds"); MelderInfo_writeLine2 (L"Maximum number of segments: ", Melder_integer (maxnSegments)); MelderInfo_writeLine2 (L"Number of frames: ", Melder_integer (nx)); MelderInfo_writeLine3 (L"Time step: ", Melder_double (dx), L" seconds"); MelderInfo_writeLine3 (L"First frame at: ", Melder_double (x1), L" seconds"); }
void structLPC :: v_info () { structData :: v_info (); MelderInfo_writeLine (L"Time domain: ", Melder_double (xmin), L" to ", Melder_double (xmax), L" (s)."); MelderInfo_writeLine (L"Prediction order: ", Melder_integer (maxnCoefficients)); MelderInfo_writeLine (L"Number of frames: ", Melder_integer (nx)); MelderInfo_writeLine (L"Time step: ", Melder_double (dx), L" (s)."); MelderInfo_writeLine (L"First frame at: ", Melder_double (x1), L" (s)."); }
void structPitchTier :: v_info () { structData :: v_info (); MelderInfo_writeLine1 (L"Time domain:"); MelderInfo_writeLine3 (L" Start time: ", Melder_double (xmin), L" seconds"); MelderInfo_writeLine3 (L" End time: ", Melder_double (xmax), L" seconds"); MelderInfo_writeLine3 (L" Total duration: ", Melder_double (xmax - xmin), L" seconds"); MelderInfo_writeLine2 (L"Number of points: ", Melder_integer (points -> size)); MelderInfo_writeLine3 (L"Minimum pitch value: ", Melder_double (RealTier_getMinimumValue (this)), L" Hz"); MelderInfo_writeLine3 (L"Maximum pitch value: ", Melder_double (RealTier_getMaximumValue (this)), L" Hz"); }
void structSpectrumTier :: v_info () { structData :: v_info (); MelderInfo_writeLine1 (L"Frequency domain:"); MelderInfo_writeLine3 (L" Lowest frequency: ", Melder_double (xmin), L" Hz"); MelderInfo_writeLine3 (L" Highest frequency: ", Melder_double (xmax), L" Hz"); MelderInfo_writeLine3 (L" Total bandwidth: ", Melder_double (xmax - xmin), L" Hz"); MelderInfo_writeLine2 (L"Number of points: ", Melder_integer (points -> size)); MelderInfo_writeLine3 (L"Minimum power value: ", Melder_double (RealTier_getMinimumValue (this)), L" dB/Hz"); MelderInfo_writeLine3 (L"Maximum power value: ", Melder_double (RealTier_getMaximumValue (this)), L" dB/Hz"); }
void structDurationTier :: v_info () { structData :: v_info (); MelderInfo_writeLine (L"Time domain:"); MelderInfo_writeLine (L" Start time: ", Melder_double (xmin), L" seconds"); MelderInfo_writeLine (L" End time: ", Melder_double (xmax), L" seconds"); MelderInfo_writeLine (L" Total original duration: ", Melder_double (xmax - xmin), L" seconds"); MelderInfo_writeLine (L"Number of points: ", Melder_integer (points -> size)); MelderInfo_writeLine (L"Minimum relative duration value: ", Melder_double (RealTier_getMinimumValue (this))); MelderInfo_writeLine (L"Maximum relative duration value: ", Melder_double (RealTier_getMaximumValue (this))); }
void structIntensity :: v_info () { structData :: v_info (); MelderInfo_writeLine (L"Time domain:"); MelderInfo_writeLine (L" Start time: ", Melder_double (xmin), L" seconds"); MelderInfo_writeLine (L" End time: ", Melder_double (xmax), L" seconds"); MelderInfo_writeLine (L" Total duration: ", Melder_double (xmax - xmin), L" seconds"); MelderInfo_writeLine (L"Time sampling:"); MelderInfo_writeLine (L" Number of frames: ", Melder_integer (nx)); MelderInfo_writeLine (L" Time step: ", Melder_double (dx), L" seconds"); MelderInfo_writeLine (L" First frame centred at: ", Melder_double (x1), L" seconds"); }
void structSpectrum :: v_info () { structData :: v_info (); MelderInfo_writeLine (L"Frequency domain:"); MelderInfo_writeLine (L" Lowest frequency: ", Melder_double (xmin), L" Hz"); MelderInfo_writeLine (L" Highest frequency: ", Melder_double (xmax), L" Hz"); MelderInfo_writeLine (L" Total bandwidth: ", Melder_double (xmax - xmin), L" Hz"); MelderInfo_writeLine (L"Frequency sampling:"); MelderInfo_writeLine (L" Number of frequency bands (bins): ", Melder_integer (nx)); MelderInfo_writeLine (L" Frequency step (bin width): ", Melder_double (dx), L" Hz"); MelderInfo_writeLine (L" First frequency band around (bin centre at): ", Melder_double (x1), L" Hz"); MelderInfo_writeLine (L"Total energy: ", Melder_single (Spectrum_getBandEnergy (this, 0.0, 0.0)), L" Pa2 sec"); }
void structLtas :: v_info () { double meanPowerDensity; structData :: v_info (); MelderInfo_writeLine1 (L"Frequency domain:"); MelderInfo_writeLine3 (L" Lowest frequency: ", Melder_double (xmin), L" Hz"); MelderInfo_writeLine3 (L" Highest frequency: ", Melder_double (xmax), L" Hz"); MelderInfo_writeLine3 (L" Total frequency domain: ", Melder_double (xmax - xmin), L" Hz"); MelderInfo_writeLine1 (L"Frequency sampling:"); MelderInfo_writeLine2 (L" Number of frequency bands: ", Melder_integer (nx)); MelderInfo_writeLine3 (L" Width of each band: ", Melder_double (dx), L" Hz"); MelderInfo_writeLine3 (L" First band centred at: ", Melder_double (x1), L" Hz"); meanPowerDensity = Sampled_getMean (this, xmin, xmax, 0, 1, FALSE); MelderInfo_writeLine3 (L"Total SPL: ", Melder_single (10.0 * log10 (meanPowerDensity * (xmax - xmin))), L" dB"); }
static void info (I) { iam (Ltas); double meanPowerDensity; classData -> info (me); MelderInfo_writeLine1 (L"Frequency domain:"); MelderInfo_writeLine3 (L" Lowest frequency: ", Melder_double (my xmin), L" Hz"); MelderInfo_writeLine3 (L" Highest frequency: ", Melder_double (my xmax), L" Hz"); MelderInfo_writeLine3 (L" Total frequency domain: ", Melder_double (my xmax - my xmin), L" Hz"); MelderInfo_writeLine1 (L"Frequency sampling:"); MelderInfo_writeLine2 (L" Number of frequency bands: ", Melder_integer (my nx)); MelderInfo_writeLine3 (L" Width of each band: ", Melder_double (my dx), L" Hz"); MelderInfo_writeLine3 (L" First band centred at: ", Melder_double (my x1), L" Hz"); meanPowerDensity = Sampled_getMean (me, my xmin, my xmax, 0, 1, FALSE); MelderInfo_writeLine3 (L"Total SPL: ", Melder_single (10 * log10 (meanPowerDensity * (my xmax - my xmin))), L" dB"); }
void TableOfReal_writeToHeaderlessSpreadsheetFile (TableOfReal me, MelderFile file) { try { autoMelderString buffer; MelderString_copy (& buffer, L"rowLabel"); for (long icol = 1; icol <= my numberOfColumns; icol ++) { MelderString_appendCharacter (& buffer, '\t'); wchar_t *s = my columnLabels [icol]; MelderString_append (& buffer, s != NULL && s [0] != '\0' ? s : L"?"); } MelderString_appendCharacter (& buffer, '\n'); for (long irow = 1; irow <= my numberOfRows; irow ++) { wchar_t *s = my rowLabels [irow]; MelderString_append (& buffer, s != NULL && s [0] != '\0' ? s : L"?"); for (long icol = 1; icol <= my numberOfColumns; icol ++) { MelderString_appendCharacter (& buffer, '\t'); double x = my data [irow] [icol]; MelderString_append (& buffer, Melder_double (x)); } MelderString_appendCharacter (& buffer, '\n'); } MelderFile_writeText (file, buffer.string, Melder_getOutputEncoding ()); } catch (MelderError) { Melder_throw (me, ": not saved to tab-separated file."); } }
int Praat_tests (int itest, wchar_t *arg1, wchar_t *arg2, wchar_t *arg3, wchar_t *arg4) { long i, n = wcstol (arg1, NULL, 10); double x; (void) arg1; (void) arg2; (void) arg3; (void) arg4; Melder_clearInfo (); Melder_stopwatch (); switch (itest) { case kPraatTests_CHECK_RANDOM_1009_2009: { NUMrandomRestart (310952); for (i = 1; i <= 1009 * 2009 - 100 + 1; i ++) x = NUMrandomFraction (); MelderInfo_writeLine1 (Melder_double (x)); } break; case kPraatTests_TIME_RANDOM_FRACTION: { for (i = 1; i <= n; i ++) (void) NUMrandomFraction (); } break; case kPraatTests_TIME_SORT: { long m = wcstol (arg2, NULL, 10); long *array = NUMlvector (1, m); for (i = 1; i <= m; i ++) array [i] = NUMrandomInteger (1, 100); Melder_stopwatch (); for (i = 1; i <= n; i ++) NUMsort_l (m, array); NUMlvector_free (array, 1); } break; } MelderInfo_writeLine2 (Melder_single (Melder_stopwatch () / n * 1e9), L" nanoseconds"); MelderInfo_close (); return 1; }
void structCrossCorrelationTables :: v_info () { structOrdered :: v_info (); CrossCorrelationTable thee = (CrossCorrelationTable) item[1]; MelderInfo_writeLine (L" Number of rows and columns: ", Melder_integer (thy numberOfRows)); for (long i = 1; i <= size; i++) { double dm = CrossCorrelationTable_getDiagonalityMeasure ( (CrossCorrelationTable) item[i]); MelderInfo_writeLine (L"Diagonality measure for item ", Melder_integer (i), L": ", Melder_double (dm)); } }
void structRegression :: v_info () { Regression_Parent :: v_info (); MelderInfo_writeLine1 (L"Factors:"); MelderInfo_writeLine2 (L" Number of factors: ", Melder_integer (parameters -> size)); for (long ivar = 1; ivar <= parameters -> size; ivar ++) { RegressionParameter parm = static_cast<RegressionParameter> (parameters -> item [ivar]); MelderInfo_writeLine4 (L" Factor ", Melder_integer (ivar), L": ", parm -> label); } MelderInfo_writeLine1 (L"Fitted coefficients:"); MelderInfo_writeLine2 (L" Intercept: ", Melder_double (intercept)); for (long ivar = 1; ivar <= parameters -> size; ivar ++) { RegressionParameter parm = static_cast<RegressionParameter> (parameters -> item [ivar]); MelderInfo_writeLine4 (L" Coefficient of factor ", parm -> label, L": ", Melder_double (parm -> value)); } MelderInfo_writeLine1 (L"Ranges of values:"); for (long ivar = 1; ivar <= parameters -> size; ivar ++) { RegressionParameter parm = static_cast<RegressionParameter> (parameters -> item [ivar]); MelderInfo_writeLine6 (L" Range of factor ", parm -> label, L": minimum ", Melder_double (parm -> minimum), L", maximum ", Melder_double (parm -> maximum)); } }
void structContingencyTable :: v_info () { structData :: v_info (); long ndf; double h, hx, hy, hygx, hxgy, uygx, uxgy, uxy, chisq; ContingencyTable_entropies (this, &h, &hx, &hy, &hygx, &hxgy, &uygx, &uxgy, &uxy); ContingencyTable_chisq (this, &chisq, &ndf); Melder_information (L"Number of rows: ", Melder_integer (numberOfRows)); Melder_information (L"Number of columns: ", Melder_integer (numberOfColumns)); Melder_information (L"Entropies (y is row variable):"); Melder_information (L" Total: ", Melder_double (h)); Melder_information (L" Y: ", Melder_double (hy)); Melder_information (L" X: ", Melder_double (hx)); Melder_information (L" Y given x: ", Melder_double (hygx)); Melder_information (L" X given y: ", Melder_double (hxgy)); Melder_information (L" Dependency of y on x: ", Melder_double (uygx)); Melder_information (L" Dependency of x on y: ", Melder_double (uxgy)); Melder_information (L" Symmetrical dependency: ", Melder_double (uxy)); Melder_information (L" Chi squared: ", Melder_double (chisq)); Melder_information (L" Degrees of freedom: ", Melder_integer (ndf)); Melder_information (L" Probability: ", Melder_double (ContingencyTable_chisqProbability (this))); }
void structCC :: v_info () { structData :: v_info (); MelderInfo_writeLine5 (L"Time domain:", Melder_double (xmin), L" to ", Melder_double (xmax), L" seconds"); MelderInfo_writeLine2 (L"Number of frames: ", Melder_integer (nx)); MelderInfo_writeLine3 (L"Time step: ", Melder_double (dx), L" seconds"); MelderInfo_writeLine3 (L"First frame at: ", Melder_double (x1), L" seconds"); MelderInfo_writeLine2 (L"Number of coefficients: ", Melder_integer (maximumNumberOfCoefficients)); MelderInfo_writeLine3 (L"Minimum frequency: ", Melder_double (fmin), L" Hz"); MelderInfo_writeLine3 (L"Maximum frequency: ", Melder_double (fmax), L" Hz"); }
Ltas Spectrum_to_Ltas (Spectrum me, double bandWidth) { Ltas thee = NULL; long numberOfBands = ceil ((my xmax - my xmin) / bandWidth), iband; if (bandWidth <= my dx) error3 (L"Bandwidth must be greater than ", Melder_double (my dx), L".") thee = Thing_new (Ltas); cherror Matrix_init (thee, my xmin, my xmax, numberOfBands, bandWidth, my xmin + 0.5 * bandWidth, 1, 1, 1, 1, 1); cherror for (iband = 1; iband <= numberOfBands; iband ++) { double fmin = thy xmin + (iband - 1) * bandWidth; double meanEnergyDensity = Sampled_getMean (me, fmin, fmin + bandWidth, 0, 1, FALSE); double meanPowerDensity = meanEnergyDensity * my dx; /* As an approximation for a division by the original duration. */ thy z [1] [iband] = meanPowerDensity == 0.0 ? -300.0 : 10 * log10 (meanPowerDensity / 4.0e-10); } end: iferror forget (thee); return thee; }
void structTransition :: v_writeText (MelderFile file) { texputi4 (file, numberOfStates, L"numberOfStates", 0,0,0,0,0); MelderFile_write1 (file, L"\nstateLabels []: "); if (numberOfStates < 1) MelderFile_write1 (file, L"(empty)"); MelderFile_write1 (file, L"\n"); for (long i = 1; i <= numberOfStates; i ++) { MelderFile_write1 (file, L"\""); if (stateLabels [i] != NULL) MelderFile_write1 (file, stateLabels [i]); MelderFile_write1 (file, L"\"\t"); } for (long i = 1; i <= numberOfStates; i ++) { MelderFile_write3 (file, L"\nstate [", Melder_integer (i), L"]:"); for (long j = 1; j <= numberOfStates; j ++) { MelderFile_write2 (file, L"\t", Melder_double (data [i] [j])); } } }
void structTableOfReal :: v_writeText (MelderFile file) { texputi4 (file, numberOfColumns, L"numberOfColumns", 0,0,0,0,0); MelderFile_write (file, L"\ncolumnLabels []: "); if (numberOfColumns < 1) MelderFile_write (file, L"(empty)"); MelderFile_write (file, L"\n"); for (long i = 1; i <= numberOfColumns; i ++) { fprintquotedstring (file, columnLabels [i]); MelderFile_writeCharacter (file, '\t'); } texputi4 (file, numberOfRows, L"numberOfRows", 0,0,0,0,0); for (long i = 1; i <= numberOfRows; i ++) { MelderFile_write (file, L"\nrow [", Melder_integer (i), L"]: "); fprintquotedstring (file, rowLabels [i]); for (long j = 1; j <= numberOfColumns; j ++) { double x = data [i] [j]; MelderFile_write (file, L"\t", Melder_double (x)); } } }
Table TableOfReal_to_Table (TableOfReal me, const wchar_t *labelOfFirstColumn) { try { autoTable thee = Table_createWithoutColumnNames (my numberOfRows, my numberOfColumns + 1); Table_setColumnLabel (thee.peek(), 1, labelOfFirstColumn); for (long icol = 1; icol <= my numberOfColumns; icol ++) { wchar_t *columnLabel = my columnLabels [icol]; thy columnHeaders [icol + 1]. label = Melder_wcsdup (columnLabel && columnLabel [0] ? columnLabel : L"?"); } for (long irow = 1; irow <= thy rows -> size; irow ++) { wchar_t *stringValue = my rowLabels [irow]; TableRow row = static_cast <TableRow> (thy rows -> item [irow]); row -> cells [1]. string = Melder_wcsdup (stringValue && stringValue [0] ? stringValue : L"?"); for (long icol = 1; icol <= my numberOfColumns; icol ++) { double numericValue = my data [irow] [icol]; row -> cells [icol + 1]. string = Melder_wcsdup (Melder_double (numericValue)); } } return thee.transfer(); } catch (MelderError) { Melder_throw (me, ": not converted to Table."); } }
void structLogisticRegression :: v_info () { LogisticRegression_Parent :: v_info (); MelderInfo_writeLine2 (L"Dependent 1: ", dependent1); MelderInfo_writeLine2 (L"Dependent 2: ", dependent2); MelderInfo_writeLine1 (L"Interpretation:"); MelderInfo_write6 (L" ln (P(", dependent2, L")/P(", dependent1, L")) " UNITEXT_ALMOST_EQUAL_TO L" ", Melder_fixed (intercept, 6)); for (long ivar = 1; ivar <= parameters -> size; ivar ++) { RegressionParameter parm = static_cast<RegressionParameter> (parameters -> item [ivar]); MelderInfo_write4 (parm -> value < 0.0 ? L" - " : L" + ", Melder_fixed (fabs (parm -> value), 6), L" * ", parm -> label); } MelderInfo_writeLine1 (NULL); MelderInfo_writeLine1 (L"Log odds ratios:"); for (long ivar = 1; ivar <= parameters -> size; ivar ++) { RegressionParameter parm = static_cast<RegressionParameter> (parameters -> item [ivar]); MelderInfo_writeLine4 (L" Log odds ratio of factor ", parm -> label, L": ", Melder_fixed ((parm -> maximum - parm -> minimum) * parm -> value, 6)); } MelderInfo_writeLine1 (L"Odds ratios:"); for (long ivar = 1; ivar <= parameters -> size; ivar ++) { RegressionParameter parm = static_cast<RegressionParameter> (parameters -> item [ivar]); MelderInfo_writeLine4 (L" Odds ratio of factor ", parm -> label, L": ", Melder_double (exp ((parm -> maximum - parm -> minimum) * parm -> value))); } }
const wchar_t * Melder_bigInteger (double value) { wchar_t *text; int trillions, billions, millions, thousands, units, firstDigitPrinted = FALSE; if (fabs (value) > 1e15) return Melder_double (value); if (++ ibuffer == NUMBER_OF_BUFFERS) ibuffer = 0; text = buffers [ibuffer]; text [0] = L'\0'; if (value < 0.0) { swprintf (text, MAXIMUM_NUMERIC_STRING_LENGTH, L"-"); value = - value; } trillions = floor (value / 1e12); value -= trillions * 1e12; billions = floor (value / 1e9); value -= billions * 1e9; millions = floor (value / 1e6); value -= millions * 1e6; thousands = floor (value / 1e3); value -= thousands * 1e3; units = value; if (trillions) { swprintf (text + wcslen (text), MAXIMUM_NUMERIC_STRING_LENGTH, L"%d,", trillions); firstDigitPrinted = TRUE; } if (billions || firstDigitPrinted) { swprintf (text + wcslen (text), MAXIMUM_NUMERIC_STRING_LENGTH, firstDigitPrinted ? L"%03d," : L"%d,", billions); firstDigitPrinted = TRUE; } if (millions || firstDigitPrinted) { swprintf (text + wcslen (text), MAXIMUM_NUMERIC_STRING_LENGTH, firstDigitPrinted ? L"%03d," : L"%d,", millions); firstDigitPrinted = TRUE; } if (thousands || firstDigitPrinted) { swprintf (text + wcslen (text), MAXIMUM_NUMERIC_STRING_LENGTH, firstDigitPrinted ? L"%03d," : L"%d,", thousands); firstDigitPrinted = TRUE; } swprintf (text + wcslen (text), MAXIMUM_NUMERIC_STRING_LENGTH, firstDigitPrinted ? L"%03d" : L"%d", units); return text; }
static void classMinimizer_after (I, Any aclosure) { iam (Minimizer); (void) aclosure; if (my success || ! my gmonitor) { return; } if (my start == 1) { wchar_t s[35]; Minimizer_drawHistory (me, my gmonitor, 0, my maxNumOfIterations, 0, 1.1 * my history[1], 1); swprintf (s, 35, L"Dimension of search space: %6ld", my nParameters); Graphics_textTop (my gmonitor, 0, s); } Graphics_setInner (my gmonitor); Graphics_line (my gmonitor, my iteration, my history[my iteration], my iteration, my history[my iteration]); Graphics_unsetInner (my gmonitor); Melder_monitor ( (double) (my iteration) / my maxNumOfIterations, L"Iterations: ", Melder_integer (my iteration), L", Function calls: ", Melder_integer (my funcCalls), L", Cost: ", Melder_double (my minimum)); }
const wchar_t * Melder_naturalLogarithm (double lnNumber) { if (lnNumber == NUMundefined) return L"--undefined--"; if (lnNumber == -INFINITY) return L"0"; double log10Number = lnNumber * NUMlog10e; if (log10Number < -41) { if (++ ibuffer == NUMBER_OF_BUFFERS) ibuffer = 0; long ceiling = ceil (log10Number); double remainder = log10Number - ceiling; double remainder10 = pow (10, remainder); while (remainder10 < 1.0) { remainder10 *= 10; ceiling --; } swprintf (buffers [ibuffer], MAXIMUM_NUMERIC_STRING_LENGTH, L"%.15g", remainder10); if (wcstod (buffers [ibuffer], NULL) != remainder10) { swprintf (buffers [ibuffer], MAXIMUM_NUMERIC_STRING_LENGTH, L"%.16g", remainder10); if (wcstod (buffers [ibuffer], NULL) != remainder10) swprintf (buffers [ibuffer], MAXIMUM_NUMERIC_STRING_LENGTH, L"%.17g", remainder10); } swprintf (buffers [ibuffer] + wcslen (buffers [ibuffer]), 100, L"e-%ld", ceiling); } else { return Melder_double (exp (lnNumber)); } return buffers [ibuffer]; }
GaussianMixture me = (structGaussianMixture *)ONLY_OBJECT; Melder_information2 (Melder_integer (my numberOfComponents), L" (= number of components)"); END DIRECT (GaussianMixture_getDimensionOfComponent) GaussianMixture me = (structGaussianMixture *)ONLY_OBJECT; Melder_information2 (Melder_integer (my dimension), L" (= dimension of component)"); END FORM (GaussianMixture_getProbabilityAtPosition, L"GaussianMixture: Get probability at position", 0) SENTENCE (L"Position", L"100.0 300.0") OK DO wchar_t *position = GET_STRING (L"Position"); double p = GaussianMixture_getProbabilityAtPosition_string ((structGaussianMixture *)ONLY_OBJECT, position); Melder_information3 (Melder_double (p), L" (= probability at position ", position); END FORM (GaussianMixture_splitComponent, L"GaussianMixture: Split component", L"GaussianMixture: Split component...") NATURAL (L"Component", L"1") OK DO if (! GaussianMixture_splitComponent ((structGaussianMixture *)ONLY (classGaussianMixture), GET_INTEGER (L"Component"))) return 0; END FORM (GaussianMixture_and_PCA_drawMarginalPdf, L"GaussianMixture & PCA: Draw pdf function", L"GaussianMixture: Draw marginal pdf...") INTEGER (L"X-dimension", L"1") REAL (L"left Horizontal range", L"0.0") REAL (L"right Horizontal range", L"0.0") REAL (L"left Vertical range", L"0.0") REAL (L"right Vertical range", L"0.0")
/* gain used as a constant amplitude multiplyer within a frame of duration my dx. future alternative: convolve gain with a smoother. */ Sound LPC_and_Sound_filter (LPC me, Sound thee, int useGain) { try { double xmin = my xmin > thy xmin ? my xmin : thy xmin; double xmax = my xmax < thy xmax ? my xmax : thy xmax; if (xmin >= xmax) { Melder_throw ("Domains of Sound [", Melder_double(thy xmin), ",", Melder_double(thy xmax), "] and LPC [", Melder_double(my xmin), ",", Melder_double(my xmax), "] do not overlap."); } // resample sound if samplings don't match autoSound source = 0; if (my samplingPeriod != thy dx) { source.reset (Sound_resample (thee, 1.0 / my samplingPeriod, 50)); thee = source.peek(); // reference copy; remove at end } autoSound him = Data_copy (thee); double *x = his z[1]; long ifirst = Sampled_xToHighIndex (thee, xmin); long ilast = Sampled_xToLowIndex (thee, xmax); for (long i = ifirst; i <= ilast; i++) { double t = his x1 + (i - 1) * his dx; /* Sampled_indexToX (him, i) */ long iFrame = floor ( (t - my x1) / my dx + 1.5); /* Sampled_xToNearestIndex (me, t) */ if (iFrame < 1) { continue; } if (iFrame > my nx) { break; } double *a = my d_frames[iFrame].a; long m = i > my d_frames[iFrame].nCoefficients ? my d_frames[iFrame].nCoefficients : i - 1; for (long j = 1; j <= m; j++) { x[i] -= a[j] * x[i - j]; } } // Make samples before first frame and after last frame zero. for (long i = 1; i < ifirst; i++) { x[i] = 0; } for (long i = ilast + 1; i <= his nx; i++) { x[i] = 0; } if (useGain) { for (long i = ifirst; i <= ilast; i++) { double t = his x1 + (i - 1) * his dx; /* Sampled_indexToX (him, i) */ double riFrame = (t - my x1) / my dx + 1; /* Sampled_xToIndex (me, t); */ long iFrame = floor (riFrame); double phase = riFrame - iFrame; if (iFrame < 0 || iFrame > my nx) { x[i] = 0; } else if (iFrame == 0) { x[i] *= sqrt (my d_frames[1].gain) * phase; } else if (iFrame == my nx) { x[i] *= sqrt (my d_frames[my nx].gain) * (1 - phase); } else x[i] *= phase * sqrt (my d_frames[iFrame + 1].gain) + (1 - phase) * sqrt (my d_frames[iFrame].gain); } } return him.transfer(); } catch (MelderError) { Melder_throw (thee, ": not filtered."); } }
Diagonalizer d = FIRST (Diagonalizer); CrossCorrelationTables ccts = FIRST (CrossCorrelationTables); Diagonalizer_and_CrossCorrelationTables_improveDiagonality (d, ccts, GET_INTEGER (L"Maximum number of iterations"), GET_REAL (L"Tolerance"), GET_INTEGER (L"Diagonalization method")); END FORM (CrossCorrelationTables_and_Diagonalizer_getDiagonalityMeasure, L"CrossCorrelationTables & Diagonalizer: Get diagonality measure", 0) NATURAL (L"First table", L"1") NATURAL (L"Last table", L"100") OK DO CrossCorrelationTables ccts = FIRST (CrossCorrelationTables); Diagonalizer d = FIRST (Diagonalizer); double dm = CrossCorrelationTables_and_Diagonalizer_getDiagonalityMeasure (ccts, d, 0, GET_INTEGER (L"First table"), GET_INTEGER (L"Last table")); Melder_information (Melder_double (dm), L" (= average sum of squared off-diagonal elements)"); END DIRECT (CrossCorrelationTable_and_Diagonalizer_diagonalize) CrossCorrelationTable cct = FIRST (CrossCorrelationTable); Diagonalizer d = FIRST (Diagonalizer); praat_new (CrossCorrelationTable_and_Diagonalizer_diagonalize (cct, d), cct->name, L"_", d->name); END DIRECT (CrossCorrelationTables_and_Diagonalizer_diagonalize) CrossCorrelationTables ccts = FIRST (CrossCorrelationTables); Diagonalizer d = FIRST (Diagonalizer); praat_new (CrossCorrelationTables_and_Diagonalizer_diagonalize (ccts, d), ccts->name, L"_", d->name); END FORM (CrossCorrelationTables_and_MixingMatrix_improveUnmixing, L"", 0)
Pattern thee = FIRST (Pattern); praat_new (FFNet_Pattern_to_Categories (me, thee, GET_INTEGER (L"Determine output category as")), my name, L"_", thy name); END /*********** FFNet Pattern Activation **********************************/ FORM (FFNet_Pattern_Activation_getCosts_total, L"FFNet & Pattern & Activation: Get total costs", L"FFNet & Pattern & Activation: Get total costs...") RADIO (L"Cost function", 1) RADIOBUTTON (L"Minimum-squared-error") RADIOBUTTON (L"Minimum-cross-entropy") OK DO FFNet me = FIRST (FFNet); Pattern thee = FIRST (Pattern); Activation him = FIRST (Activation); Melder_information (Melder_double (FFNet_Pattern_Activation_getCosts_total (me, thee, him, GET_INTEGER (L"Cost function")))); END FORM (FFNet_Pattern_Activation_getCosts_average, L"FFNet & Pattern & Activation: Get average costs", L"FFNet & Pattern & Activation: Get average costs...") RADIO (L"Cost function", 1) RADIOBUTTON (L"Minimum-squared-error") RADIOBUTTON (L"Minimum-cross-entropy") OK DO FFNet me = FIRST (FFNet); Pattern thee = FIRST (Pattern); Activation him = FIRST (Activation); Melder_information (Melder_double (FFNet_Pattern_Activation_getCosts_average (me, thee, him, GET_INTEGER (L"Cost function")))); END FORM (FFNet_Pattern_Activation_learnSD, L"FFNet & Pattern & Activation: Learn slow", 0)
void structERP :: f_drawScalp (Graphics graphics, double tmin, double tmax, double vmin, double vmax, bool garnish) { Graphics_setInner (graphics); Graphics_setWindow (graphics, -1.0, 1.0, -1.0, 1.0); //Graphics_setGrey (graphics, 1.0); //Graphics_fillRectangle (graphics, -1.1, 1.1, -1.01, 1.19); //Graphics_setColour (graphics, Graphics_BLACK); long numberOfDrawableChannels = this -> ny >= 64 && Melder_wcsequ (this -> d_channelNames [64], L"O2") ? 64 : this -> ny >= 32 && Melder_wcsequ (this -> d_channelNames [32], L"Cz") ? 32 : 0; BiosemiLocationData *biosemiLocationData = numberOfDrawableChannels == 64 ? biosemiCapCoordinates64 : numberOfDrawableChannels == 32 ? biosemiCapCoordinates32 : 0; for (long ichan = 1; ichan <= numberOfDrawableChannels; ichan ++) { double inclination = (double) biosemiLocationData [ichan]. inclination; double azimuth = (double) biosemiLocationData [ichan]. azimuth; bool rightHemisphere = inclination >= 0.0; double r = fabs (inclination / 115.0); double theta = rightHemisphere ? azimuth * (NUMpi / 180.0) : (azimuth + 180.0) * (NUMpi / 180.0); biosemiLocationData [ichan]. topX = r * cos (theta); biosemiLocationData [ichan]. topY = r * sin (theta); } long n = 201; double d = 2.0 / (n - 1); autoNUMvector <double> mean (1, numberOfDrawableChannels); for (long ichan = 1; ichan <= numberOfDrawableChannels; ichan ++) { mean [ichan] = tmin == tmax ? Sampled_getValueAtX (this, tmin, ichan, 0, true) : Vector_getMean (this, tmin, tmax, ichan); } autoNUMmatrix <double> image (1, n, 1, n); for (long irow = 1; irow <= n; irow ++) { double y = -1.0 + (irow - 1) * d; for (long icol = 1; icol <= n; icol ++) { double x = -1.0 + (icol - 1) * d; if (x * x + y * y <= 1.0) { double value = NUMundefined, sum = 0.0, weight = 0.0; for (long ichan = 1; ichan <= numberOfDrawableChannels; ichan ++) { double dx = x - biosemiLocationData [ichan]. topX; double dy = y - biosemiLocationData [ichan]. topY; double distance = sqrt (dx * dx + dy * dy); if (distance < 1e-12) { value = mean [ichan]; break; } distance = distance * distance * distance * distance * distance * distance; sum += mean [ichan] / distance; weight += 1.0 / distance; } if (value == NUMundefined) value = ( sum == 0.0 ? 0.0 : sum / weight ); image [irow] [icol] = value; } } } for (long irow = 1; irow <= n; irow ++) { double y = -1.0 + (irow - 1) * d; for (long icol = 1; icol <= n; icol ++) { double x = -1.0 + (icol - 1) * d; if (x * x + y * y > 1.0) { image [irow] [icol] = vmin; } } } Graphics_image (graphics, image.peek(), 1, n, -1.0-0.5/n, 1.0+0.5/n, 1, n, -1.0-0.5/n, 1.0+0.5/n, vmin, vmax); Graphics_setLineWidth (graphics, 2.0); /* * Nose. */ Graphics_setGrey (graphics, 0.5); {// scope double x [3] = { -0.08, 0.0, 0.08 }, y [3] = { 0.99, 1.18, 0.99 }; Graphics_fillArea (graphics, 3, x, y); } Graphics_setColour (graphics, Graphics_BLACK); Graphics_line (graphics, -0.08, 0.99, 0.0, 1.18); Graphics_line (graphics, 0.08, 0.99, 0.0, 1.18); /* * Ears. */ Graphics_setGrey (graphics, 0.5); Graphics_fillRectangle (graphics, -1.09, -1.00, -0.08, 0.08); Graphics_fillRectangle (graphics, 1.09, 1.00, -0.08, 0.08); Graphics_setColour (graphics, Graphics_BLACK); Graphics_line (graphics, -0.99, 0.08, -1.09, 0.08); Graphics_line (graphics, -1.09, 0.08, -1.09, -0.08); Graphics_line (graphics, -1.09, -0.08, -0.99, -0.08); Graphics_line (graphics, 0.99, 0.08, 1.09, 0.08); Graphics_line (graphics, 1.09, 0.08, 1.09, -0.08); Graphics_line (graphics, 1.09, -0.08, 0.99, -0.08); /* * Scalp. */ Graphics_ellipse (graphics, -1.0, 1.0, -1.0, 1.0); Graphics_setLineWidth (graphics, 1.0); Graphics_unsetInner (graphics); if (garnish) { autoNUMmatrix <double> legend (1, n, 1, 2); for (long irow = 1; irow <= n; irow ++) { for (long icol = 1; icol <= 2; icol ++) { legend [irow] [icol] = (irow - 1) / (n - 1.0); } } Graphics_image (graphics, legend.peek(), 1, 2, 0.78, 0.98, 1, n, -0.8, +0.8, 0.0, 1.0); Graphics_rectangle (graphics, 0.78, 0.98, -0.8, +0.8); Graphics_setTextAlignment (graphics, Graphics_RIGHT, Graphics_TOP); Graphics_text2 (graphics, 1.0, -0.8, Melder_double (vmin * 1e6), L" \\muV"); Graphics_setTextAlignment (graphics, Graphics_RIGHT, Graphics_BOTTOM); Graphics_text2 (graphics, 1.0, +0.8, Melder_double (vmax * 1e6), L" \\muV"); } }
void structParamCurve :: v_info () { double xmin = 1e300, xmax = -1e300, ymin = 1e300, ymax = -1e300; for (long i = 1; i <= x -> nx; i ++) { double value = x -> z [1] [i]; if (value < xmin) xmin = value; if (value > xmax) xmax = value; } for (long i = 1; i <= y -> nx; i ++) { double value = y -> z [1] [i]; if (value < ymin) ymin = value; if (value > ymax) ymax = value; } structData :: v_info (); MelderInfo_writeLine (L"Domain:"); MelderInfo_writeLine (L" tmin: ", Melder_double (xmin)); MelderInfo_writeLine (L" tmax: ", Melder_double (xmax)); MelderInfo_writeLine (L"x sampling:"); MelderInfo_writeLine (L" Number of values of t in x: ", Melder_double (x -> nx)); MelderInfo_writeLine (L" t step in x: ", Melder_double (x -> dx), L" (sampling rate ", Melder_double (1.0 / x -> dx), L")"); MelderInfo_writeLine (L" First t in x: ", Melder_double (x -> x1)); MelderInfo_writeLine (L"x values:"); MelderInfo_writeLine (L" Minimum x: ", Melder_double (xmin)); MelderInfo_writeLine (L" Maximum x: ", Melder_double (xmax)); MelderInfo_writeLine (L"y sampling:"); MelderInfo_writeLine (L" Number of values of t in y: ", Melder_double (y -> nx)); MelderInfo_writeLine (L" t step in y: ", Melder_double (y -> dx), L" (sampling rate ", Melder_double (1.0 / y -> dx), L")"); MelderInfo_writeLine (L" First t in y: ", Melder_double (y -> x1)); MelderInfo_writeLine (L"y values:"); MelderInfo_writeLine (L" Minimum y: ", Melder_double (ymin)); MelderInfo_writeLine (L" Maximum y: ", Melder_double (ymax)); }