Lines Matching +full:1 +full:p
21 * 1-pole filters based on code (c) 2000 Chris Bagwell <cbagwell@sprynet.com>
25 * low-pass: output[N] = input[N] * A + output[N-1] * B
27 * A = 1 - X
41 * high-pass: output[N] = A0 * input[N] + A1 * input[N-1] + B1 * output[N-1]
43 * A0 = (1 + X) / 2
44 * A1 = -(1 + X) / 2
69 return lsx_biquad_getopts(effp, argc, argv, 1, 1, 0, 1, 2, "", in hilo1_getopts()
75 priv_t * p = (priv_t *)effp->priv; in hilo2_getopts() local
76 if (argc > 1 && strcmp(argv[1], "-1") == 0) in hilo2_getopts()
77 return hilo1_getopts(effp, argc - 1, argv + 1); in hilo2_getopts()
78 if (argc > 1 && strcmp(argv[1], "-2") == 0) in hilo2_getopts()
80 p->width = sqrt(0.5); /* Default to Butterworth */ in hilo2_getopts()
81 return lsx_biquad_getopts(effp, argc, argv, 1, 2, 0, 1, 2, "qohk", in hilo2_getopts()
88 if (argc > 1 && strcmp(argv[1], "-c") == 0) in bandpass_getopts()
90 return lsx_biquad_getopts(effp, argc, argv, 2, 2, 0, 1, 2, "hkqob", type); in bandpass_getopts()
95 return lsx_biquad_getopts(effp, argc, argv, 2, 2, 0, 1, 2, "hkqob", filter_notch); in bandrej_getopts()
102 if (argc > 1 && strcmp(argv[1], "-1") == 0) in allpass_getopts()
104 else if (argc > 1 && strcmp(argv[1], "-2") == 0) in allpass_getopts()
106 m = 1 + (type == filter_APF); in allpass_getopts()
107 return lsx_biquad_getopts(effp, argc, argv, m, m, 0, 1, 2, "hkqo", type); in allpass_getopts()
112 priv_t * p = (priv_t *)effp->priv; in tone_getopts() local
113 p->width = 0.5; in tone_getopts()
114 p->fc = *effp->handler.name == 'b'? 100 : 3000; in tone_getopts()
115 return lsx_biquad_getopts(effp, argc, argv, 1, 3, 1, 2, 0, "shkqo", in tone_getopts()
121 return lsx_biquad_getopts(effp, argc, argv, 3, 3, 0, 1, 2, "qohk", filter_peakingEQ); in equalizer_getopts()
127 if (argc > 1 && strcmp(argv[1], "-n") == 0) in band_getopts()
129 return lsx_biquad_getopts(effp, argc, argv, 1, 2, 0, 1, 2, "hkqo", type); in band_getopts()
134 return lsx_biquad_getopts(effp, argc, argv, 0, 0, 0, 1, 2, "s", filter_deemph); in deemph_getopts()
139 priv_t * p = (priv_t *)effp->priv; in riaa_getopts() local
140 p->filter_type = filter_riaa; in riaa_getopts()
150 poly[0] = 1; in make_poly_from_roots()
151 poly[1] = -roots[0]; in make_poly_from_roots()
152 memset(poly + 2, 0, (num_roots + 1 - 2) * sizeof(*poly)); in make_poly_from_roots()
153 for (i = 1; i < num_roots; ++i) in make_poly_from_roots()
155 poly[j] -= poly[j - 1] * roots[i]; in make_poly_from_roots()
160 priv_t * p = (priv_t *)effp->priv; in start() local
163 if (p->filter_type == filter_deemph) { /* See deemph.plt for documentation */ in start()
165 p->fc = 5283; in start()
166 p->width = 0.4845; in start()
167 p->gain = -9.477; in start()
170 p->fc = 5356; in start()
171 p->width = 0.479; in start()
172 p->gain = -9.62; in start()
180 w0 = 2 * M_PI * p->fc / effp->in_signal.rate; in start()
181 A = exp(p->gain / 40 * log(10.)); in start()
182 alpha = 0, mult = dB_to_linear(max(p->gain, 0)); in start()
190 p->b0 = p->b1 = p->b2 = p->a1 = p->a2 = 0; in start()
191 p->a0 = 1; in start()
193 if (p->width) switch (p->width_type) { in start()
195 alpha = sin(w0)/2 * sqrt((A + 1/A)*(1/p->width - 1) + 2); in start()
199 alpha = sin(w0)/(2*p->width); in start()
203 alpha = sin(w0)*sinh(log(2.)/2 * p->width * w0/sin(w0)); in start()
207 alpha = sin(w0)/(2*p->fc/p->width); in start()
213 alpha = tan(M_PI * p->width / effp->in_signal.rate); in start()
216 switch (p->filter_type) { in start()
217 case filter_LPF: /* H(s) = 1 / (s^2 + s/Q + 1) */ in start()
218 p->b0 = (1 - cos(w0))/2; in start()
219 p->b1 = 1 - cos(w0); in start()
220 p->b2 = (1 - cos(w0))/2; in start()
221 p->a0 = 1 + alpha; in start()
222 p->a1 = -2*cos(w0); in start()
223 p->a2 = 1 - alpha; in start()
226 case filter_HPF: /* H(s) = s^2 / (s^2 + s/Q + 1) */ in start()
227 p->b0 = (1 + cos(w0))/2; in start()
228 p->b1 = -(1 + cos(w0)); in start()
229 p->b2 = (1 + cos(w0))/2; in start()
230 p->a0 = 1 + alpha; in start()
231 p->a1 = -2*cos(w0); in start()
232 p->a2 = 1 - alpha; in start()
235 case filter_BPF_CSG: /* H(s) = s / (s^2 + s/Q + 1) (constant skirt gain, peak gain = Q) */ in start()
236 p->b0 = sin(w0)/2; in start()
237 p->b1 = 0; in start()
238 p->b2 = -sin(w0)/2; in start()
239 p->a0 = 1 + alpha; in start()
240 p->a1 = -2*cos(w0); in start()
241 p->a2 = 1 - alpha; in start()
244 case filter_BPF: /* H(s) = (s/Q) / (s^2 + s/Q + 1) (constant 0 dB peak gain) */ in start()
245 p->b0 = alpha; in start()
246 p->b1 = 0; in start()
247 p->b2 = -alpha; in start()
248 p->a0 = 1 + alpha; in start()
249 p->a1 = -2*cos(w0); in start()
250 p->a2 = 1 - alpha; in start()
253 case filter_notch: /* H(s) = (s^2 + 1) / (s^2 + s/Q + 1) */ in start()
254 p->b0 = 1; in start()
255 p->b1 = -2*cos(w0); in start()
256 p->b2 = 1; in start()
257 p->a0 = 1 + alpha; in start()
258 p->a1 = -2*cos(w0); in start()
259 p->a2 = 1 - alpha; in start()
262 case filter_APF: /* H(s) = (s^2 - s/Q + 1) / (s^2 + s/Q + 1) */ in start()
263 p->b0 = 1 - alpha; in start()
264 p->b1 = -2*cos(w0); in start()
265 p->b2 = 1 + alpha; in start()
266 p->a0 = 1 + alpha; in start()
267 p->a1 = -2*cos(w0); in start()
268 p->a2 = 1 - alpha; in start()
271 case filter_peakingEQ: /* H(s) = (s^2 + s*(A/Q) + 1) / (s^2 + s/(A*Q) + 1) */ in start()
272 if (A == 1) in start()
274 p->b0 = 1 + alpha*A; in start()
275 p->b1 = -2*cos(w0); in start()
276 p->b2 = 1 - alpha*A; in start()
277 p->a0 = 1 + alpha/A; in start()
278 p->a1 = -2*cos(w0); in start()
279 p->a2 = 1 - alpha/A; in start()
282 case filter_lowShelf: /* H(s) = A * (s^2 + (sqrt(A)/Q)*s + A)/(A*s^2 + (sqrt(A)/Q)*s + 1) */ in start()
283 if (A == 1) in start()
285 p->b0 = A*( (A+1) - (A-1)*cos(w0) + 2*sqrt(A)*alpha ); in start()
286 p->b1 = 2*A*( (A-1) - (A+1)*cos(w0) ); in start()
287 p->b2 = A*( (A+1) - (A-1)*cos(w0) - 2*sqrt(A)*alpha ); in start()
288 p->a0 = (A+1) + (A-1)*cos(w0) + 2*sqrt(A)*alpha; in start()
289 p->a1 = -2*( (A-1) + (A+1)*cos(w0) ); in start()
290 p->a2 = (A+1) + (A-1)*cos(w0) - 2*sqrt(A)*alpha; in start()
295 case filter_highShelf: /* H(s) = A * (A*s^2 + (sqrt(A)/Q)*s + 1)/(s^2 + (sqrt(A)/Q)*s + A) */ in start()
298 p->b0 = A*( (A+1) + (A-1)*cos(w0) + 2*sqrt(A)*alpha ); in start()
299 p->b1 = -2*A*( (A-1) + (A+1)*cos(w0) ); in start()
300 p->b2 = A*( (A+1) + (A-1)*cos(w0) - 2*sqrt(A)*alpha ); in start()
301 p->a0 = (A+1) - (A-1)*cos(w0) + 2*sqrt(A)*alpha; in start()
302 p->a1 = 2*( (A-1) - (A+1)*cos(w0) ); in start()
303 p->a2 = (A+1) - (A-1)*cos(w0) - 2*sqrt(A)*alpha; in start()
307 p->a1 = -exp(-w0); in start()
308 p->b0 = 1 + p->a1; in start()
312 p->a1 = -exp(-w0); in start()
313 p->b0 = (1 - p->a1)/2; in start()
314 p->b1 = -p->b0; in start()
319 if (!p->width) in start()
320 p->width = p->fc / 2; in start()
321 bw_Hz = p->width_type == width_Q? p->fc / p->width : in start()
322 p->width_type == width_bw_Hz? p->width : in start()
323 p->fc * (pow(2., p->width) - 1) * pow(2., -0.5 * p->width); /* bw_oct */ in start()
328 case filter_AP1: /* Experimental 1-pole all-pass from Tom Erbe @ UCSD */ in start()
329 p->b0 = exp(-w0); in start()
330 p->b1 = -1; in start()
331 p->a1 = -exp(-w0); in start()
335 p->b0 = 1 - sin(w0); in start()
336 p->b1 = -2 * cos(w0); in start()
337 p->b2 = 1 + sin(w0); in start()
338 p->a0 = 1 + sin(w0); in start()
339 p->a1 = -2 * cos(w0); in start()
340 p->a2 = 1 - sin(w0); in start()
347 make_poly_from_roots(zeros, (size_t)2, &p->b0); in start()
348 make_poly_from_roots(poles, (size_t)2, &p->a0); in start()
353 make_poly_from_roots(zeros, (size_t)2, &p->b0); in start()
354 make_poly_from_roots(poles, (size_t)2, &p->a0); in start()
359 make_poly_from_roots(zeros, (size_t)2, &p->b0); in start()
360 make_poly_from_roots(poles, (size_t)2, &p->a0); in start()
365 make_poly_from_roots(zeros, (size_t)2, &p->b0); in start()
366 make_poly_from_roots(poles, (size_t)2, &p->a0); in start()
371 make_poly_from_roots(zeros, (size_t)2, &p->b0); in start()
372 make_poly_from_roots(poles, (size_t)2, &p->a0); in start()
378 { /* Normalise to 0dB at 1kHz (Thanks to Glenn Davis) */ in start()
380 double b_re = p->b0 + p->b1 * cos(-y) + p->b2 * cos(-2 * y); in start()
381 double a_re = p->a0 + p->a1 * cos(-y) + p->a2 * cos(-2 * y); in start()
382 double b_im = p->b1 * sin(-y) + p->b2 * sin(-2 * y); in start()
383 double a_im = p->a1 * sin(-y) + p->a2 * sin(-2 * y); in start()
384 double g = 1 / sqrt((sqr(b_re) + sqr(b_im)) / (sqr(a_re) + sqr(a_im))); in start()
385 p->b0 *= g; p->b1 *= g; p->b2 *= g; in start()
387 mult = (p->b0 + p->b1 + p->b2) / (p->a0 + p->a1 + p->a2); in start()
406 BIQUAD_EFFECT(highpass, hilo2, "[-1|-2] frequency [width[q|o|h|k](0.707q)]", 0)
407 BIQUAD_EFFECT(lowpass, hilo2, "[-1|-2] frequency [width[q|o|h|k]](0.707q)", 0)