BBRF103_2 PCB adds a switchable LNA power supply through the antenna cable
I tested it with an Outernet L-band ceramic patch antenna. This antenna requires power and can be connected to BBRF103_2 PCB. The antenna onboard filter helps to reduce problems from interfering signals and restricts reception to 1525 - 1559 MHz.
Ten MHz down there are many other satellite signals. The gap in the spectrogram shows the BBRF103 noise when the antenna power is switched off; two spurious signals are visible on the right.
BBRF103_2 PCB notes
ADC:I mounted the BBRF103_2 prototype with a LTC2208 ADC instead of LTC2217. I wanted to check compatibility and I had not any other LTC2217 sample. The LTC2208 is a little noiser than LTC2217 by some 2 dB. The LTC2208 draws some mA more current.
Antenna power: The scheme uses 2N3906,2N3904 : Q2,Q3,Q4,Q5. The pcb footprint is wrong. Mount them upside down on the pc board.
I mounted R42,R43,R44 = 10 Ohm, it increases the output current.
R820T2: I added some bypass capacitors to the VCT line on the top layer.
Temperature: I made some measure of the temperature of R820T2 and LTC2208 with a small copper radiator.
The temperature of the ADC with a small copper radiator reaches 67 ° C while the R820T2 with the radiator reaches 45 ° C.
Preview: I will use MAX4995 50mA to 600mA Programmable Current-Limit Switch to control the LNA current in a new pcb's revision and some heat radiators will be added to ADC and RT820T2...
It was caused by a spurious coupling via the 3V3 power supply.
I thought of a problem in the firmware of FX3 while the cause was hardware. I decoupled the R820T2 3V3 power supply using a separate LDO from the 5V USB bus to solve the problem in the prototype.
The R820T can be used to receive frequency band in the range 30MHz -1800MHz. The tuner uses a clock generated by Si5351A at 32.000MHz, the REGDIV bit of reg 4 is set to 1 to divide it by two internally to the nominal 16MHz. The IF output is selected at 5MHz ( I used up to 7.5MHz) and it’s sampled by the ADC at 64Msps and then decimated down to 8Msps or less. The R820T data sheet states that the standard IF filters are implemented for 6/7/8 MHz channel bandwidths.
The LNA, the mixer and the VGA gains can be set manually although their precise values are absent from the datasheet. They can also be set automatically via automatic gain control (AGC) in order to optimize the signal to noise ratio (SNR).
It uses the same USB3 Cypress Explorer Kit Board while the ADC is a LTC2206. Reginald Eisenblatt, gave a presentation on the BooyaSDR ( January 23, 2017, at Linaspace see http://www.amrad.org/ ). Some video at https://www.youtube.com/watch?v=uF6y0ETTJFA , notice the Waterfall with multiple rows!
The BooyaSDR application is very clever. It uses gcc compiler with pthreads and fftw library. The FX3 firmware is loaded at run time using the Cypress download protocol.
I decided to use the same software environment and compiler to test a version of ExtIO_sddc.dll for BBRF103 with pthreads lib.
The BBR103 has been updated to version 0.2 with the following patch. - RAND patch: a wire has been added to control the RAND pin of ADC using GPIO20 of FX3. This option allows the control and test of RAND feature of ADC (see pg 14, 24 of http://cds.linear.com/docs/en/datasheet/2217f.pdf). The wire connects RAND (U3-pin 63, R7,R9) to GPIO20 ( BGA K7 = PIN25 J6 FX3 SS kit).
The Firmware source can be found into the archive file of project under \Firmware directory
The 0.96 version is still a preliminary release with some bugs. It operates in HF mode only.
Problems remain in use of R820T2 tuner, and a post on this argument will follow.
The FFT output is sent to HDSDR with a selectable rate of 32 Msps or a decimated one at 16, 8, 4, 2 Msps.
Filtering and tuning is made using overlap and add with frame of 1024 as 768 +256 samples. The filter time responses are 257 sample long.
When 32Msps is used the local oscillator of HDSDR is fixed to 16 MHz at centre of spectrum and the fine tuning of HDSDR allows reception from 500 kHz to 31500 kHz, while with lower sample rates the local oscillator can be tuned with 125 kHz step while the fine tuning is made by HDSDR.
At this development stage ExtIO_sddc.dll has a GUI dialog with 4 tabs :
Status - reports ADC rate and I&Q rate.
BBRF103 - buttons :
LW-MW this is used to modify the FFT output filtering to receive the low frequency band. HF - standard HF setup . VHF - enables R820T2 ( it is disabled, to enable undefine _NO_TUNER_ in config.h and recompile) DITH - enables the ADC dither. RAND - enables the ADC randomize.
TRACE - enabled in debug mode to trace some signals to log files.
RF ADC stream: it requires BB103, ADC input ,default, RF virtual tone: it requires BB103, virtual tone, RF virtual sweep: it requires BB103, virtual sweep, IF virtual tone: NO hardware required, virtual tone , IF virtual sweep: NO hardware required, virtual sweep,
Hereafter a video recorded with a random wire antenna 5mt long on the balcony (in the city).
During Summer holidays I experimented about decimation scheme of BreadBoard RF103.
The ExtIO_sddc.dll processes the ADC real signal stream. The sampling rate is 64 MHz. The output is a decimated I&Q complex signal stream at 16 MHz, 8MHz, 4MHz or 2MHz. Filtering and tuning are integrated.
The dll uses CyAPI library to connect BBRF103 hardware via USB3.0. A USBthreadProc thread uses 16 buffers queue to receive data chunk of 65536 samples (short). One buffer’s time duration is about 1 ms at 64 MHz. I configured USBthreadProc to run at high priority to be responsive to hardware timing. The USBthreadProc output buffer is processed by the class RFddc that has an own buffer array of 16 elements. The time of a circular turn of 16 buffers queue allows the digital down conversion algorithm of each chunk to complete on a separate thread. The previously computed output vector is returned while the signal processing of the buffer is started. A priority for these threads below normal seems good enough. Frequency domain signal processing is used. An overlap and add FFT scheme processes the buffer 65536 sample frame and overlap and save scheme glues the buffers together.
The following diagram represents the processing of one buffer frame and it is implemented in every thread of the RFddc pool of 16.
1) It is the input sample array of short. It is a real signal. The frame buffer is a sequence of 65536 samples (it can be seen as a sequence of 64 *1024 slice).
2) The last 1024 slice in the past is copied at the beginning of the array to form a frame of 65 *1024 = 66560 samples. This is the overlap and save scheme.
3) A complex array 66560 samples long is obtained from (2) adding a zero imaginary component.
4) Starting from 0 the array is divided into slices of 768 samples to implement override and add (Overlap and add method) with an overlap of 256 and a fast Fourier transform (FFT) of 1024 sample frame.
5) Every 768 slice is copied into a 1024 one adding a tail of 256 sample zero filled. 85 slice of 1024 complex samples.
6) A FFT forward is applied to the every 1024 slice. 85 slices in frequency domain are computed.
7) For every slide a circular shift of the FFT’s bins is used to implement tuning to the IQ carrier frequency. The resolution is 64000000/1024 = 62500 Hz. This coarse step is good enough for HDSDR tuning that uses its own fine adjustment. A phase adjustment is required depending on the tuning bin position.
9) Decimation in frequency is used. The implemented output lengths are 256,128,64,32 that obtains output rate of 16MHz, 8MHz, 4MHz, 2MHz. It is made just copying the decimated FFT bins chunk near zero frequency.
10) The resulting output is a sequence of decimated FFT ( 256,…) bins. Steps (7) (8) (9) are implemented together in a copy and modify loop.
11) The 85 slices of decimated FFT.
12) The FFT inverse is computed.
13) The time output is computed with overlap and add of the 85 slices. The first 256 samples and the latest 512 are dropped using overlap and save (Overlap save method) of the 64 * decimated FFTN samples frames. The function has an array of 65536 samples input and returns an array of 16.384 samples at 16MHz, 8.192 at 8MHz, 4.096 at 4MHz, 2.048 at 2MHz. A separate thread processes the signal from each one buffer.
CPU use of HDSDR and ExtIO_sddc, V0.95 ADC 64MHz, IQ 16Msps ; 60 s plot
I made some debug measuring the time jitter of USBthreadProc 16 buffer cycle. The theoretical time is 16 * 1.024 ms = 16.384 ms. Here after a plot of the measured duration time - 16.384 ms. The plot shows that the peak jitter is within +/- 3mS.
USBthreadProc 16 buffer circle timing jitter running at 64 MHz in 16MHz sampling output, 60 s plot.
I named this release version 0.95 and I save it in a separate GitHub repository at: