This file is indexed.

/usr/share/nickle/examples/kaiser.5c is in nickle 2.77-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
/*
 * Kaiser Window digital filter
 *
 * Copyright © 2001, Keith Packard
 * All Rights Reserved.  See the file COPYING in this directory
 * for licensing information.
 */

real i0(real x)
{
    real    ds, d, s;
    
    ds = 1;
    d = 0;
    s = 0;
    do
    {
	d = d + 2;
	ds = ds * x**2 / d**2;
	s = s + ds;
#	printf ("ds %g s %g dist %g\n", ds, s,
#		ds - 0.2e-8 * s);
    }
    while (ds - 0.2e-8 * s > 0);
    return s;
}

real highpass (real n, real m, real wc)
{
    real  alpha = m/2;
    real  dist;

    dist = n - alpha;
    if (dist == 0)
	return (pi/2 - wc) / pi;
    return -sin(dist * (pi/2-wc)) / (pi * dist);
}

real lowpass (real n, real m, real wc)
{
    real  alpha = m/2;
    real  dist;
    dist = n - alpha;
    if (dist == 0)
	return wc / pi;
    return sin (wc * dist) / (pi * dist);
}

real kaiser (real n, real m, real beta)
{
    real alpha = m / 2;
    return i0 (beta * sqrt (1 - ((n - alpha) / alpha)**2)) / i0(beta);
}

void write_high (string filename, 
		       real m, 
		       real wc, 
		       real beta, 
		       real step)
{
    real    n;
    file    f;

    f = File::open (filename, "w");
    for (n = 0; n <= m; n += step)
	File::fprintf (f, "%g,\n", highpass (n, m, wc) * kaiser (n, m, beta));
    File::close (f);
}

void write_low (string filename, 
		    real m, 
		    real wc, 
		    real beta, 
		    real step)
{
    real    n;
    file    f;

    f = File::open (filename, "w");
    for (n = 0; n <= m; n += step)
	File::fprintf (f, "%g,\n", lowpass (n, m, wc) * kaiser (n, m, beta));
    File::close (f);
}

real Beta (real A)
{
    if (A > 50)
	return 0.1102 * (A - 8.7);
    else if (A >= 21)
	return 0.5842 * (A - 21) ** 0.4 + 0.07886 * (A - 21);
    else
	return 0.0;
}

int M (real A, real deltaw)
{
    return ceil ((A - 8) / (2.285 * deltaw));
}

real filter (real wpass, real wstop, real error, *int mp)
{
    real  deltaw = wstop - wpass;
    real  A = -20 * log10 (error);
    real  beta;

    beta = Beta (A);
    *mp = M (A, deltaw);
    printf ("Beta %g M %g\n", beta, *mp);
    return beta;
}