Giter Club home page Giter Club logo

qa40x's Introduction

QA40x

The QA40x application is the software that runs the QA402 and QA403 hardware (also known as the QA40x hardware). It is free to download and use, but it only works the QA402 and QA403 hardware.

The different releases of the software are accessed via the "releases" tile on the right side of this page.

Github uses the "Latest" tag and "Pre-release" tags to differentiate between the more stable "production" releases ("Latest"), and the less stable "new feature" releases ("Pre-release"). The "Latest" production release is located HERE and the most recent "Pre-release" is located HERE

The Wiki contains a Getting Started guide for the QA402 and QA403 hardware, as well as an intro to controlling the QA40x hardware programmatically.

The manual for the QA40x hardware is available from the application. Click on Help->Open User Manual PDF.

qa40x's People

Contributors

quantasylum avatar

Stargazers

Iman Prayudi avatar Pvt. Method avatar  avatar  avatar Wil Bloodworth avatar Luke Tambakis avatar Wittawas Nakkasem avatar Pavel Bilous avatar Patrick Dowling avatar  avatar  avatar  avatar Christian Ihle avatar Carlos avatar Adam Frisby avatar

Watchers

Wil Bloodworth avatar Etienne Dechamps avatar Elmar Jongerius avatar Adam Frisby avatar Pavel Bilous avatar Mark Kravchenko avatar  avatar  avatar

Forkers

dwtguh

qa40x's Issues

The console makes REST requests slow

As the console fills up, the requests get slower and slower. It only takes a few minutes of running acquisitions before it slows down to a crawl. See the elapsed times from this screenshot:

Screenshot_20210930_203205

Clearing the console makes the requests fast again. Is it possible to do something with the performance of this console?

N-D is sometimes slightly higher than RMS

N-D measurement is slightly higher than RMS measurement when non-rect windowing is used. The expectation is that N-D should always be slightly below RMS, because N-D is the same as RMS with harmonic regions removed.

Polarity Measurement

Add core test in QA40x to enable polarity measurements, then expose that in Tractor

Multi-trace export in Graph Tool

The QA401 allowed the ability to export all traces from Graphtool. The QA40x does not. We need to restore that ability so that graphs can be exported and imported, and also so that multi-trace graphs can be exported into excel for further analysis.

PeakDbv does not handle same end frequency as other APIs

Example with running measurements between 20Hz and 24kHz, with a sample rate of 48kHz:

Screenshot_20211001_191614

Seems all the other APIs (that I use) handle this and return status 200 and a value, except peak which returns status 400 and Bad Request: Exception: (Illegal values passed to FindPeakBin).

This is a full log with all the requests setting up the measurement and making the measurement:

