21.11.2023, 22:42
Hab mir hier mal erlaubt das python Skript von andreas42 so zu ändern, dass es direkt die *.txt files ausgibt.
Code:
import numpy as np
def db(x):
return 20. * np.log10(x)
def lpf(f, tau):
return 1. / np.sqrt(1. + (2. * np.pi * f * tau)**2)
def hpf(f, tau):
return (2. * np.pi * f * tau) * lpf(f, tau)
def iec38(f):
return db(lpf(f, 35e-6))
def nab38(f):
return db(lpf(f, 50e-6)) - db(hpf(f, 3180e-6))
def iec19(f):
return db(lpf(f, 70e-6))
nab19 = nab38
def nab9(f):
return db(lpf(f, 90e-6)) - db(hpf(f, 3180e-6))
def nab4(f):
return db(lpf(f, 120e-6)) - db(hpf(f, 3180e-6))
iec9 = nab9
freqs = np.array([ 10., 12.5, 16., 20., 25., 31.5, 40., 50., 63., 80.,
100., 125., 160., 200., 250., 315., 400., 500., 630., 800.,
1000., 1250., 1600., 2000., 2500., 3150., 4000., 5000., 6300., 8000.,
10000., 12500., 16000., 20000., 25000., 31500., 40000., 48000. ])
def write_eq(name, function, ref=0.):
filename = "{}.txt".format(name)
with open(filename, 'w') as eqfile:
fStrings = []
yStrings = []
for i,f in enumerate(freqs):
y = function(f) - ref
fStrings.append('f{}="{}"'.format(i,f))
yStrings.append('v{}="{}"'.format(i,y))
print('FilterCurve:{} filterLength="8191" InterpolateLin="0" InterpolationMethod="B-spline" {}'.format( " ".join(fStrings), " ".join(yStrings) ), file=eqfile)
eqfile.close()
if __name__ == '__main__':
f = lambda x: nab4(x) - nab9(2*x)
write_eq('120+3180 nach 2x 90+3180', f, f(1000))
f = lambda x: nab4(x) - nab19(2*x)
write_eq('120+3180 nach 2x 50+3180', f, f(1000))
f = lambda x: nab9(x) - nab19(2*x)
write_eq('90+3180 nach 2x 50+3180', f, f(1000))
f = lambda x: iec19(x) - nab19(x)
write_eq('70 nach 50+3180', f, f(1000))
f = lambda x: nab19(x)
write_eq('NAB 19 (50+3180)', f, f(1000))
f = lambda x: nab9(x)
write_eq('NAB 9.5 (90+3180)', f, f(315))
f = lambda x: nab4(x)
write_eq('NAB 4.76 (90+3180)', f, f(315))
f = lambda x: nab4(x) - nab9(x)
write_eq('120+3180 nach 90+3180', f, f(333))