Â
Description
100% Brand New And High Quality
Output frequency range 138MHz-4.4GHz,
Stepping: 1kHz
Output power (for reference): 150M-3.2DBM; 250M-3.4DBM, 500M,-3.4DBM; 750M-2.8DBM, 1000M-3.4DBM;
1500M-3.6DBM; 2000M-4.0DBM; 2500M-2.8DBM; 3000M-1.8DBM; 3500M-3.6DBM
Spectrum of the input frequency range of 138M-4.4GHz
Frequency Accuracy (after calibration): +-1k @ 1GHz
Low-noise input signal amplitude:-70DBM @ 0.5G
Power: USB2.0, USB3.0 (+5 V/0.3A, it is best to pick USB3.0)
Interface: USB2.0/ USB3.0, SMA
Recommended tracking source (purchased separately) on our ebay shop.
Package includes:
1 x 138MHz-4.4GHz Analyzer
1 x USB cable
2 x SMA cable
______________________________________________________________________________________
http://www.rtk-service.de/shop/index.htm
_______________________________________________________________________________________
Firmware für den FA-NWT und HFM9
Beschreibung der Anschaltung des FA-Dämpfungsgliedes (Hochgeladen 23.01.08)
Variante 1
This variant is for the FA-NWT direct DDS-clock supply of 400MHz. In the earlier HW to recognize the built-helix filter. The new FA-NWT are all direct DDS-clock supply of 400MHz and also covers all of the Variante 1. All other NWT as the HFM9 direct DDS-clock supply of 400MHz also fall under this variant.
Diese Variante ist für den FA-NWT mit direkter DDS-Takteinspeisung von 400MHz. Bei der älteren HW zu erkennen am eingebauten Helixfilter. Die neuen FA-NWT sind alle mit direkter DDS-Takteinspeisung von 400MHz und fallen auch alle unter der Variante 1. Alle anderen NWT wie der HFM9 mit direkter DDS-Takteinspeisung von 400MHz fallen auch unter diese Variante.
Version 1.20 Variante 1 als FW-Update (Hochgeladen 24.04.12)
Version 1.19 Variante 1 als FW-Update (Hochgeladen 28.04.09)
________________________________________________________
Software zum Netzwerktester FA-NWT NWT7 NWT500 HFM9
Dokumentationen zur Software V4.xx
Starthilfe LinNWT/WinNWT V4.xx (PDF) von der Zeitschrift "FUNKAMATEUR". Diese Starthilfe für ist nicht nur für Neueinsteiger. (Hochgeladen 30.04.2009)
LinNWT/WinNWT V4.xx (PDF) (Hochgeladen 30.07.2009; 700 kByte) Gesamtdokumentation in deutsch.
LinNWT/WinNWT_en (PDF) (Hochgeladen 06.08.2014; etwa 700 kByte) Gesamtdokumentation in englisch. Vielen Dank an Paolo Spina aus Italien. Eventuell sind noch Fehler im Dokument. Mein Englisch ist leider nicht ausreichend.
Eine kleine Anleitung zur Installation unter UBUNTU Eventuell auch für andere Distributionen verwendbar. Danke an Christof Bodner. Er hat diese Anleitung geschrieben.
Software History
Versionsverlauf (Hochgeladen 14.02.2013)
Download der PC-Software
Wichtiger Hinweis: Die Software unterliegt der GNU LESSER GENERAL PUBLIC LICENSE. Die Software funktioniert nur einwandfrei im Zusammenspiel mit der von mir entwickelten Firmware in den verschiedenen NWTs. Ich übernehmen keinerlei Haftung über auftretende Mängel oder Schäden!
Die Software wird nicht weiter entwickelt!!!
Erweiterung zum Audio-NF-Wobbeln und Pegelmessungen. Das funktioniert nur mit der neuen FW 1.20. Ein Beitrag dazu erscheint ist in der Zeitschrift Funkamateur. erschienen.
Das Wattmeter funktioniert jetzt mit FW1.19 und FW1.20. Wird die FW 1.20 benutzt muss das Wattmeter neu kalibriert werden, da beim Wattmeter eine Messung aus dem Mittelwert von 32 Einzelmessungen berechnet wird.
LinNWT V4.11.10 Quellen für Linux. Bitte wie gehabt selbst kompilieren. (Hochgeladen 28.03.2016; 562 kByte)
WinNWT V4.11.09 Setup für Windows. (Hochgeladen 30.09.2013; 5,7 MByte)
WinNWT V4.11.09 Setup Windows-hoz magyarul.
NWT V4.11.07 Software für Mac OS X (10.6.8/Snow Leopard) (Hochgeladen 14.02.2013; 26 MByte)Diese Datei wurde mir von Matt Scholz W6ZBA zur Verfügung gestellt.
Fehlerbeseitigung siehe Software History
WinNWT ICON (Hochgeladen 02.06.07; 40 Byte)
Firmware der NWTs
Dieser Bereich wurde in eine neue Seite ausgelagert. Zur Firmware
The BG7TBL USB RF Signal Generator is a PC-based function generator. It has no external controls, requiring a USB connection to a computer.
Software to run this hardware can be found here http://www.dl4jal.eu/.
This device can be bought on ebay for ca $65. Search for "138MHz-4.4GHz". There is a version with the ADF4351 instead that will give you more range (35MHz-4.4GHz).
Hardware
Photos
Protocol
Baud 57600, 8n1
The protocol is binary serial based.
Query firmware
The answer should be in hex:
Where the returned byte is the firmware version, 0x77 = 119.
Signal generator
Setting frequency
To set a frequency send:
Then f and then the frequency divided by 10 with leading zeroes. For example this is the payload for 400MHz.
- 400 000 000 / 10
- f040000000
Spectrum analyzer
The protocol is briefly described in the source code here:
https://github.com/DoYouKnow/BG7TBL_Reader
__________________________________________________________________________________________
BG7TBL_Reader
Read data from a BG7TBL Simple spectrum analyzer device
This program will read data from a BG7TBL and plot its fft and a scrolling spectrogram. In Linux Mint, you can open the fig.jpg file while it is running, so that the environment gets notified of the changes. Other linuxes probably have similar behavior.
The default configuration is to plot the wifi band (2.4 GHz). You can change the start frequency and the other fields in the source file, but keep in mind the length of each field in ascii digits after the comment symbol.
All frequencies are multiplied by 10 behind the device. So, if you want to enter 1 GHz, enter 100,000,000 (without the commas) - which basically means 100 MHz. This is due to the internal frequency scaler.
If you want to enter 200 MHz, enter 020,000,000 (without the commas), or "020000000" in the freq field.
I designed this based on the BG7TBL Simple spectrum analyzer with range 138MHz-4.4 GHz, but devices based on the same software should work.
The step is configurable, and when finding the maximum frequency, the multiplication of the step by the number of samples is done. This must be multiplied by 10 (all frequencies are basically 10 times higher than what you input on the device), and added to the initial frequency int(freq) to get the maximum frequency.
xvfb-run is needed if you don't have access to an x-server, since I presently using some pylab routines in the source code, which is part of matplotlib.
--include doesn't work yet (panning feature)
____________________________________________________________________________________________________________
____________________________________________________________________________________________________________
ser = serial.Serial('/dev/ttyUSB0',57600,timeout=1) |
stepsize = "00011000" # 8 |
arr = np.zeros( (1, int(samples)), np.uint8 ) |
import matplotlib.pyplot as plt |
bw = int(stepsize)*int(samples)*10 |
print "Bandwidth = " + str(bw) + " Hz" |
print "Min freq = " + str(int(freq)*10) |
print "Max freq = " + str(int(freq)*10 + int(bw)) |
X = np.linspace(int(freq)*10, int(freq)*10 + int(bw), int(samples)) |
ser.write("x8fx78" + freq + stepsize + samples) |
sub_list = filter(lambda a: a != 0, c)[::2] |
arr2 = np.mean(arr,axis=0) |
ax1.imshow(arr,cmap=plt.cm.spectral) #Needs to be in row,col order |
#im.save("/home/michael/specgram.jpeg") |
#sub_list2 = [75*(float(x) / 255) for x in sub_list] |
#import matplotlib.pyplot as plt |
#plt.show()
____________________________________________________________________________________________________________
____________________________________________________________________________________________________________
Â
from datetime import date |
date = datetime.datetime.now() |
csvfile = date.strftime("%Y%m%d-%H%M%S") |
file = open(csvfile + '.csv', 'w') |
#today = date.fromtimestamp(time.time()) |
ser = serial.Serial('/dev/ttyUSB0',57600,timeout=1) |
#stepsize = "00011000" # 8 |
stepsize = "00426220" # 8 |
arr = np.zeros( (1, int(samples)), np.uint8 ) |
bw = int(stepsize)*int(samples)*10 |
#print "Bandwidth = " + str(bw) + " Hz" |
#print "Min freq = " + str(int(freq)*10) |
#print "Max freq = " + str(int(freq)*10 + int(bw)) |
X = np.linspace(int(freq)*10, int(freq)*10 + int(bw), int(samples)) |
ser.write("x8fx78" + freq + stepsize + samples) |
sub_list = filter(lambda a: a != 0, c)[::2] |
# sub_list = [((byte*0.191187)+-87.139634) for byte in sub_list] |
chunks=[sub_list[x:x+10] for x in xrange(0, len(sub_list), 10)] |
date = datetime.datetime.now() |
stepsizeline = int(stepsize)*10 |
stepsizesingle = int(stepsize) |
for i in range (0, len(chunks), 1): |
sub_list_str = map(str,chunks[i]) |
powerstring = ", ".join(sub_list_str) |
sample_max = int(samples) |
freq1 = (int(freq)*10 + i*(stepsizeline*10)) |
freq2 = ((int(freq)*10) + (i+1)*(stepsizeline*10) - (stepsizesingle*10)) |
string1 = date.strftime("%Y-%m-%d") + ", " + date.strftime('%H:%M:%S') + ", " + str(freq1) + ", " + str(freq2) + ", " + str(int(stepsize)*10) + ", " + str(int(samples)) + ", " + powerstring |
# arr2 = np.mean(arr,axis=0) |
# s = int(freq)*10 + int(bw) |
# ax1.imshow(arr, cmap=plt.cm.spectral) #Needs to be in row,col order |
# plt.savefig('./fig.jpg') |
#im.save("/home/michael/specgram.jpeg") |
#sub_list2 = [75*(float(x) / 255) for x in sub_list] |
#import matplotlib.pyplot as plt |
____________________________________________________________________________________________________________
____________________________________________________________________________________________________________
Â
Â
from datetime import date |
# Maximum and minimum device frequencies |
maximum_frequency=4400000000 |
minimum_frequency=138000000 |
parser = argparse.ArgumentParser(description='Output heatmap.py-compatible power files for BG7TBL Spec Analyzer') |
parser.add_argument('output_path', metavar='TITLE', type=str, |
help='One-word-title of your job.') |
slicegroup = parser.add_argument_group('Slicing', |
'Efficiently render a portion of the data. (optional) Frequencies can take G/M/k suffixes. Timestamps look like "YYYY-MM-DD HH:MM:SS" Durations take d/h/m/s suffixes.') |
slicegroup.add_argument('--low', dest='low_freq', default=None, |
help='Minimum frequency for scanning.') |
slicegroup.add_argument('--high', dest='high_freq', default=None, |
help='Maximum frequency for scanning.') |
slicegroup.add_argument('--include', dest='include_freq', default=None, |
help='Align to frequency for scanning.') |
#slicegroup.add_argument('--res', dest='res_factor', default=None, |
# help='Resolution factor. Greater than 1 results in n-range scan') |
#slicegroup.add_argument('--samples', dest='samples', default=None, |
# help='Number of samples') |
#slicegroup.add_argument('--stepsize', dest='stepsize', default=None, |
# help='Duration to use, stopping at the end.') |
for i, arg in enumerate(sys.argv): |
if (arg[0] == '-') and arg[1].isdigit(): |
args = parser.parse_args() |
if s.lower().endswith('k'): |
if s.lower().endswith('m'): |
if s.lower().endswith('g'): |
"""Return greatest common divisor using Euclid's Algorithm.""" |
return (a * b // gcd(a, b)) |
low_freq = freq_parse(args.low_freq) |
high_freq = freq_parse(args.high_freq) |
stepsize=int(((int(high_freq)-int(low_freq))/samples))/10 |
print "Stepsize too small. Increasing frequency interval." |
high_freq=int(low_freq)+stepsize*samples |
if (high_freq > maximum_frequency): |
print "High frequency bound exceeded, changing high freq" |
high_freq=maximum_frequency |
samples=((int(high_freq)-int(low_freq))/(stepsize*10)) |
if args.include_freq is None: |
print "No include freq specified. Continuing..." |
stepsize = int((high_freq-low_freq)/(samples*10)) |
shift=((low_freq-(low_freq%stepsize))) |
gcd_12=gcd(shift,stepsize) |
# print str(float(freq_parse(args.include_freq))-(float(freq_parse(args.include_freq))/gcd_12)) |
low_freq = float(freq_parse(args.include_freq))-(float(freq_parse(args.include_freq))/gcd_12) |
while ((low_freq - stepsize*10) > minimum_frequency): |
low_freq = low_freq - (stepsize*10*1) |
print "New low_freq: " + str(low_freq) |
print "New high freq: " + str(low_freq+(samples*stepsize*10)) |
high_freq = low_freq+(samples*stepsize*10) |
while (high_freq > maximum_frequency): |
high_freq = low_freq+(samples*stepsize*10) |
freq_int = int(int(low_freq)/10) |
date = datetime.datetime.now() |
csvfile = date.strftime("%Y_%j__%H_%M_%S_%f") |
file = open(args.output_path + '--' + csvfile + '.csv', 'w') |
#today = date.fromtimestamp(time.time()) |
ser = serial.Serial('/dev/ttyUSB0',57600,timeout=1) |
freq_int = int(int(low_freq)/10) |
freq_str = "{0:0>9}".format(freq_int) # 9 |
#freq2_str = "{0:0>9}".format(freq2) # 9 |
#stepsize = "00011000" # 8 |
stepsize_str = "{0:0>8}".format(stepsize) # 9 |
#stepsize2 = "00100000" # 8 |
samples_str = "{0:0>4}".format(samples) # 9 |
arr = np.zeros( (1, samples), np.uint8 ) |
print "Bandwidth = " + str(bw) + " Hz" |
print "Min freq = " + str(freq_int*10) |
print "Max freq = " + str(freq_int*10 + int(bw)) |
print "Samples = " + str(samples) |
print "Stepsize = " + str(stepsize*10) |
X = np.linspace(freq_int*10, freq_int*10 + int(bw), samples) |
print args.output_path + '--' + csvfile + '.csv' |
for x in range(0, 1000000): |
ser.write("x8fx78" + freq_str + stepsize_str + samples_str) |
sub_list = filter(lambda a: a != 0, c)[::2] |
# sub_list = [((byte*0.191187)+-87.139634) for byte in sub_list] |
chunks=[sub_list[x:x+10] for x in xrange(0, len(sub_list), 10)] |
date = datetime.datetime.now() |
stepsizeline = stepsize*10 |
stepsizesingle = stepsize |
for i in range (0, len(chunks), 1): |
sub_list_str = map(str,chunks[i]) |
powerstring = ", ".join(sub_list_str) |
sample_max = int(samples) |
freq1 = (freq_int*10 + i*(stepsizeline*10)) |
freq2 = ((freq_int*10) + (i+1)*(stepsizeline*10) - (stepsizesingle*10)) |
# freq2 = ((freq_int*10) + (i+1)*(stepsizeline*10) - 1) |
string1 = date.strftime("%Y-%m-%d") + ", " + date.strftime('%H:%M:%S') + ", " + str(freq1) + ", " + str(freq2) + ", " + str(stepsize*10) + ", " + str(samples) + ", " + powerstring + "n" |
# arr2 = np.mean(arr,axis=0) |
# s = int(freq)*10 + int(bw) |
# ax1.imshow(arr, cmap=plt.cm.spectral) #Needs to be in row,col order |
# plt.savefig('./fig.jpg') |
#im.save("/home/michael/specgram.jpeg") |
#sub_list2 = [75*(float(x) / 255) for x in sub_list] |
#import matplotlib.pyplot as plt |