Electronics > RF, Microwave, Ham Radio
Idea for improving LTDZ Spectrum Analyzer & Tracking Generator 35MHz-4.4GHz
Kalvin:
gf, You asked whether the LTDZ board could be used for measuring narrow band crystal filters. I read the ADF4351 datasheet and wrote the following script for testing the register configurations. It seems that it is possible in theory to generate frequency steps in 10Hz resolution (or even better), but I have not tested this in practice. Hopefully I didn't miss something.
--- Code: ---# Reference oscillator frequency
global REF_Hz = 25000000;
# Reference doubler: 0|1
global D = 0;
# Refecence divide by 2: 0|1
global T = 1;
# Preset divide ratio in range [1, 1023]
global R = 100;
# Modulus in range [2, 4095]
global MOD = 4095;
# PFD frequency
global pfd_Hz = REF_Hz * ((1 + D)/(R * (1 + T)));
# Compute ADF4351 INT and FRAC register values for the given frequency.
#
# f Desired frequency 35MHz <= f < 4400MHz.
# INT INT-register value.
# FRAC FRAC-register value.
# rf_Hz Actual output frequency.
# err_Hz Frequency error.
#
function [INT, FRAC, rf_Hz, err_Hz] = adf4351_reg(f)
global REF_Hz;
global MOD;
global D;
global T;
global R;
global pfd_Hz;
if f <= 68750000
RFDIV = 64;
elseif f <= 137500000
RFDIV = 32;
elseif f <= 275000000
RFDIV = 16;
elseif f <= 550000000
RFDIV = 8;
elseif f <= 1100000000
RFDIV = 4;
elseif f <= 2200000000
RFDIV = 2;
else
RFDIV = 1;
endif
VCO = f * RFDIV;
assert(2200000000 <= VCO && VCO <= 4400000000);
INT = fix(VCO / pfd_Hz);
assert(75<= INT && INT <= 65535);
FRAC = round(((VCO / pfd_Hz) - INT) * MOD);
assert(0 <= FRAC && FRAC <= (MOD-1));
rf_Hz = round(REF_Hz * ((1 + D)/(R * (1 + T))) * (INT + FRAC / MOD) / RFDIV);
err_Hz = f - rf_Hz;
endfunction
--- End code ---
For example:
--- Code: --->> [INT, FRAC, f, err] = adf4351_reg(35000000)
INT = 17920
FRAC = 0
f = 35000000
err = 0
>> [INT, FRAC, f, err] = adf4351_reg(35000001)
INT = 17920
FRAC = 2
f = 35000001
err = 0
>> [INT, FRAC, f, err] = adf4351_reg(35000002)
INT = 17920
FRAC = 4
f = 35000002
err = 0
--- End code ---
gf:
R=100 is quite much. I wonder what's the phase noise then. My understanding is: Lower fPFD -> larger INT -> more phase noise. To mitigate phase noise then, I also wonder whether the loop filter bandwidth would need to be reduced (significantly), at the expense of a larger lock time.
See also https://www.analog.com/media/en/training-seminars/tutorials/MT-086.pdf
Kalvin:
--- Quote from: gf on July 04, 2021, 03:23:58 pm ---R=100 is quite much. I wonder what's the phase noise then. My understanding is: Lower fPFD -> larger INT -> more phase noise. To mitigate phase noise then, I also wonder whether the loop filter bandwidth would need to be reduced (significantly), at the expense of a larger lock time.
See also https://www.analog.com/media/en/training-seminars/tutorials/MT-086.pdf
--- End quote ---
Good points! I did not consider the performance at this point, so I overlooked that issue. It is possible to experiment with some other R values in range [10, 150] as well. The point here is that it is quite possible to perform sweeps with smaller steps. For limited frequency range(s), the R can be hand-selected so that the performance will be optimized in that regard.
Kalvin:
Added a simple Python/Tkinter-utility for reading and plotting LTDZ ADC sample buffer data. This is a development tool for the project development purposes, not intended to be used as a general purpose spectrum analyzer or network analyzer tool. The sweep data can be exported to MATLAB and GNU/Octave for later analysis.
Project page:
https://github.com/kalvin2021/ltdz-dsp
Edit: Changed Matplotlib style/theme.
Kalvin:
Added the firmware build instructions in the project page at Github:
https://github.com/kalvin2021/ltdz-dsp
Navigation
[0] Message Index
[*] Previous page
Go to full version