Deleted Added
full compact
feeder_rate_mkfilter.awk (193889) feeder_rate_mkfilter.awk (194233)
1#!/usr/bin/awk -f
2#
3# Copyright (c) 2007-2009 Ariff Abdullah <ariff@FreeBSD.org>
4# All rights reserved.
5#
6# Redistribution and use in source and binary forms, with or without
7# modification, are permitted provided that the following conditions
8# are met:

--- 10 unchanged lines hidden (view full) ---

19# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25# SUCH DAMAGE.
26#
1#!/usr/bin/awk -f
2#
3# Copyright (c) 2007-2009 Ariff Abdullah <ariff@FreeBSD.org>
4# All rights reserved.
5#
6# Redistribution and use in source and binary forms, with or without
7# modification, are permitted provided that the following conditions
8# are met:

--- 10 unchanged lines hidden (view full) ---

19# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25# SUCH DAMAGE.
26#
27# $FreeBSD: head/sys/tools/sound/feeder_rate_mkfilter.awk 193889 2009-06-10 06:49:45Z ariff $
27# $FreeBSD: head/sys/tools/sound/feeder_rate_mkfilter.awk 194233 2009-06-15 04:31:34Z ariff $
28#
29
30#
31# FIR filter design by windowing method. This might become one of the
32# funniest joke I've ever written due to too many tricks being applied to
33# ensure maximum precision (well, in fact this is already have the same
34# precision granularity compared to its C counterpart). Nevertheless, it's
35# working, precise, dynamically tunable based on "presets".

--- 338 unchanged lines hidden (view full) ---

