Post Go back to editing

can Adam-Pluto be used as cheap experimental scalar or vector network analyser ?

Hello,

I just purchased the Adam-Pluto and my goal is to use it to make simple rf measurements between 70 MHz and 3 ghz. I just want to measure frequency response of my rf filters, inductance , frequency of resonance of my LC and stup circuits, amplifier gain , impedance  etc....I realize that the dynamic range and frequency stability of the adalm-Pluto is limited , but this is for experimental  purposes at home not for professional use in a professional rf lab.

Are there Vector or even simple Network Analyzer applications that I could use with the Adam Pluto for that purpose ? I have zero knowledge of GNURadio and MathLab and I wonder is such nice applications exists already and if people use them ? Maybe it is not even feasible or not attractive to do with the adalm Pluto for reasons that I do not understand . It googled ad it seems to me very little rf tools apps exists for the Adam Pluto in fact  (apart from the IIosclioscope) I am not too sure if I should dig in deep in GNURadio or MathLab to get such tools or if some clever guy developed an offstheshelf van or sna application for the Adam-Pluto already or if I should just forget this idea 

thank you for your help 

Regards 

Peter

Parents
  • I've used the Pluto SDR (together with a MiniCircuits directional coupler) as a reflectometer to measure the return loss for antennas in the 70MHz-6GHz range. I programmed it in Matlab - you don't need to be an expert to do this, but you do need to have access to a recent version of Matlab that supports the Pluto.

    Here is a graph of the return loss v. frequency for the little antenna supplied with the Pluto:

    You can see antenna resonance at about 800MHz and another one at about 3.5GHz. 

    The next figure shows the scan for a WiFi antenna:

    So, the Pluto works quite well as a scalar network analyser. Note, though, that you need a decent directional coupler. The MCL unit costs a few hundred dollars, but the Pluto can save you a huge amount of money compared to a 6GHz spectrum analyser.

    I've pasted the Matlab code below.  (I'm not a Matlab expert, so it may well be possible to improve on this.)

    Hope that helps.

    Neil.

    _________________________________________________________

    %% Pluto SDR Reflectometer Scan (March 2018)
    % Use Pluto SDR with a Mini-Circuits ZHDC-10-63-5+ directional coupler
    % Create a 5kHz baseband tone with txrepeat()
    % 1. Drive OUT port of directional coupler with Tx
    % 2. Attach DUT to IN port
    % 3. Sample the reflected signal at COUPL port with Rx
    %
    %% SETUP:
    % Parameters for frequency scan:
    cfstart=70e6; % Start frequency
    cfstop=6000e6; % Stop frequency
    nstep=594; % Number of frequency steps
    cfreq=linspace(cfstart,cfstop,nstep);
    cal=zeros(nstep,1); % Array for calibration amplitudes
    amp=zeros(nstep,1); % Array for DUT amplitudes
    rl=zeros(nstep,1); % Array for DUT return loss

    tx = comm.SDRTxPluto; % SDRTxPluto system object for transmitter
    tx.CenterFrequency=cfreq(1); % Tuner frequency in Hz
    tx.Gain=-30; % Transmitter gain in dB (-89.75 to 0 dB)
    tx.BasebandSampleRate=1e5; % DAC sampling rate in Hz
    % Generate the 5kHz test tone:
    sw = dsp.SineWave;
    sw.Amplitude = 1;
    sw.Frequency = 5e3;
    sw.ComplexOutput = true;
    sw.SampleRate = tx.BasebandSampleRate;
    sw.SamplesPerFrame = 5000;
    txdata = conj(sw()); % Use conj() to generate the lower sideband

    rx = comm.SDRRxPluto; % SDRRxPluto system object for receiver
    rx.CenterFrequency=tx.CenterFrequency; % Tuner frequency in Hz
    rx.GainSource='Manual'; % Disables the AGC
    rx.Gain=30; % Tuner gain in dB (-4 to 71 dB)
    rx.BasebandSampleRate=tx.BasebandSampleRate; % ADC sampling rate in Hz
    rx.SamplesPerFrame=1000; % Output data frame size
    rx.OutputDataType='int16'; % Output data type
    ndec=4; % Decimation factor

    %% SCANS
    % Check that the PlutoSDR is active:
    if ~isempty(findPlutoRadio)
    fmin=0;
    df=rx.BasebandSampleRate/rx.SamplesPerFrame;
    fmax=rx.BasebandSampleRate/ndec-df;
    freq=linspace(fmin,fmax,rx.SamplesPerFrame/ndec)/1000; % freq in kHz
    index=sw.Frequency/df+1;

    %% CALIBRATION LOOP:
    %
    input('Remove DUT - then press any key')
    for n = 1: nstep
    txfreq=cfreq(n);
    tx.CenterFrequency=txfreq; % Tuner frequency in Hz
    tx.transmitRepeat(txdata); % Repeated transmission
    rx.CenterFrequency=tx.CenterFrequency; % Tuner frequency in Hz
    for m = 1:10 % Read multiple times to clear the Rx buffer
    data = rx(); % Fetch a frame from the Pluto SDR
    end
    ddata=decimate(double(data),ndec);
    spec=ifft(ddata); % Signal amplitude at 5kHz is in spec(51)
    cal(n)=abs(spec(index));
    figure(1);
    plot(1e-6*cfreq,cal);
    xlabel('Frequency / MHz');
    ylabel('Amplitude');
    title('Reflectometer Calibration Scan');
    drawnow;
    end

    %% Measure the reflection from the DUT:
    %
    input('Attach DUT - then press any key')
    for n = 1: nstep
    txfreq=cfreq(n);
    tx.CenterFrequency=cfreq(n); % Tuner frequency in Hz
    tx.transmitRepeat(txdata); % Repeated transmission
    rx.CenterFrequency=tx.CenterFrequency; % Tuner frequency in Hz
    for m = 1:10 % Read multiple times to clear the Rx buffer
    data = rx(); % Fetch a frame from the Pluto SDR
    end
    ddata=decimate(double(data),ndec);
    spec=ifft(ddata); % Signal amplitude at 5kHz is in spec(51)
    amp(n)=abs(spec(index));
    rl(n)=20*log10(amp(n)/cal(n)); % DUT return loss
    figure(2);
    plot(1e-6*cfreq,rl);
    xlabel('Frequency / MHz');
    ylabel('Return Loss / dB');
    title('PlutoSDR Reflectometer: DUT Scan');
    drawnow;
    end
    %% RELEASE SYSTEM OBJECTS:
    release(rx);
    release(tx);
    else
    warning(message('plutoradio:sysobjdemos:PlutoRadioNotFound'));
    end

  • Hello, Neil,
    it is possible that with MatLab you provide an executable program from your Network Analyzer.
    I think you have created a great application here. Unfortunately I do not own Matlab.
    This application is very interesting for me to test self made antennas.

    Greetings Georg

  • Hello Georg,

    I just checked my MATLAB script with MATLAB's Application Compiler, but it cannot find the dependencies for some 'pcode' files, which contain proprietary code that drives the Pluto from MATLAB. I suspect that the dependency tree may be quite complex. (The script itself also has to be converted into a MATLAB function, but that is not difficult.)

    So, it may not be easy to make a standalone program, unless someone else can provide the required pcode file dependencies. I'll try again later in the week, when I have more time.

    Regards,

    Neil.

  • Hi Neil,
    I confirm that this would indeed be great to have an executable derived from your work. I just did not realised it was feasible, and buying the two MatLab licenses just for doing frequency response analysis seems to me disproportionate though I must confess I seriously considered it. I am sure there are many people like Georg and I who would love to use the PlutoSDR as a frequency response analyzer to tune filters and antenna, to measure amp gain, etc... I searched extensively the net and you are the only one who has developed something close to an SNA app this for the Pluto. There  is QSPECTRUM analyser, a nice spectrum analyser app based on SoapySDR but it lacks the functionality of a tracking generator unfortunately, 
    By the  way, regarding your scrip, I am not sure I understood if you are doing any form the calibration for easing the measurement of the return loss over a wide frequency range ? Have you foreseen something specific to try to simplify it  ?  Or does calibration have to be done entirely manually for every frequency of measurement ?
    Thanks
    Regards
Reply
  • Hi Neil,
    I confirm that this would indeed be great to have an executable derived from your work. I just did not realised it was feasible, and buying the two MatLab licenses just for doing frequency response analysis seems to me disproportionate though I must confess I seriously considered it. I am sure there are many people like Georg and I who would love to use the PlutoSDR as a frequency response analyzer to tune filters and antenna, to measure amp gain, etc... I searched extensively the net and you are the only one who has developed something close to an SNA app this for the Pluto. There  is QSPECTRUM analyser, a nice spectrum analyser app based on SoapySDR but it lacks the functionality of a tracking generator unfortunately, 
    By the  way, regarding your scrip, I am not sure I understood if you are doing any form the calibration for easing the measurement of the return loss over a wide frequency range ? Have you foreseen something specific to try to simplify it  ?  Or does calibration have to be done entirely manually for every frequency of measurement ?
    Thanks
    Regards
Children