1 #ifndef _Ltas_h_
2 #define _Ltas_h_
3 /* Ltas.h
4  *
5  * Copyright (C) 1992-2011,2015 Paul Boersma
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.
15  * See the GNU 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 "Spectrum.h"
22 #include "Sound.h"
23 #include "PointProcess.h"
24 #include "Collection.h"
25 
Thing_define(Ltas,Vector)26 Thing_define (Ltas, Vector) {
27 	void v_info ()
28 		override;
29 	int v_domainQuantity ()
30 		override { return MelderQuantity_FREQUENCY_HERTZ; }
31 	double v_convertStandardToSpecialUnit (double value, integer level, int unit)
32 		override;
33 	double v_convertSpecialToStandardUnit (double value, integer level, int unit)
34 		override;
35 };
36 
37 /*
38 	Attributes:
39 		xmin				// Minimum frequency (Hz).
40 		xmax > xmin		// Maximum frequency (Hz).
41 		nx >= 1			// Number of bands.
42 		dx > 0.0			// Band width (Hz).
43 		x1				// Centre of first band (Hz).
44 		ymin, ymax, dy, y1 = 1.0
45 		ny = 1
46 		z [1] [1..nx]		// The intensity per band, in dB/Hz.
47 */
48 
49 autoLtas Ltas_create (integer nx, double dx);
50 /*
51 	Function:
52 		create an Ltas.
53 	Preconditions:
54 		nx >= 1;
55 		dx > 0.0;
56 	Postconditions:
57 		my xmin == 0.0;              my ymin == 1;
58 		my xmax == nx * dx;        my ymax == 1;
59 		my nx == nx;               my ny == 1;
60 		my dx == dx;               my dy == 1;
61 		my x1 == 0.5 * dx;         my y1 == 1;
62 		my z [1] [1..nx] == 1e-4; // straight tube, area 1 cm2.
63  */
64 
65 void Ltas_draw (Ltas me, Graphics g, double fmin, double fmax,
66 	double minimum, double maximum, bool garnish, conststring32 method);
67 
68 autoMatrix Ltas_to_Matrix (Ltas me);
69 autoLtas Matrix_to_Ltas (Matrix me);
70 
Collection_define(LtasBag,CollectionOf,Ltas)71 Collection_define (LtasBag, CollectionOf, Ltas) {
72 };
73 
74 autoLtas Ltases_merge (LtasBag ltases);
75 autoLtas Ltases_average (LtasBag ltases);
76 
77 autoLtas Ltas_computeTrendLine (Ltas me, double fmin, double fmax);
78 autoLtas Ltas_subtractTrendLine (Ltas me, double fmin, double fmax);
79 
80 /* Direct computations. */
81 
82 autoLtas Spectrum_to_Ltas (Spectrum me, double bandwidth);
83 autoLtas Spectrum_to_Ltas_1to1 (Spectrum me);
84 autoLtas PointProcess_Sound_to_Ltas (PointProcess pulses, Sound sound,
85 	double maximumFrequency, double bandWidth,
86 	double shortestPeriod, double longestPeriod, double maximumPeriodFactor);
87 autoLtas PointProcess_Sound_to_Ltas_harmonics (PointProcess pulses, Sound sound,
88 	integer maximumHarmonic,
89 	double shortestPeriod, double longestPeriod, double maximumPeriodFactor);
90 
91 /* Shortcuts. */
92 
93 autoLtas Sound_to_Ltas (Sound me, double bandwidth);
94 autoLtas Sound_to_Ltas_pitchCorrected (Sound sound, double minimumPitch, double maximumPitch,
95 	double maximumFrequency, double bandWidth,
96 	double shortestPeriod, double longestPeriod, double maximumPeriodFactor);
97 
98 double Ltas_getSlope (Ltas me, double f1min, double f1max, double f2min, double f2max, int averagingUnits);
99 double Ltas_getLocalPeakHeight (Ltas me, double environmentMin, double environmentMax, double peakMin, double peakMax, int averagingUnits);
100 
101 /* End of file Ltas.h */
102 #endif
103