Lines Matching full:p
44 case c: p->name = lsx_parse_frequency(optstate.arg, &parseIndex); \
45 if (p->name < min || *parseIndex) return lsx_usage(effp); \
50 priv_t * p = (priv_t *)effp->priv; in create() local
51 #define opt_str "+b:N:n:r:f:m:M:h:l:H:L:T:t:s:g:p:" in create()
56 p->bootTime = .35; in create()
57 p->noiseTcUp = .1; in create()
58 p->noiseTcDown = .01; in create()
59 p->noiseReductionAmount = 1.35; in create()
61 p->measureFreq = 20; in create()
62 p->measureDuration = 2 / p->measureFreq; /* 50% overlap */ in create()
63 p->measureTc = .4; in create()
65 p->hpFilterFreq = 50; in create()
66 p->lpFilterFreq = 6000; in create()
67 p->hpLifterFreq = 150; in create()
68 p->lpLifterFreq = 2000; in create()
70 p->triggerTc = .25; in create()
71 p->triggerLevel = 7; in create()
73 p->searchTime = 1; in create()
74 p->gapTime = .25; in create()
93 GETOPT_NUMERIC(optstate, 'p', preTriggerTime, 0 , 4) in create()
101 priv_t * p = (priv_t *)effp->priv; in start() local
104 fixedPreTriggerLen_ns = p->preTriggerTime * effp->in_signal.rate + .5; in start()
107 p->measureLen_ws = effp->in_signal.rate * p->measureDuration + .5; in start()
108 p->measureLen_ns = p->measureLen_ws * effp->in_signal.channels; in start()
109 for (p->dftLen_ws = 16; p->dftLen_ws < p->measureLen_ws; p->dftLen_ws <<= 1); in start()
110 lsx_debug("dftLen_ws=%u measureLen_ws=%u", p->dftLen_ws, p->measureLen_ws); in start()
112 p->measurePeriod_ns = effp->in_signal.rate / p->measureFreq + .5; in start()
113 p->measurePeriod_ns *= effp->in_signal.channels; in start()
114 p->measuresLen = ceil(p->searchTime * p->measureFreq); in start()
115 searchPreTriggerLen_ns = p->measuresLen * p->measurePeriod_ns; in start()
116 p->gapLen = p->gapTime * p->measureFreq + .5; in start()
118 p->samplesLen_ns = in start()
119 fixedPreTriggerLen_ns + searchPreTriggerLen_ns + p->measureLen_ns; in start()
120 lsx_Calloc(p->samples, p->samplesLen_ns); in start()
122 lsx_Calloc(p->channels, effp->in_signal.channels); in start()
124 chan_t * c = &p->channels[i]; in start()
125 lsx_Calloc(c->dftBuf, p->dftLen_ws); in start()
126 lsx_Calloc(c->spectrum, p->dftLen_ws); in start()
127 lsx_Calloc(c->noiseSpectrum, p->dftLen_ws); in start()
128 lsx_Calloc(c->measures, p->measuresLen); in start()
131 lsx_Calloc(p->spectrumWindow, p->measureLen_ws); in start()
132 for (i = 0; i < p->measureLen_ws; ++i) in start()
133 p->spectrumWindow[i] = -2./ SOX_SAMPLE_MIN / sqrt((double)p->measureLen_ws); in start()
134 lsx_apply_hann(p->spectrumWindow, (int)p->measureLen_ws); in start()
136 p->spectrumStart = p->hpFilterFreq / effp->in_signal.rate * p->dftLen_ws + .5; in start()
137 p->spectrumStart = max(p->spectrumStart, 1); in start()
138 p->spectrumEnd = p->lpFilterFreq / effp->in_signal.rate * p->dftLen_ws + .5; in start()
139 p->spectrumEnd = min(p->spectrumEnd, p->dftLen_ws / 2); in start()
141 lsx_Calloc(p->cepstrumWindow, p->spectrumEnd - p->spectrumStart); in start()
142 for (i = 0; i < p->spectrumEnd - p->spectrumStart; ++i) in start()
143 p->cepstrumWindow[i] = 2 / sqrt((double)p->spectrumEnd - p->spectrumStart); in start()
144 lsx_apply_hann(p->cepstrumWindow,(int)(p->spectrumEnd - p->spectrumStart)); in start()
146 p->cepstrumStart = ceil(effp->in_signal.rate * .5 / p->lpLifterFreq); in start()
147 p->cepstrumEnd = floor(effp->in_signal.rate * .5 / p->hpLifterFreq); in start()
148 p->cepstrumEnd = min(p->cepstrumEnd, p->dftLen_ws / 4); in start()
149 if (p->cepstrumEnd <= p->cepstrumStart) in start()
152 p->noiseTcUpMult = exp(-1 / (p->noiseTcUp * p->measureFreq)); in start()
153 p->noiseTcDownMult = exp(-1 / (p->noiseTcDown * p->measureFreq)); in start()
154 p->measureTcMult = exp(-1 / (p->measureTc * p->measureFreq)); in start()
155 p->triggerMeasTcMult = exp(-1 / (p->triggerTc * p->measureFreq)); in start()
157 p->bootCountMax = p->bootTime * p->measureFreq - .5; in start()
158 p->measureTimer_ns = p->measureLen_ns; in start()
159 p->bootCount = p->measuresIndex = p->flushedLen_ns = p->samplesIndex_ns = 0; in start()
168 priv_t * p = (priv_t *)effp->priv; in flowFlush() local
169 size_t odone = min(p->samplesLen_ns - p->flushedLen_ns, *olen); in flowFlush()
170 size_t odone1 = min(odone, p->samplesLen_ns - p->samplesIndex_ns); in flowFlush()
172 memcpy(obuf, p->samples + p->samplesIndex_ns, odone1 * sizeof(*obuf)); in flowFlush()
173 if ((p->samplesIndex_ns += odone1) == p->samplesLen_ns) { in flowFlush()
174 memcpy(obuf + odone1, p->samples, (odone - odone1) * sizeof(*obuf)); in flowFlush()
175 p->samplesIndex_ns = odone - odone1; in flowFlush()
177 if ((p->flushedLen_ns += odone) == p->samplesLen_ns) { in flowFlush()
188 priv_t * p, chan_t * c, size_t index_ns, unsigned step_ns, int bootCount) in measure() argument
193 for (i = 0; i < p->measureLen_ws; ++i, index_ns = (index_ns + step_ns) % p->samplesLen_ns) in measure()
194 c->dftBuf[i] = p->samples[index_ns] * p->spectrumWindow[i]; in measure()
195 memset(c->dftBuf + i, 0, (p->dftLen_ws - i) * sizeof(*c->dftBuf)); in measure()
196 lsx_safe_rdft((int)p->dftLen_ws, 1, c->dftBuf); in measure()
198 memset(c->dftBuf, 0, p->spectrumStart * sizeof(*c->dftBuf)); in measure()
199 for (i = p->spectrumStart; i < p->spectrumEnd; ++i) { in measure()
201 mult = bootCount >= 0? bootCount / (1. + bootCount) : p->measureTcMult; in measure()
205 d > c->noiseSpectrum[i]? p->noiseTcUpMult : p->noiseTcDownMult; in measure()
207 d = sqrt(max(0, d - p->noiseReductionAmount * c->noiseSpectrum[i])); in measure()
208 c->dftBuf[i] = d * p->cepstrumWindow[i - p->spectrumStart]; in measure()
210 memset(c->dftBuf + i, 0, ((p->dftLen_ws >> 1) - i) * sizeof(*c->dftBuf)); in measure()
211 lsx_safe_rdft((int)p->dftLen_ws >> 1, 1, c->dftBuf); in measure()
213 for (i = p->cepstrumStart; i < p->cepstrumEnd; ++i) in measure()
215 result = log(result / (p->cepstrumEnd - p->cepstrumStart)); in measure()
222 priv_t * p = (priv_t *)effp->priv; in flowTrigger() local
227 p->measureTimer_ns -= effp->in_signal.channels; in flowTrigger()
229 chan_t * c = &p->channels[i]; in flowTrigger()
230 p->samples[p->samplesIndex_ns++] = *ibuf++; in flowTrigger()
231 if (!p->measureTimer_ns) { in flowTrigger()
232 size_t x = (p->samplesIndex_ns + p->samplesLen_ns - p->measureLen_ns) % p->samplesLen_ns; in flowTrigger()
233 double meas = measure(p, c, x, effp->in_signal.channels, p->bootCount); in flowTrigger()
234 c->measures[p->measuresIndex] = meas; in flowTrigger()
235 c->meanMeas = c->meanMeas * p->triggerMeasTcMult + in flowTrigger()
236 meas *(1 - p->triggerMeasTcMult); in flowTrigger()
238 if (hasTriggered |= c->meanMeas >= p->triggerLevel) { in flowTrigger()
239 unsigned n = p->measuresLen, k = p->measuresIndex; in flowTrigger()
242 if (c->measures[k] >= p->triggerLevel && j <= jTrigger + p->gapLen) in flowTrigger()
253 if (p->samplesIndex_ns == p->samplesLen_ns) in flowTrigger()
254 p->samplesIndex_ns = 0; in flowTrigger()
255 if (!p->measureTimer_ns) { in flowTrigger()
256 p->measureTimer_ns = p->measurePeriod_ns; in flowTrigger()
257 ++p->measuresIndex; in flowTrigger()
258 p->measuresIndex %= p->measuresLen; in flowTrigger()
259 if (p->bootCount >= 0) in flowTrigger()
260 p->bootCount = p->bootCount == p->bootCountMax? -1 : p->bootCount + 1; in flowTrigger()
265 p->flushedLen_ns = (p->measuresLen - numMeasuresToFlush) * p->measurePeriod_ns; in flowTrigger()
266 p->samplesIndex_ns = (p->samplesIndex_ns + p->flushedLen_ns) % p->samplesLen_ns; in flowTrigger()
283 priv_t * p = (priv_t *)effp->priv; in stop() local
287 chan_t * c = &p->channels[i]; in stop()
293 free(p->channels); in stop()
294 free(p->cepstrumWindow); in stop()
295 free(p->spectrumWindow); in stop()
296 free(p->samples); in stop()
312 "\t-p pre-trigger-time (0 s)", in lsx_vad_effect_fn()