私のSGは、PCからUSBインターフェースを介して制御することができます。
このグラフは、IC-7410のSメーターの読みを、SGの出力を0.2 Vppから20 Vppまで、20 mVppステップで変化させて示したものです。
注意: SGの出力は直接接続されているのではなくて、軽く結合されているだけです。>
リグのマニュアルによれば、Sメーターの読みは、S0で000、 S9で120、そしてS9+60dBで240のはずです。
import sys import math from time import sleep import numpy as numpy import matplotlib.pyplot as plt import serial ser_sg = serial.Serial('/dev/ttyUSB0', 57600, timeout=1) # signal generator ser_rx = serial.Serial('/dev/ttyUSB1', 19200, timeout=1) # receiver ser_sg.write(b':\n') s = ser_sg.read(99) print('[:] ', s) ser_sg.write(b':r0c\n') s = ser_sg.read(99) print('[:r0c] ', s) ser_sg.write(b':r1c\n') s = ser_sg.read(99) print('[:r1c] ', s) ser_sg.write(b':r2c\n') s = ser_sg.read(99) print('[:r2c] ', s) ser_sg.write(b':s1f0701500000\n') s = ser_sg.read(99) print('[:s1f0701500000] ', s) ser_sg.write(b':r1f\n') s = ser_sg.read(99) print('[r1f] ', s) ser_sg.write(b':s1a020\n') s = ser_sg.read(99) print('[s1a0123] ', s) ser_sg.write(b':r1a\n') s = ser_sg.read(99) print('[r1a] ', s) freq_10hz = 701500 hz10 = freq_10hz % 10 hz100 = freq_10hz // 10 % 10 khz = freq_10hz // 100 % 10 khz10 = freq_10hz // 1000 % 10 khz100 = freq_10hz // 10000 % 10 mhz = freq_10hz // 100000 % 10 set_freq = b'\xfe\xfe\x80\xe0\x05' \ +bytes([16*hz10 ]) \ +bytes([16*khz +hz100]) \ +bytes([16*khz100+khz10]) \ +bytes([ mhz ]) \ +b'\x00\xfd' ser_rx.write(set_freq) data1 = ser_rx.read(18) # not 17 to raise timeout xvalue = [] yvalue = [] for amp_10mv in range(20, 2002, 2): stramp = str(amp_10mv) set_amp = b':s1a'+bytes(stramp.encode())+b'\n' print(amp_10mv, stramp, bytes(stramp.encode()), set_amp) ser_sg.write(set_amp) sleep(0.5) get_Smeter = b'\xfe\xfe\x80\xe0\x15\x02\xfd' ser_rx.write(get_Smeter) data2 = ser_rx.read(16) signal = int( data2.hex()[26:30] ) amp = amp_10mv/100.0 ampdB = 20.0 * math.log10(amp) xvalue.append(ampdB) yvalue.append(signal) print(amp, ampdB, signal) ser_sg.close() ser_rx.close() plt.figure(1, figsize=(8,8)) plt.subplot(111) plt.grid(True) plt.plot(xvalue, yvalue, color='red', linewidth=3) plt.title('IC-7410') plt.xlabel('SG Output [dB]') plt.ylabel('S_meter Readout') plt.show()