Reglaj automat al nivelului audio pentru emisiunile digitale

O idee mai veche ce nu am regăsit-o deocamdată în nici o stație profesională sau pentru radioamatori, am reușit să o pun în practică rapid și simplu. Problema ce o aveam de rezolvat consta în faptul de a egaliza nivelul volumului audio indiferent de modul recepționat. Emisiunile D-Star sunt redate de vocoderul AMBE3000 la nivel aproximativ dublu față de codările DMR respectiv C4FM.
Compresorul de dinamică nu mă mulțumește datorită amplificării false in perioadele de liniște după care urmează un debut deosebit de puternic al emisiunii recepționate.
Soluția găsită constă în utilizarea unui potențiometru audio controlat digital.

Precizez faptul că aceast reglaj este realizat inainte de potențiometrul de volum propriuzis (prestabileste nivelul audio la intrarea acestuia).

O listă deschisă mă ajută să prestabilesc nivelul corespunzător emisiunii recepționate. Cu această ocazie am extins lista prin adaugare de indicative sau ID-uri DMR la care pot prestabili nivelul audio individual. Metoda este simpla dar eficientă și mă ferește de stațiile celor ce nu ințeleg că reglajul propriei emisiuni este o problemă ce ține de respect între radioamatori. Modulațiile gen “Să-i sară copilul din brațe ” nu fac altceva decat să îi auto-caracterizeze. Astfel am descoperit că mă pot proteja și de emisiunile stereotip sau ale celor care preiau microfonul să ne spună că nu au nimic de spus.

Cele trei funcții scrise sunt următoarele:

inc = 19                                              # GPIO
updn = 13
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(inc, GPIO.OUT)
GPIO.setup(updn, GPIO.OUT)

def pulse():
    GPIO.output(inc, 1)
    time.sleep(.001)                              # 1ms pulse
    GPIO.output(inc, 0)

def level(vol):
    GPIO.output(updn, 0)                         
    for i in range(0,100):                        # 100% – to GND
        pulse()
    GPIO.output(updn, 1)
    for i in range(0,vol):                          # vol% – adjust
         pulse()

def vol_id(indicativ):
   global vol
   with open(‘/home/pi/level.txt’) as f:
   for line in f:
      if indicativ in line:
         vol = int(line.split()[1])

Fișierul “level.txt” conține deocamdată  câteva setari specifice funcție de nivelul recepționat.

“/home/pi/level.txt

Idle 10
D-Star 30
DMR 80
C4FM 100
9990 60
2263075 25
2266005 55
2266034 25
2263077 40
2263009 90
2263067 100

Filmarea demonstrativă poate fi vizionată aici

 

19.09-2017

Cosmin – YO6FWM

Leave a Reply

Your email address will not be published. Required fields are marked *