Simple Noise Analyser for scope owners who do not have that option - Page 1
Forum section: electronics / general

author: iMo
author_rank: Super Contributor
timestamp: September 01, 2025, 01:12:48 pm
content: As discussed in another thread:https://www.eevblog.com/forum/metrology/diy-low-frenquency-noise-meter/msg6023949/#msg6023949this is a follow-up with something more tangible..You may find the DHO-REMOTE tool, originally written by TheoB for people whose scopes lack a Bode plot option:https://www.eevblog.com/forum/testgear/bode-plot-for-scope-owners-that-do-not-have-that-option/msg5770157/#msg5770157I spent a couple of days implementing a simple Noise Analysis feature into this tool, and here it is:https://github.com/igor-m/dho-remoteIt works under Win11 as well as Linux (e.g., Armbian on a cheap mediabox).The original Bode functionality should still work (not tested yet).It is still a WIP, the source might need some optimization, sure..Below you can see a typical result..Notes on the new Noise Analysis inputs:Code:FFT window: For noise measurements, “None” (rectangular) is recommendedFFT averaging (N): Number of FFTs to average, e.g. 50LNA Gain (A): Enter the LNA’s gain as a real value (not in dB), e.g. 10000LNA Filter from (Hz): The HPF -3 dB corner frequency, e.g. 0.1LNA Filter to (Hz): The LPF -3 dB corner frequency, e.g. 10Effective Filter Order (HP + LP):This is a somewhat controversial topic. It’s defined as the “sum” of the HPF and LPF orders, e.g. 2 + 2 = 4.Based on this you get an approximate shape factor for the band-pass filter.For the actual values used, see the source.Fractional numbers such as 3.5 are also possible — this is why it’s called “Effective”,since real filter roll-offs don’t always follow the ideal HPF/LPF models.The software reads in chunks of 1,000,000 samples by default, but you can configure almost any number of points in the scope.Transfer speed depends on the record length (≈ 3 secs per 10 M samples over LAN).The Save button writes the current scope sample buffer to a .csv file.For example, 1 M samples take about 50 MB of disk space.Example output (console):Code:..N.9 FFT DONE from CH1 !N.10 (10) FFT from CH1 ..N.10 FFT DONE from CH1 !Samples read: 10 * 25000000Sample rate = 2500 kspsFFT max freq = 1250 kHzFFT min freq = 0.1 HzFFT bin ENBW = −10.00 dB-HzIntegrated Vrms from 0.1 Hz to 10 Hz: 0.520 µVPSD slope between 0.1–10 Hz: −8.916 dB/decadeEst. Noise type (α ≈ 0.89): FlickerThe α (in 1/f^α) is calculated from the PSD as the slope of a linear interpolation inside the band-pass region.For example, −10 dB per frequency decade gives slope = −1.0 → α = 1.0.This also provides a rough estimate of the noise type (see source).For somehow reliable results, the band-pass width should cover at least two frequency decades.The "Integrated Vrms" is usually slightly lower (like 2-5%) than the oscilloscope’s built-in AC.RMS reading.Usage notes:a) Set the vertical and horizontal resolution via this tool and enter the other Noise parameters.b) Press the "Noise" button to start sampling in Single Shot mode. The waveform will appear on the scope displayafter some delay(e.g., with Horizontal/div = 10secs after 50secs).c) The program then retrieves the waveform data via LAN, save them raw under "Measurement ID" name in a .bin format (with related metadata) and if ticked the checkbox via a .csv format as well, computes the FFT, averages the FFTs, and repeats that in a loop.d) After N loops it outputs the graphs and the summary as above, the console info (.txt) and graphs (.png) are saved automatically as well.Important: Double-check your trigger settings in your scope, otherwise acquisition will not start.The thermal noise reference levels in the graphs are for an ideal 50 Ω resistor at 25 °C (for illustration only).Note: If you set, for example, Horizontal/div = 100secs and N = 100, you will wait ~100800 seconds (~28 hours) for the results.Running this on a Raspberry Pi or a small Linux box (instead on your 96-core Threadripper) might be more practical.The next step could be replacing the scope with a small dedicated sampling box.

author: mawyatt
author_rank: Super Contributor
timestamp: September 01, 2025, 02:04:34 pm
content: Very NiceCurious how did/do you deal with the high pass and low pass filter effects wrt to overall LNA equivalent noise bandwidth? Many of the LNAs that have been discussed/developed/evaluated have a higher order LPF than a HPF and many seem to not be representative of a known filter type (Butterworth/Bessel/etc).This leads to maybe a way to evaluate the entire LNA/Filter/DSO "system" using a known noise source (quality resistor) to characterize such.Anyway, this is exactly the path (see link) what we were thinking wrt utilizing these modern "entry level" DSOs as the "Data Collection" hardware and then hopefully progressing to being able to directly DSO display the noise results without the need for a companion computer.https://www.eevblog.com/forum/testgear/siglent-fft-uses-for-low-frequency-noise-analysis-and-investigation/Best

author: iMo
author_rank: Super Contributor
timestamp: September 01, 2025, 06:47:12 pm
content: Quote from: mawyatt on September 01, 2025, 02:04:34 pmI did as it is described in the readme and in the sources..Yep, a good point for a discussion..In case you have, for example, a 4th order LPF and a 1st order HPF I would select "5" in my current code.The SF contributions from "4" up are rather small, imho.I would be happy to learn more about it too..Btw. I am pushing a new version with input for a Measurement ID name, under this name the raw scope data will be saved in a folder, each with a timestamp (xxx msecs resolution)..Warning: it will be N .csv files..Done..PS: to include the Siglents into this tool is easy - there is the \scope\rigol.py file, take it as the template and adjust it ala Siglent and save it there as "siglent.py". Then you simply run the tool likeCode:python dho-remote.py -m siglent -i 192.168.X.YThat has to be done by a Siglent user(s) as you need the scope have wired to your pc via LAN while testing the connectivity..

author: iMo
author_rank: Super Contributor
timestamp: September 02, 2025, 04:58:16 am
content: FYI - in the Noise tool you may now set a checkbox "Save .csv" when you want to save the scope's raw data.Also now it always saves the console information into the .txt file, as well as it always saves the resulting graphs in the .png file.The graphs (while still in the tool) are interactive, so you can zoom-in, etc.All files are saved into the "Noise_Measurement" folder - it is created automatically (when it does not exist) inside the current directory - and all subsequent measurement data are written there, and the filenames (based on the "Measurement ID" you may enter in) are date/time stamped with a msecs resolution.Update: now it always saves the raw binary data coming from the scope in each measurement step as well.The names of the files as above with .bin at the end, the samples are 16bit (see the rigol.py), thus, for example, N*1M of data takes ~N*2MB of disk space.It saves the .bin data the "Save .csv" checkbox status regardless.Update1: added the automatic saving of the metadata related to the 16bit binary samples (in .csv format like .meta.csv).Thus after a measurement you shall see 4+ new files in the "Noise_Measurement" folder (N* .bin, .meta.csv, .txt, .png).When the "Save .csv" checkbox is enabled you will get additional N .csv files.PS: for linux users - do not forget to give permission to the folder with the dho-remote, otherwise it will shoot an error with "permission denied" when creating the Noise_Measurement folder inside (and writing the data there then)..