diff options
Diffstat (limited to 'util/audio_generate_dac_lut.py')
| -rwxr-xr-x | util/audio_generate_dac_lut.py | 67 | 
1 files changed, 67 insertions, 0 deletions
| diff --git a/util/audio_generate_dac_lut.py b/util/audio_generate_dac_lut.py new file mode 100755 index 0000000000..c31ba3d7ee --- /dev/null +++ b/util/audio_generate_dac_lut.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python3 +# +# Copyright 2020 JohSchneider +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program.  If not, see <http://www.gnu.org/licenses/>. +# + +AUDIO_DAC_BUFFER_SIZE=256 +AUDIO_DAC_SAMPLE_MAX=4095 + +def plot(values): +    for v in values: +        print('0'* int(v * 80/AUDIO_DAC_SAMPLE_MAX)) + +def to_lut(values): +    for v in values: +        print(hex(int(v)), end=", ") + + +from math import sin, tau, pi + +samples=[] + +def sampleSine(): +    for s in range(AUDIO_DAC_BUFFER_SIZE): +        samples.append((sin((s/AUDIO_DAC_BUFFER_SIZE)*tau - pi/2) + 1 )/2* AUDIO_DAC_SAMPLE_MAX) + +def sampleTriangle(): +    for s in range(AUDIO_DAC_BUFFER_SIZE): +        if s < AUDIO_DAC_BUFFER_SIZE/2: +            samples.append(s/(AUDIO_DAC_BUFFER_SIZE/2) * AUDIO_DAC_SAMPLE_MAX) +        else: +            samples.append(AUDIO_DAC_SAMPLE_MAX - (s-AUDIO_DAC_BUFFER_SIZE/2)/(AUDIO_DAC_BUFFER_SIZE/2) * AUDIO_DAC_SAMPLE_MAX) + +#compromise between square and triangle wave, +def sampleTrapezoidal(): +    for i in range(AUDIO_DAC_BUFFER_SIZE): +        a=3 #slope/inclination +        if (i < AUDIO_DAC_BUFFER_SIZE/2): +            s = a * (i * AUDIO_DAC_SAMPLE_MAX/(AUDIO_DAC_BUFFER_SIZE/2)) + (1-a)*AUDIO_DAC_SAMPLE_MAX/2 +        else: +            i = i - AUDIO_DAC_BUFFER_SIZE/2 +            s = AUDIO_DAC_SAMPLE_MAX - a * (i * AUDIO_DAC_SAMPLE_MAX/(AUDIO_DAC_BUFFER_SIZE/2)) - (1-a)*AUDIO_DAC_SAMPLE_MAX/2 + +        if s < 0: +            s=0 +        if s> AUDIO_DAC_SAMPLE_MAX: +            s=AUDIO_DAC_SAMPLE_MAX +        samples.append(s) + + +#sampleSine() +sampleTrapezoidal() +#print(samples) +plot(samples) +to_lut(samples) | 
