Jump to content
  • 0

Frequency-dependent sweep levels for network analyzer


clb

Question

For many sensor calibration measurement scenarios, it would be useful to be able to vary the wavegen output level in a custom way. In particular, measurements taken over a broad range of swept frequencies on dynamic systems that have a high Q can result in very large dynamic ranges. One way to achieve somewhat clean results is to separate the full measurement band into smaller frequency sweep ranges at a different sweep levels and recombine the frequency responses. If there's an easy way to take a baseline measurement, and use the inverse frequency response to excite the system, then the output should be much more stable (ideally flat spectrum level) for more optimum acquisition. Then just subtract the custom generator levels from the output data to get the true response. For example, a peak level in the baseline output response will result in a low generator level at that frequency. What's the best way to implement such an inverse compensation [filter]? When I tried to import a Custom file of frequency response data, the GUI interprets the frequency points as a time series. Thanks.

Link to comment
Share on other sites

9 answers to this question

Recommended Posts

  • 0

That's great @attila, thanks! I should have read the documentation more thoroughly. When entering points in the table, I could see a use for buttons to import a table, add or delete a frequency point, sort the table by frequency, and scale the amplitude of the whole table by a constant. Keep up the great work on WaveForms.

Link to comment
Share on other sites

  • 0

Thank you @attila, your additions to the table editor are very useful. There is another feature that is built into a SRS SR785 spectrum analyzer that we also use for some measurements, which I think could really have a positive impact on the measurement capabilities of Waveforms. The feature is called Auto Leveling and it adjusts the amplitude of the source signal in order to keep one of the input channel signals at some reference level that is set by the user. This would be a giant leap forward in source level dynamic scaling, as it would not require having to construct a table to shape the source levels and it would automatically adjust to different DUT responses. I'm not quite familiar with scripting to do this, but I suspect this might be handled this way (specify reference channel and reference level, then at each frequency in the sweep check the reference channel level and adjust the input level before taking a measurement).

Link to comment
Share on other sites

  • 0

Hi @attila,

This script seems to work well, the only problem I've encountered while testing it is that the first logged datapoint is usually not correct (too low in my case). I've not 100% diagnosed this yet, and it could be a measurement artifact on our end, I will try to verify before I blame you! One minor nitpick could be the Out of Range warning showing even after the auto leveling has adjusted things to be within range. If there is a flag you can unset each Repeat to suppress the warning unless it happens again, that would be very good!

I was hoping you could provide a bit more detail here on the script you wrote.. First off, the values Channel2, Target, Amplitude, etc. are peak voltage (Vp) amplitudes, correct?

 

Line 3: 

if(Channel2 == 0) return Target; // return initial amplitude

I don't quite understand this line. Does this mean "if the measured channel 2 signal had amplitude 0 V, we should drive the wavegen with the target Channel2 signal amplitude? Is this just to set some arbitrary starting value if we have too low signal (to avoid divide by zero)? If so, 

 

Line 4&5 make sense, we just increase the amplitude by the observed ratio between target level and current level, and clip to our predefined maximum amplitude.

 

Line 6:

Repeat = abs(Channel2 - Target) > 0.1; // repeat step if needed

0.1 is just some arbitrary +/- tolerance (in Vp) you filled in, correct? I will likely modify this script for specifying +/- tolerances in dB scale.

It appears "Repeat" is a boolean keyword that whatever code in Waveforms interpreting this script recognizes. As long as Repeat evaluates to 1/true the Network instrument will stay on the same frequency, correct?

 

Overall, this has been a fantastic addition to the Network Instrument's functionality. Thank you for your work on this! We look forward to it's adoption into the production release of Waveforms!

Edited by mrb-bt
Forgot to mention something!
Link to comment
Share on other sites

  • 0

Hi @mrb-bt

Amplitude setting and Channel# reading unit is V,  peak to peak voltage / 2

if(Channel2 == 0) return Target; // return initial amplitude
This is the amplitude very first amplitude setting for initial value. The readings are never going to be 0.0000000, always above 0. You can also use if(Frequency==0)...

Repeat = abs(Channel2 - Target) > 0.1; // repeat step if needed
Yes. The earlier will force the step to be repeated if the difference between the target and channel reading is above 100mV.
For dB use 20*log10(Channel#/Amplitude)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...