374 return (nwing);
375}
376
377function filter_parse(s, a, i, attn, alen)
378{
379 split(s, a, ":");
380 alen = length(a);
381
28#
29
30#
31# FIR filter design by windowing method. This might become one of the
32# funniest joke I've ever written due to too many tricks being applied to
33# ensure maximum precision (well, in fact this is already have the same
34# precision granularity compared to its C counterpart). Nevertheless, it's
35# working, precise, dynamically tunable based on "presets".

--- 338 unchanged lines hidden (view full) ---

374 return (nwing);
375}
376
377function filter_parse(s, a, i, attn, alen)
378{
379 split(s, a, ":");
380 alen = length(a);
381
382 if (alen > 0 && a[1] == "OVERSAMPLING_FACTOR") {
383 if (alen != 2)
384 return (-1);
385 init_drift(floor(a[2]));
386 return (-1);
387 }
388
382 if (alen == 1 || alen == 2) {
389 if (alen == 1 || alen == 2) {
383 if (a[1] == "nyquist_hover") {
390 if (a[1] == "NYQUIST_HOVER") {
384 i = 1.0 * a[2];
385 Z_NYQUIST_HOVER = (i > 0.0 && i < 1.0) ? i : 0.0;
386 return (-1);
387 }
388 i = 1;
389 if (alen == 1) {
390 attn = Z_KAISER_ATTN_DEFAULT;
391 Popts["beta"] = Z_KAISER_BETA_DEFAULT;

--- 96 unchanged lines hidden (view full) ---

488 lerp = sprintf("(%s) >> %d", lerp, 32 - bit);
489 }
490
491 printf("#define Z_LINEAR_INTERPOLATE_%d(z, x, y)" \
492 "\t\t\t\t%s\\\n\t((x) + (%s))\n", \
493 bit, (bit < 10) ? "\t" : "", lerp);
494}
495
391 i = 1.0 * a[2];
392 Z_NYQUIST_HOVER = (i > 0.0 && i < 1.0) ? i : 0.0;
393 return (-1);
394 }
395 i = 1;
396 if (alen == 1) {
397 attn = Z_KAISER_ATTN_DEFAULT;
398 Popts["beta"] = Z_KAISER_BETA_DEFAULT;

--- 96 unchanged lines hidden (view full) ---

495 lerp = sprintf("(%s) >> %d", lerp, 32 - bit);
496 }
497
498 printf("#define Z_LINEAR_INTERPOLATE_%d(z, x, y)" \
499 "\t\t\t\t%s\\\n\t((x) + (%s))\n", \
500 bit, (bit < 10) ? "\t" : "", lerp);
501}
502
503function init_drift(drift, xdrift)
504{
505 xdrift = floor(drift);
506
507 if (Z_DRIFT_SHIFT != -1) {
508 if (xdrift != Z_DRIFT_SHIFT)
509 printf("#error Z_DRIFT_SHIFT reinitialize!\n");
510 return;
511 }
512
513 #
514 # Initialize filter oversampling factor, or in other word
515 # Z_DRIFT_SHIFT.
516 #
517 if (xdrift < 0)
518 xdrift = 1;
519 else if (xdrift > 31)
520 xdrift = 31;
521
522 Z_DRIFT_SHIFT = xdrift;
523 Z_DRIFT_ONE = shl(1, Z_DRIFT_SHIFT);
524
525 Z_SHIFT = Z_FULL_SHIFT - Z_DRIFT_SHIFT;
526 Z_ONE = shl(1, Z_SHIFT);
527 Z_MASK = Z_ONE - 1;
528}
529
496BEGIN {
497 I0_EPSILON = 1e-21;
498 M_PI = atan2(0.0, -1.0);
499
500 INT32_MAX = 1 + ((shl(1, 30) - 1) * 2);
501 INT32_MIN = -1 - INT32_MAX;
502
503 Z_COEFF_OFFSET = 5;
504
505 Z_FULL_SHIFT = 30;
506 Z_FULL_ONE = shl(1, Z_FULL_SHIFT);
507
508 Z_COEFF_SHIFT = 28;
509 Z_COEFF_ONE = shl(1, Z_COEFF_SHIFT);
510
511 Z_INTERP_COEFF_SHIFT = 24;
512 Z_INTERP_COEFF_ONE = shl(1, Z_INTERP_COEFF_SHIFT);
513
530BEGIN {
531 I0_EPSILON = 1e-21;
532 M_PI = atan2(0.0, -1.0);
533
534 INT32_MAX = 1 + ((shl(1, 30) - 1) * 2);
535 INT32_MIN = -1 - INT32_MAX;
536
537 Z_COEFF_OFFSET = 5;
538
539 Z_FULL_SHIFT = 30;
540 Z_FULL_ONE = shl(1, Z_FULL_SHIFT);
541
542 Z_COEFF_SHIFT = 28;
543 Z_COEFF_ONE = shl(1, Z_COEFF_SHIFT);
544
545 Z_INTERP_COEFF_SHIFT = 24;
546 Z_INTERP_COEFF_ONE = shl(1, Z_INTERP_COEFF_SHIFT);
547
514 #
515 # Filter oversampling factor.
516 #
517 # 6, 7, or 8 depending on how much you can trade off between memory
518 # consumption (due to large tables) and precision / quality.
519 #
520 Z_DRIFT_SHIFT = 7;
521 Z_DRIFT_ONE = shl(1, Z_DRIFT_SHIFT);
522
523 Z_SHIFT = Z_FULL_SHIFT - Z_DRIFT_SHIFT;
524 Z_ONE = shl(1, Z_SHIFT);
525 Z_MASK = Z_ONE - 1;
526
527 Z_LINEAR_FULL_SHIFT = Z_FULL_SHIFT;
528 Z_LINEAR_FULL_ONE = shl(1, Z_LINEAR_FULL_SHIFT);
529 Z_LINEAR_SHIFT = 8;
530 Z_LINEAR_UNSHIFT = Z_LINEAR_FULL_SHIFT - Z_LINEAR_SHIFT;
531 Z_LINEAR_ONE = shl(1, Z_LINEAR_SHIFT)
532
548 Z_LINEAR_FULL_SHIFT = Z_FULL_SHIFT;
549 Z_LINEAR_FULL_ONE = shl(1, Z_LINEAR_FULL_SHIFT);
550 Z_LINEAR_SHIFT = 8;
551 Z_LINEAR_UNSHIFT = Z_LINEAR_FULL_SHIFT - Z_LINEAR_SHIFT;
552 Z_LINEAR_ONE = shl(1, Z_LINEAR_SHIFT)
553
554 Z_DRIFT_SHIFT_DEFAULT = 5;
555 Z_DRIFT_SHIFT = -1;
533 # meehhhh... let it overflow...
534 #Z_SCALE_SHIFT = 31;
535 #Z_SCALE_ONE = shl(1, Z_SCALE_SHIFT);
536
537 Z_WINDOW_KAISER = 0.0;
538 Z_WINDOW_BLACKMAN_NUTTALL = -1.0;
539 Z_WINDOW_NUTTALL = -2.0;
540 Z_WINDOW_BLACKMAN_HARRIS = -3.0;

--- 49 unchanged lines hidden (view full) ---

590 printf("%s%s", (i == 1) ? "" : " ", ARGV[i]);
591 printf("\"\n\n");
592 imp["quality"] = 2;
593 for (i = 1; i < ARGC; i++) {
594 if (filter_parse(ARGV[i]) == 0) {
595 beta = Popts["beta"];
596 nmult = Popts["nmult"];
597 rolloff = Popts["rolloff"];
556 # meehhhh... let it overflow...
557 #Z_SCALE_SHIFT = 31;
558 #Z_SCALE_ONE = shl(1, Z_SCALE_SHIFT);
559
560 Z_WINDOW_KAISER = 0.0;
561 Z_WINDOW_BLACKMAN_NUTTALL = -1.0;
562 Z_WINDOW_NUTTALL = -2.0;
563 Z_WINDOW_BLACKMAN_HARRIS = -3.0;

--- 49 unchanged lines hidden (view full) ---

613 printf("%s%s", (i == 1) ? "" : " ", ARGV[i]);
614 printf("\"\n\n");
615 imp["quality"] = 2;
616 for (i = 1; i < ARGC; i++) {
617 if (filter_parse(ARGV[i]) == 0) {
618 beta = Popts["beta"];
619 nmult = Popts["nmult"];
620 rolloff = Popts["rolloff"];
621 if (Z_DRIFT_SHIFT == -1)
622 init_drift(Z_DRIFT_SHIFT_DEFAULT);
598 ztab[imp["quality"] - 2] = \
599 mkfilter(imp, nmult, rolloff, beta, Z_DRIFT_ONE);
600 imp["quality"]++;
601 }
602 }
603
604 printf("\n");
605 #

--- 162 unchanged lines hidden ---
623 ztab[imp["quality"] - 2] = \
624 mkfilter(imp, nmult, rolloff, beta, Z_DRIFT_ONE);
625 imp["quality"]++;
626 }
627 }
628
629 printf("\n");
630 #

--- 162 unchanged lines hidden ---