---
Time 19:15:08.576
GET	Request:http://localhost:9402/Status/Version
Return: { "SessionId":"331779053", "Value":"0.9999" }
Status: 200 (Elapsed: 1.39 mS)
---
Time 19:15:13.146
OPTIONS	Request:http://localhost:9402/Settings/BufferSize/32768
Status: 204 (Elapsed: 3.01 mS)
---
Time 19:15:13.151
PUT	Request:http://localhost:9402/Settings/BufferSize/32768
Return: { "SessionId":"331779053" }
Status: 200 (Elapsed: 3.90 mS)
---
---
Time 19:15:13.181
Time 19:15:13.181
OPTIONS	Request:http://localhost:9402/Settings/Input/Max/42
---
OPTIONS	Request:http://localhost:9402/Settings/AudioGen/Gen1/On/1000/-10
---
---
---
Status: 204 (Elapsed: 1.33 mS)
Time 19:15:13.182
Status: 204 (Elapsed: 1.60 mS)
Time 19:15:13.182
---
Time 19:15:13.182
Time 19:15:13.182
OPTIONS	Request:http://localhost:9402/Settings/AudioGen/Gen2/Off/4500/-40
---
OPTIONS	Request:http://localhost:9402/Settings/OutputSource/Sine
Time 19:15:13.183
OPTIONS	Request:http://localhost:9402/Settings/Windowing/Hann
OPTIONS	Request:http://localhost:9402/Settings/SampleRate/48000
Status: 204 (Elapsed: 2.55 mS)
Time 19:15:13.183
Status: 204 (Elapsed: 2.96 mS)
PUT	Request:http://localhost:9402/Settings/Input/Max/42
---
---
Status: 204 (Elapsed: 3.51 mS)
Status: 204 (Elapsed: 3.85 mS)
---
---
PUT	Request:http://localhost:9402/Settings/AudioGen/Gen1/On/1000/-10
Return: { "SessionId":"331779053" }
Time 19:15:13.185
Time 19:15:13.185
Time 19:15:13.186
Time 19:15:13.186
Return: { "SessionId":"331779053" }
Status: 200 (Elapsed: 16.33 mS)
PUT	Request:http://localhost:9402/Settings/AudioGen/Gen2/Off/4500/-40
PUT	Request:http://localhost:9402/Settings/OutputSource/Sine
PUT	Request:http://localhost:9402/Settings/Windowing/Hann
PUT	Request:http://localhost:9402/Settings/SampleRate/48000
Status: 200 (Elapsed: 19.31 mS)
Return: { "SessionId":"331779053" }
Return: { "SessionId":"331779053" }
Status: 200 (Elapsed: 23.27 mS)
Return: { "SessionId":"331779053" }
Status: 200 (Elapsed: 24.79 mS)
Return: { "SessionId":"331779053" }
Status: 200 (Elapsed: 25.53 mS)
Status: 200 (Elapsed: 26.80 mS)
---
Time 19:15:25.134
POST	Request:http://localhost:9402/Acquisition
====================
Acquisition started. Fs: 48000 FFTSize: 32768 Window: Hann Rounding: True  Max Input: 42 dBV
Acquisition completed. Elapsed 0.86 seconds.
Return: { "SessionId":"1021500266" }
Status: 200 (Elapsed: 909.14 mS)
---
---
---
---
---
Time 19:15:26.48
---
Time 19:15:26.50
Time 19:15:26.50
Time 19:15:26.50
Time 19:15:26.50
GET	Request:http://localhost:9402/ThdDb/1000/24000
Time 19:15:26.50
GET	Request:http://localhost:9402/ThdPct/1000/24000
GET	Request:http://localhost:9402/ThdnDb/1000/20/24000
GET	Request:http://localhost:9402/ThdnPct/1000/20/24000
GET	Request:http://localhost:9402/SnrDb/1000/20/24000
Return: { "SessionId":"1021500266", "Left":"-79.0346991923295", "Right":"7.92288994972509" }
GET	Request:http://localhost:9402/RmsDbv/20/24000
Return: { "SessionId":"1021500266", "Left":"0.0111754505291425", "Right":"248.968554308378" }
Return: { "SessionId":"1021500266", "Left":"-76.8476373717254", "Right":"32.5151669270018" }
Return: { "SessionId":"1021500266", "Left":"0.0143753402040616", "Right":"4224.33494994592" }
Return: { "SessionId":"1021500266", "Left":"87.8205776379967", "Right":"-31.932916152917" }
Status: 200 (Elapsed: 17.08 mS)
---
Return: { "SessionId":"1021500266", "Left":"17.0123259220358", "Right":"-72.727503249539" }
Status: 200 (Elapsed: 18.78 mS)
---
Status: 200 (Elapsed: 20.59 mS)
Status: 200 (Elapsed: 22.18 mS)
Status: 200 (Elapsed: 23.81 mS)
Time 19:15:26.65
Status: 200 (Elapsed: 26.83 mS)
Time 19:15:26.69
GET	Request:http://localhost:9402/PeakDbv/20/24000
GET	Request:http://localhost:9402/Data/Frequency/Input
Bad Request: Exception: (Illegal values passed to FindPeakBin)
Return: { "SessionId":"1021500266", "Length":"32768",  "Dx":"1.46484375", "Left":"4mdVmZ0XZz9C9EueELdcPy+kOEG1RDo/g/IdgSaQIT9VKN9DovcJP/TqAgm/8QA/cN+QOdwK6z5KFZU5h3nuPlsxeXCBBeA+MAzA5ARE8T6W7uK462XsPrQs/gPUyO...
Status: 400 (Elapsed: 22.77 mS)
Status: 200 (Elapsed: 23.63 mS)
 

Headless Operation

Add a command line switch to allow headless operation. This would force a console, and then closing the console would also terminate the application.

mono app continues to run after close

From mail...

A really annoying issue is that it's not possible to close the application using regular means. If I click the close button in the title bar, the Link LED on the QA402 turns off, but the app continues to run. If I kill the window, the API continues to run in the background, so I have to kill that too from the terminal. This happens 100% of the time.

Cursor too slow

The new cursor feature of the 0.999 release is very slow and it is very difficult to position the cursor at a particular frequency (e.g. with high resolution FFT).

Y-Axis shows wrong scale

When switching axis settings between dBV and dBr several times and also changing y-axis scaling with "+1 to -1" and "+20 to -160" buttons several times, the scaling can get blocked at e.g. +/-1dB which does not change when the "+20 to -160" button is pressed.

Double free or corruption crash

I get this crash quite often in v0.9999 (newest for Linux). It's printed in the terminal I use to start the Analyzer.

double free or corruption (out)

=================================================================
        Native Crash Reporting
=================================================================
Got a SIGABRT while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries 
used by your application.
=================================================================

=================================================================
        Native stacktrace:
=================================================================
        0x55cf0da54b31 - /usr/bin/mono : 
        0x55cf0da54ec9 - /usr/bin/mono : 
        0x55cf0da02f51 - /usr/bin/mono : 
        0x55cf0da540c4 - /usr/bin/mono : 
        0x7f0abcb55970 - /lib64/libpthread.so.0 : 
        0x7f0abc993322 - /lib64/libc.so.6 : gsignal
        0x7f0abc97c864 - /lib64/libc.so.6 : abort
        0x7f0abc9d5b17 - /lib64/libc.so.6 : 
        0x7f0abc9dd73c - /lib64/libc.so.6 : 
        0x7f0abc9defc0 - /lib64/libc.so.6 : 
        0x7f0abc9e27f8 - /lib64/libc.so.6 : cfree
        0x7f0ab90eb006 - /lib64/libfontconfig.so.1 : 
        0x7f0ab90eb0d3 - /lib64/libfontconfig.so.1 : FcPatternDestroy
        0x7f0ab9603139 - /lib64/libgdiplus.so.0 : GdipDeleteFontFamily
        0x7f0ab96032b7 - /lib64/libgdiplus.so.0 : GdipDeleteFont
        0x4027bba3 - Unknown

=================================================================
        Telemetry Dumper:
=================================================================

The stack trace isn't very detailed, so not sure if it's much help.

I started having this issue when adding support for averages during sweeps in QA40x Web.
I'm trying to amplitude sweep from -40dBV to 18dBV with 20 averages, and it's less than 50% chance of completing a sweep before it crashes.

When it crashes the Analyzer looks like it's processing, but nothing happens. Both the Analyzer window and the Console window are frozen.

Screenshot_20211111_183050

The request is hanging, so the browser does not display any error messages.

Screenshot_20211111_183142

The Link LED on the QA402 turns off.

To get started again I have to kill the application and unplug the QA402 to get it back to life.

Vertical Y Units for Noise Measurements

Y-axis units are currently too scarce. For the measurement of noise parameters, although there is currently dBV, it requires tedious conversion calculations, so it is necessary to use the commonly used noise measurement units (uV)rtHz and (nV)rtHz. A custom conversion function or plugin, this feature is looking forward to seeing it in the next new version, thanks.

Changing settings sometimes result in noisy measurements on left channel

It actually seems a bit random, but pretty easy to reproduce with the 42dBV attenuation enabled and 15-18dBV on the output, in loopback.

This is how I expect it to look:

qa402-thd-issue-ok-analyze

qa402-thd-issue-ok-sweep

In the screenshots above, left and right channel track each other pretty well with regards to THD.

Now look what happens next:

qa402-thd-issue-error-analyze

qa402-thd-issue-error-sweep

Suddenly the left channel has noticeably worse THD than the right channel.
I have not touched anything in the physical setup between the screenshots, or changed any of the settings.

On the Analyze page I can run measurements and the THD result will stay consistent, until I stop and press "Set" (with no changes to the settings). When starting measurements again, it might switch from the good THD to the bad THD, or the other way around.

So something happens when pressing "Set". Maybe the hardware state becomes inconsistent?
It's always the left channel. When it goes into a weird state, I tried changing the inputs, so the left output goes into the right input, and the right output goes into the left input. The result did not invert, the issue was still there on the left channel.

The issue also happens at lower attenuation settings, but the difference between the channels get smaller as the attenuation lessens. As can be seen from the amplitude sweeps it looks fine at lower output, and gets worse as the output increases.

When doing sweeps it also seems to get into the same state until it's finished. It will either be the good or the bad result.

I'm attaching 2 log files, showing the console output from the 2 different screenshots on the analyze page:

Noise Spectral Density Measurement (Rt Hz) depends on window function

Hi,

I encountered a bug with the noise spectral density measurement. I wanted to validate the measurement with a known DUT. So I prepared the following OpAmp circuit (Non-Inverting Amp with OPA828, metal film resistors, input shorted with 50 Ohms):

image

Simulation says, it has a noise spectral density of around 4.2 nV/rtHz (broadband noise between 1kHz to 10kHz):

image

The measurement with the QA403 depends strongly on the window used:

image

From a user point of view the spectral density shouldn't depend on either the FFT size nor the window function used. So far, Rt Hz mode compensates for FFT size only, like it is discribed in the GUI. But I think the scaling isn't done correctly yet. A correction factor for window functions should also be involved, like it is mentioned here:

https://www.ap.com/technical-library/fft-scaling-for-noise/

Looking forward to your answer.
Regards

Noise density graph seems to be slightly offset

Thanks for the fix! I can confirm that the measurement is not window dependent anymore.

But there is still an issue with the display. It seems that it's off by about 1 dB.

To profe that I measured the spectral density of an 1MOhm resistor at room temperature. The circuit is the same non-inverting amp as shown above with the 50 Ohms removed.

image

Originally posted by @NoiseFree in #31 (comment)

OutputSource Off is unrecognized parameter

The documentation of the OutputSource API specifies some arguments:

PUT /Settings/OutputSource/{Source}

Arguments:
Sine Enables the sine generators. Note that each generator has its own enable controlled via Settings/SineGen.
Multitone 'Multitone' enables the multitone generator.
WhiteNoise 'WhiteNoise' enables the white noise generator.
ExpoChirp 'ExpoChirp' enables the exponential chirp generator.
Off 'Off' turns off all generators and send a stream of 0's to the DAC.

Sending "Sine" returns 200 OK, while "Off" fails:

$ curl -d "" -X PUT http://localhost:9402/Settings/OutputSource/Off -v
* Connected to localhost (::1) port 9402 (#0)
> PUT /Settings/OutputSource/Off HTTP/1.1
> Host: localhost:9402
> User-Agent: curl/7.77.0
> Accept: */*
> Content-Length: 0
> Content-Type: application/x-www-form-urlencoded
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 400 Unknown source name in /Settings/OutputSource
< Access-Control-Allow-Origin: *
< Content-Type: application/json
< Server: Mono-HTTPAPI/1.0
< Date: Thu, 30 Sep 2021 18:42:31 GMT
< Content-Length: 27
< Connection: close
< 
* Closing connection 0
{ "SessionId":"115373786" }

Perhaps it's not implemented, like Multitone? Multitone returns HTTP/1.1 400 Not yet implemented.

Where could I get the QA40x device?

Hi I'm in China. I want to use it to measure out product in product line. But I can't find anyway to buy the device. Could you give me some purchase channel please? Thank you so much.

PUT /Settings/Default fails if QA40x window is minimized

Windows 10, 20H2
QA40x Release 0.990

  1. Open QA40x Application
  2. Minimize QA40x Application Window
  3. Issue a /Settings/Default PUT request
  4. Request returns error (400 Bad Request: Exception: (SplitterDistance must be between Panel1MinSize and Width - Panel2MinSize.))
curl -d "" -X PUT http://localhost:9402/Settings/Default --show-error --fail
curl: (22) The requested URL returned error: 400 Bad Request: Exception: (SplitterDistance must be between Panel1MinSize and Width - Panel2MinSize.)

[Request] Continuous Tone Generation via REST API

The QA401 API allows continuous tone to be generated using the GenerateToneStart and GenerateToneStop methods (earlier versions of QAAnalyzer only had a GenerateTone method w/ fixed duration). The QA40x GUI allows for a similar functionality by pressing the "Tone Gen When Idle" button, but this option is not exposed via the REST API.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.