equipment used
software to prepare
and run the experiment
looking at the data
online
An experiment example
Parameters used for
various experiments
rdbe fdds mixer values
for various frequency ranges
Mods:
02nov21: station code went from Aa -> Ac to keep
anish happy.
Equipment used:
vlbi observations at ao using the 12meter
telescope have the following signal path:
- 12meter telescope --> udc -> aoIfLo ->
rdbe->mark6
- 12meter:
- has a dual s/x receiver
- the s/x signal are multiplexed onto a single fiber (1
fiber/pol)
- sband: currently unhooked because of rfi
- xband: 8050 to 9200MHz
- The rf signals are then down a fiber
with 1 fiber for each pol. (circular pols .. but
need to check).
- udc up/down converter
- the rf signal is de multiplexed and then mixed to an IF
freq. (upper side band)
- We are currently using the 1-2 GHz IF for the field
system.
- Ao IF/LO
- The 1-2 GHz IF from the udc is sent to the ao if/lo. It
is an upper sideband (not flipped)
- -11 to +30 db gain is adjustable in 1db steps
- the central 500MHz of the 1-2 GHz IF is then down
converted to 500 to 1000MHz.
- This uses a high side lo so the 750 band is a lower
sideband (flipped)
- If is then sent to the rdbe
- RDBE
- We have two rdbe's at AO. They both receive polA and
polB
- The are named RDBE2 and RDBE4.
- The can run in either PFB or DDC mode.
- -->Warning .. the
following is what i think is going on in the rdbe fpga..
- If anyone finds any more detailed documentation please
let me know :).
- The signal is filtered 512 to 1024MHz and then sampled.
- The a/d is an 8 bit sampler running at 1024 MHz
- --> Note the sampled band is centered at 768 MHz,
not the 750 center that we send to the rdbe.
- The data is down converted to 0 to 512 MHz by the under
sampling.
- The input 750MHz band is flipped
- the 0 to 512 MHz sampled data is not flipped
(upper sideband).
- The 0 to 512 MHz data is run through a 4 channel pfb
filter. the output should be 4 128 MHz complex bands.
- I've read about the 128 MHz real, 256MHz complex,
128MHz read bands... but it seems to me you've just got
4 128MHz complex pfb filter outputs.
- The pfb outputs are labeled .. this the confusing part
- at the 512 to 1024MHz if
- pfb 0 is 512 -> 640 MHz
- pfb 1 is 640 to 768?
- pfb 2 is 896 -> 1024
- pfb 3 is 768 to 896 ??
- the sched manual says there are 3 bands in the 512
to 1024 MHz band
- 512->640 128 MHz bw
- 640 ->896 256MHz bw
- 896 ->1024 128 MHz bw
- so go figure..
- The data can then be processed by the pfb or ddc
personality of the fpga. I'll continue with the ddc mode
below
- DDC
- There are 8 digital mixers in the ddc mode for each
rdbe.
- they are fed by the 4 pfb output from polA and the 4
from polB
- the pfb 0..3 are driven from polA, 4..7 are driven
from polB
- a crossbar switch routes the pfb outputs to the
mixer inputs.
- After mixing to the freq selected by the user, each
mixer output is then decimated to the requested
bandwidth.
- After the decimation
- the samples are quantized to 2 bits
- and then packed into a vdif frame..
- our frames are 5032 bytes long. 8*4 bytes of header
followed by 5000 bytes of sampled data
- with 2bit sampling, there are 4*5000 =20000 samples
in a frame.
- the frames are then sent to the mark5 recorder.
- mark6
- The mark6 recorder is hung off the mk6 computer.
- the input frames are striped across 8 discs.
- when combing the striped files for monitoring use
~data/tmp/xxx
The software to prepare and run the
experiment
The software used in vlbi experiments
includes:
- sched (run offline)
- input is a xx.key file..
- output is a xx.vex file
- It uses two catalog files that define what the
ao12meter can do:
- station_RDBE.dat
- I've added a new entry for the 12meter
- station:ARECIBOc STATION CODE:Ac
- I've also updated the location and the rates.
- freq_RDBE.dat
- new entries for the 12 meter
- station:ARECIBOC
- freq bands:
- arxb1: 8050 to 8550 lo=9050
- arxb2: 8300 to 8800 lo=9300
- arxb3: 8700 to 9200 lo=8950
- eventually i'll split it up into 300 MHz chunks so we
never get close to the edge of the 500 to 1000 MHz
filter.
- After running sched, you need to copy the xx.vex file to
the vlbis1 computer at /usr/sched/
- vex2snap (run on vlbis1)
- vex2snap --force --station Aa --recorder FlexBuff:mk6
t003.vex
- where t003.vex is the example vex file.
- This converts the xx.vex file to the xx.snp and xx.prc
files that the field system uses.
- xx.snp is the schedule file that drives the experiment
(using schedule=xx in the field system).
- xx.prc holds the procedures defined to run
the experiment. typical procedures are:
- exper_initi .. initialize experiment
- sched_initi ... init rdbe, setup
recorder
- setup01 .. stop
rdbe , then setup the rdbe config parameters
- preob
.. called prior to observation start
- -->note.. the field system seems to want the .snp
file in /usr2/sched and the .prc file in /usr2/proc.
- field system
- fs . will start the field system
- the small window in the lower level is the command input
window. the larger windows are for output messages/errors.
- schedule=xxx (name of snap file)
will start the experiment running
- terminate
will exit the field system
- notes:
- when you start the schedule= command,
- the fs will check the start time of the data with
the current time
- If the difference is less than N minutes, the fs
will complain that all sources have past. Looks like
10Minutes ahead always works, 2 or 3 minutes
usually doesn't.
- the schedule xx.snp file will initialize the rdbe.
- this resets all parameters in the rdbe to default
values.. so
- You can't setup the a/d attenuation and set the
2bit quantization levels before running the
schedule= command since the command will undo all of
your settings.
- After running schedule=
- wait until the rdbe is initialized
- then adjust the atten for the a/d and the
quantization levels
- You have to do this before that start of the data
on time.
- Routines to setup if/lo , adjust levels and
quantization.
- setting up the ao if/lo for xband.
- a tclsh shell is run on galfas2 to control the if/lo
(it is usually running in a vncviewer window)
- this can be done before running the field system fs
command. It needs to be done before the a/d attenuator
adjustments.
- vlbisetup rfCenterFreqMhz
- This routine was added 2nov21. it assumes:
- xband is used
- the udc outputs to the 1-2 ghz if band
- the 1-2ghz band is then mixed to 750 Mhz
- this will setup the udc synth to mix the
rfCenterFreq to 1500 Mhz
- and then setup the vlbi mixer to mix from 1500 Mhz
to 750Mhz that is set to the rdbe
- --> the udc synth has a resolution of .1 Mhz.
this lo then gets multiplied by 4 for the up
conversion. it is then down converted to 1000 to 2000
Mhz.
- because of the limited freq resolution of the udc
synth, the udc will not always be able to output
the requested rf Center freq at 1500 Mhz.
- This will routine does the following.
- ask the udc to mix the requested rf freq to 1500
Mhz.
- Look at the actual freq mixed to 1500 Mhz. If it
is not the requested value (because of limited freq
resolution) then:
- when mixing from 1500 Mhz to 750Mhz, correct for
any errors in the 1500 Mhz rf freq
- So the 750 Mhz output will have the correct
requested rf center frequency.
- attn if2 polAdb polBdb
- set the attenuation for the 1-2 GHz IF.
- values are 11 to -30 db
- The parameters are db attenuation. so if you want
more gain make the number smaller.
- values that have worked for me:
- attn if2 -6 -4
- Read back the power levels at the 1-2 ghz IF
- if2mp
- 1 -30.59 -30.16
- This level puts the rdbe attenuators around 10db
- ==> the following steps should be done
after you start the fs and schedule= xxx on vlbis1
- cd /usr2/sched
- fs
- schedule=t009ac (or whatever schedule you want
to run)
- Running the schedule will reinitialize the rdbe's. You
to set the attenuator settings after the initialization
has completed,
- Adjust the rdbe a/d input power
- This is done on vlbis1 in a linux window (not the
field system window)
- the rdbe had 2 attenuators (1 for each pol). They can
be used to adjust the power level into the a/d
- The a/d is 8 bits. You'll want to set the levels to 1
sigma=20 a/d counts
- cd ~/bin
- RDBE2_AGC_AR.py (for the first rdbe)
- RDBE4_AGC_AR.py (for the 2nd rdbe)
- It will try adjusting the attenuators so you get 20
counts in the rms eg
-
# Response: result =
!dbe_rms=0:19.839:18.895:-0.810:-0.588:127:84;
- where19.839 is polA rms in counts, 18.895 is polB
rms in counts.
- Adjusting the 2 bit quantization levels
- this is done on vlbis1 in a linux window (not in the
field system window)
- cd ~/bin
-
ddc_quantize_read_adj_set.py
- is does all ddc's , all rdbe's (even if you are not
using them :)
- It will first try to re adjust the a/d attenuator
levels (so you could skip the part above)
- there is lots of output. the final quantize query for
each rdbe/ddc looks like:
-
Response: result =
!dbe_ddc_quantize?0:0:5119992:10881625:10875224:5123159:1959:-1960:0;
- The 4 large numbers are a histogram of the counts in
each level (most neg to most pos)
- they should be in a ratio of about .5 1 1 .5
- the 1959:-1960:0; is the positive, negative
and 0 thresholds setting
- It is probably best to run this twice (after rdbe
initialization the thresholds are set to 0).
- note:
- the a/d adjust and the quantize commands need to
complete prior to the start of data on.
- Verifying that the rdbe has been setup correctly.
- This uses the vlbish command on vlbis1
- vlbish
- program to talk directly to the rdbe's
- the first time you sent a command inside vlbish you
need to prepend the rdbe names, after that you can
leave them, off
- check that the 1 sec tick is synchronized with
external time
- rdbe2,rdbe4/dbe_dot?
- 192.168.4.12:5000/!dbe_dot?0:2021312154327:syncerr_eq_0:2021312154327:0:52656607:2021312154327:0:1636386207;
- 192.168.4.16:5000/!dbe_dot?0:2021312154327:syncerr_eq_0:2021312154327:0:52656607:2021312154327:0:1636386207;
- You should have syncerr_eq_0 and the replies should
have the same values
- If the replies don't match
- dbe_dot_set=;
- this will do the sync
- then try dbe_dot? again
- other things to add
- dbe_alc?; .. check the a/d
attenuator values
- !dbe_alc?0:0:8:off:1:9:off;. 0:8 .. 1,9
attens for dbe0,1
- dbe_rms?; check the rms values of the
sampled data
- !dbe_rms=0:19.496:20.860:-0.419:-1.046:66:80;
19.496, 20.860 rms level in counts for dbe0,1
- dbe_dc_cfg?; .. checks decimation,ddc
lo's, timestamp setup for the 8 ddc
- dbe_ddc_quantize?0; check
quantization levels for ddc 0 (this is
also done be ddc_quantize_read_adj_set.py)
- !dbe_ddc_quantize?0:0:3513789:60650782:60364756:3470673:1022:-1015:4;
- !dbe_ddc_quantize?0:0:2845577:61143302:61161572:2849548:1018:-1019:0;
- The 4 large #s are the histogram counts for the
4 2bit levels. the ratio should be about .5 1 1 .5
- This can be repeated for ddc's 2,3,4
- Wouldn't hurt to have a script to take 1 second of
data and make sure the spectra looked ok.
Looking at the data online
The data is recorded on the mk6 computer.
After a run you can take a quick look (not sure if looking at
the data while it is running will slow down the recording)
The vdif data format:
The data is written in vdif format:
- Data is written in units of frames.
- a frame has a 8*4ints=32 byte header followed by data
- our data frames tend to have 5000 data bytes with 2 bits
per sample.
- so a data frame will be 5032 bytes.
- A frame can have 1 or more channels written
(either multiple freq band or multiple pols).
- It looks like the default is 1 channel/frame ..
- each frame will have a thread id that identifies which
channel the frame belongs to (or the bbc it came from)
- If you have 1 freq band and 2 pols you could have
- 2 threads.
- thread 0 =polA
- thread 1 = polB
- 2 freq bands with 2 pols might have
- 4 threads
- thread 0 polA band 1
- thread 1 polB band 1
- thread 2 polA band 2
- thread 3 polB band 3
On the mk6 computer the data is striped across 8 discs. You
can combine these 8 files into a single file by mounting the
files using vbs_fs.
After mounting you have a single file with all the data, but
it is still frame based.
- The first 5032 bytes might be from polA while the 2nd 5032
bytes could be from polB, this would be followed by the 2nd
frame for polA.
- to process the data you would like the data samples taken
at the same time to be together, not separated by frames.
- An example:
- suppose we have 1 freq band and 2 pols
- the vdif file would have 2 threads. with
1channel/thread.
- We would like to have 1 thread with 2 channels/thread so
the data would be contiguous in time
- the vmux program will do this for you.
The routines to look at the data:
All these routines are run on the
mk6 computer (where the discs are located). The sequence will
be:
- list the recorded experiments: vbs_ls
- mount the experiment so the 8 striped files look like 1
file: vbs_fs
- demultiplex the file so that samples are adjacent in time
: vmux
- compute, accumulate, and plot a spectra: m5spec.py
- print the headers from a vdif file: printVDIFheader
I'm going to use t003_aa_no0001 experiment as an
example (first scan to t003_aa)
- vbs_ls -6
- list the experiments that have been recorded (-6 -->
mark6 format)
- one of the outputs will be
- t003_aa_no0001
- vbs_fs -6 -I t003_aa_no0001
/home/oper/data/tmp/t003_aa_no0001/
- this will mount the 8 striped files as one file
- you need to first create the directory for the output
- mkdir /home/oper/data/tmp/t003_aa_no0001
- the -6 says to only look in the mark 6 directories for
files
- -I t003_aa_no0001 is the experiment to mount
- the mounted file will end up in
- /home/oper/data/tmp/t003_aa_no0001/t003_aa_no0001
- this file has all of the data, but it is still blocked
by frames (rather than contiguous in time)
- When you're done with looking at the files, use
fusermount -u mountpoint to umount the file.
- printVDIFheader /home/oper/data/tmp/t003_aa_no0001/t003_aa_no0001|less
- dumps the headers. the output will look like:
- First second = 8881200
FrameNum Epoch Seconds Frame Thread
Length Chans Bits L I C EDV SampleRate
SyncWord DBE IF Sub Tuning(MHz) Side Rev Pers
0 43
8881200
43 0
5032 1 2 0 0
0 3 16000000
0xACABFEED 1 0 3
26.000000 U 1.6 0x83
1 43
8881200
43 1
5032 1 2 0 0
0 3 16000000
0xACABFEED 1 1 3
26.000000 U 1.6 0x83
- vmux infile framesize framesPerSec threadlist
vmuxOutputname
- framesize: 5032 .. look at printVDIFheader output
- frames/sec:
- 5000 bytes/frame, 2 bits/sample,4 samples/byte -->
5000*4=20000 samples/frame
- 16MHz bw -> 32MHz sample rate (the printVDIFheader
had a complex sample rate)
- 20000samples/frame* 1/32e6 secs/sample = .000625
secs/frame . 1/.000625 = 1600 frames/sec.
- this is the frames/sec per channel.
- threadlist:0,1
- vmuxOutputname: t003_aa_no0001.vmux
- m5spec.py vmuxnm format
integTmMs fftlen
- will plot the spectra from the .vmux file
- format should be of the form:
<FORMAT>-<Mbps>-<nchan>-<nbit>,
e.g.
- <format> is : VDIF_10000-128-2-2
- 10000 is the # databytes/frame: 5000*2 since
both channels are now in 1 frame
- 128Mbits/sec: 32Mhzsampling*2bits*2pols=128
Experiment example
- use t003 as the experiment name:
- offline
- generate the key file t003.key
- edit the start times to be in the future
- \sched < t003.key
- copy the t003.vex file to vlbis1
- scp t003.vex oper@vlbis1:/usr2/sched
- on vlbis1
- login oper@vlbis1
- cd /user2/sched
- vex2snap --force --station Aa --recorder FlexBuff:mk6
t003.vex
- cp t003aa.prc ../proc/
- on vncviewer session on galfas2
- in tclsh window controlling if/lo
- vlbisetup 8550
- attn -8 2
- if2mp
- on vlbis1
- fs
- schedule=t003aa
- wait for rdbe to get initialized
- in a separate linux window
- cd ~bin
- ddc_quantize_read_adj_set.py
- make sure rms is around 20,20 for the ddc's
you're using
- if the a/d levels are too low, go back to the ao
if/lo and increase the power with attn if2
- a smaller numbers gives more power since the
values are attenuation.
- the quantization histogram should have the ratio
.1,1,1,.5
- the data recording better start after you've
finished with the adjustments
- look at the results on mk6
- ssh oper@mk6
- cd data/tmp
- mkdir t003_aa_no0001
- vbs_fs -6 -I t003_aa_no0001
/home/oper/data/tmp/t003_aa_no0001/
- printVDIFheader t003_aa_no0001/t003_aa_no0001 |less
- get the frame size, compute the
frames/sec/channel,threadlist
- vmux t003_aa_no0001/t003_aa_no0001 5032 1600 "0,1"
t003_aa_no0001.vmux
- --> you need to abort this after a few seconds (or
else it continues to grow the file ??)
- m5spec.py t003_aa_no0001.vmux VDIF_10000-128-2-2 1000
16384
- m5spec.py --help
- Usage : m5spec.py <infile>
<dataformat> <T_int (ms)> <Ldft>
[offset]
<dataformat> should be of
the form:
<FORMAT>-<Mbps>-<nchan>-<nbit>,
e.g.:
VLBA1_2-256-8-2
MKIV1_4-128-2-1
Mark5B-512-16-2
VDIF_1000-64-1-2
(here 1000 is payload size in bytes)
<T_int> approximate
integration time per spectrum in milliseconds
<Ldft> length in
points of Fourier transform across full bandwidth
<offset> is the byte offset
into the file
Parameters used for various
experiments:
evn only 2gbit/sec setup
- (used 05nov21 n21x2.ac fringe test)
- the freq_RDBE.dat entry for this setup is Name = arxb5
- we use 8x64 MhzBw configuration of the rdbe's
- vlbisetup 8433
- you can query the values that this sets up:
- udc query
- 1 8433.200000 7358.300000 15.5 15.5
Locked
- there is a .2 MHz offset at 1500 Mhz (udc synth freq
resolution)
- if2
- synfrq 2249800000 1175000000 ...
- The .2 Mhz offset is corrected when mixing from 1500
to 700 Mhz (using 2249.8 rather than 2250. lo
RDBE fdds mixer values for various
frequency ranges
I got this table from harro who got it
from mat luce (via the python program ft_new.py
- bbmode: 1-> lo below band edge (low side lo), 0
-> high side lo (at 512-1024. at 0 to 512 this is
flipped)
- sub : 0,1,3,2 are the
4 128 Mhz bands from 512 to 768
-
512 to 1024 is upper sideband (not
flipped)
|
|
|
|
|
fc (carrier freqeuncy)
|
fdds
|
sub
|
bbmode
|
freqrange
|
fc < 640-bw
|
fc-512 + bw/2
|
2
|
1
|
fc to fc+bw
|
fc <= 704 and bw=128
|
768 - fc -bw/2
|
1
|
0
|
fc to fc+bw |
fc<= 768-bw/2 and bw < 128
|
768- fc - bw/2
|
1
|
0
|
fc to fc+bw |
fc<=
768 and bw == 128
|
fc - 768 +bw/2
|
1
|
1
|
fc to fc+bw |
fc<= 896-bw and bw
< 128
|
fc - 768 + bw/2
|
1
|
1
|
fc to fc+bw |
fc<= 1024-bw
|
1024 -fc - bw/2
|
0
|
0
|
fc to fc+bw |
512 to 1024 is lower sideband
(flipped)
|
|
|
|
|
fc >= 896 + bw
|
1024- fc + bw/2
|
0
|
1
|
fc to fc -bw
|
fc >= 768 + bw and bw<128
|
fc -768 - bw/2
|
3
|
0
|
fc to fc -bw |
fc >=
832 and bw=128
|
fc - 768 -bw/2
|
3
|
0
|
fc to fc -bw |
fc >=
768 and bw=128
|
768 -fc +bw/2
|
3
|
1
|
fc to fc -bw |
fc >= 640 + bw and bw<128
|
768 -fc +bw/2
|
3
|
1
|
fc to fc -bw |
fc >= 512 +bw
|
fc - 512 -bw/2
|
2
|
0
|
fc to fc -bw |