Mask curve not enough points

T/L D/R the masks generated with Graph do not have enough points so I’m getting fails. How can I adjust the number of points exported?

Here is the issue, note the mask generated vs the actual trace. Note from 60 to 20 there are no points to get around a 60Hz bump, and from 1.2k to 3.1k there are no data points


If we look at the mask before we export it in graph it looks great with no flat spot.
(you will have to belive me, it won’t let me upload more than 1 picture)

However if we look at the mask we can see that a big skip then bunching around 60Hz and again from 1.2 to 3.2KHz, After this there are lots of points close.

# QuantAsylum Mask File
# Frequency, Minimum Pass Value (dB), Maximum Pass Value (dB)
20.51, -30.67, -29.65
60.06, -30.98, -28.93
61.52, -30.56, -29.52
131.84, -30.25, -29.23
180.18, -29.96, -28.92
224.12, -29.66, -28.63
263.67, -29.38, -28.34
301.76, -29.10, -28.05
341.31, -28.81, -27.76
380.86, -28.54, -27.48
423.34, -28.26, -27.20
467.29, -27.99, -26.92
514.16, -27.72, -26.65
566.89, -27.45, -26.38
626.95, -27.18, -26.11
695.80, -26.91, -25.84
776.37, -26.65, -25.58
877.44, -26.39, -25.32
1013.67, -26.12, -25.06
1229.00, -25.86, -24.80
3093.75, -26.12, -25.03
3495.12, -26.38, -25.29
3848.14, -26.65, -25.54
4168.95, -26.91, -25.80

Seems like a point ever 1/3 octave minimum would be great. Can I improve the number of points? Clearly 56 points from 20Hz to 20KHz is not enough

Here is the graph shot to get around the forum only 1 image issue

Hi @HawkerAMpT, you can add in as many points as you wish manually. If you use the automated graphtool to generate the mask, it will add in however many points are needed to accurately capture the group of traces you have run plus some margin based on mean and standard deviation). So, if you run the same unit 3 times (not good), the limits will be overly tight. But if you run 10 different units, the mask will be suitably adjusted based on the standard deviation you specify.

Take a look at the +/- 3 sigma limits run on 5 different overdrive guitar pedals. This was looking at the tone knob settings (source is at the link HERE). Note that the mask will always capture every unit, with some margin added based on expected yields.

So, in short, if you are seeing your factory results outside of the mask setting, then you likely have specified limits too tight AND/OR you haven’t run enough samples. And in those cases, you will need to revert to manually editing the mask. But I think the better way to fix this is to get a handle on yields. Is the unit falling outside the mask a legit “pass”? If so, then you specified the mask generation as being too tight.

Alternately, if you arrived at engineering limits some other way (Monte Carlo in SPICE, for example), you will need to create that mask file manually.

hey @matt

Appreciate it but I don’t think you understood my question. I’m pretty sure I found a defect/bug in the graph tool. I made a mask based on reading 5 different units. It looks right in the graph tool, but the actual mask it creates doesn’t create enough points to get a passing unit. Note the flat top in my picture, the shape is wrong and doesn’t generate enough points to show the curve properly and misses the top of the curve. Units fail due to this.
Is there a way for the mask to generate more points so we don’t have this improper curve?

I edited the mask by hand to fix this, but that is a work around not a good solution.

Hi @HawkerAMpT

Ohhh, sorry, you are right. I misunderstood. So, as you note, the mask looks good in the graphtool, but when exported, the points around the bump look to be gone.

Could you please export one of the red traces in your plot? Just select it as the Current Trace, and then do a Traces->Export. That will be a CSV file. If that won’t upload to this forum, the change the extension to text and it should.

I just tried to get close to your shape using a graphic EQ, but wasn’t able to recreate what you are seeing. But it’s likely something in the shape that is causing too much to be thrown out.


Hey Matt, The traces originally did come from 6 CSV files as they were generated in two different locations. Even changing the file to .TXT I can’t upload it - I’ll email them to you.

We are seeing this with all our masks, but this one is the most extreme example I have found yet.

hey @matt did you get those files? Were you able to re-create my results? Any ideas?
I’ve been hand adding extra points to somewhat fit the curve, but it’s less than ideal.

Hi @HawkerAMpT, yes, files received and I think the issue should be resolved in yesterday’s release 1.194 located HERE.

There are about 10X more points, and a point will be emitted on any curve inflection. Please give a try when time permits and let me know if this resolves your issue. And thanks for reporting, as these types of bugs are hard to find without specific test cases as you shared.

Hey @matt thanx for the update.
Can I use the QA40x code for a QA401?

I was under the impression that I need the other app/code for the 401? If not can I use this to create the mask then use that mask with the 401 QA app? I’ve been using QA401 1.924, but of course it hasn’t been updated for almost 3 years.

Hi @HawkerAMpT, sorry I forgot you were on QA401.

I merged the changes from the QA40x into QA401, but I didn’t test to see if they worked (but I will tomorrow). Can you try and see if 1.925 for the QA401 solves your issue? It’s located at the link below.

Unfortunately it’s going to be a few days before I can check. but your using the same files I was so I assume it’s all good. We don’t have enough units (only 3) and they are all in use right now so it will be next week before I can get one and have time to try.

Any chance you can “merge in” the LOGINTERP changes to the weighting filter for 401? Seems like it might be a quick one.

:pray: Pretty Please :pray:

Hi @Ferrograph, yes, will do. Can you validate?

Thank you Matt, absolutely. Send me a test version and I’ll check it ASAP. I already have a weighting file with LOGINTERP on the first line.

Thanks again.

Hi @Ferrorgraph, version 1.926 is posted HERE.

You will need to use the command line switch of -LOGINTERP. If that is used, then the program will silently apply log interpolation to all user weighting files, regardless of whether or not the LOGINTERP is present.

To test it, create a user weighting file consisting off the following:

10000, -20

For values below 100 Hz and above 10 kHz, there will be no weighting applied. The weighting here shows 20 dB over 2 decades, and so, at 1 kHz, the gain should be precisely 10 dB. You can put the QA401 in loopback, generate a -20 dBV FR sweep, and verify at 100 Hz the gain is 0, at 1k it’s 10 dB and at 10k it’s 20 dB. And then outside of the 100 to 10k the gain is 0 dB. And most importantly, in x log axis, the slope will be a flat line.

Please try and let me know what you see.

@matt getting back to the original topic.

The new app mostly fixes the issue. It’s way better above 1KHz. However I’m still getting jumps that are too large below 100Hz. This is an issue as I try to recover from 60Hz noise. I’m finding often there is a jump from about 40Hz to 60Hz, which is just too big at half an octave. Are you doing frequency jumps in Hz rather than Octaves? That seems to be the root problem. As we go up the jumps are fractions of an octave but many Hz, as we go down it’s not many Hz but it’s a lot of an octave. I also notice you are often missing the exact center of a peek.

My gut is your whole approach may be off if you are dividing the spectrum up linearly. Try a minimum step of 1/12 octave or something like that. Also perhaps you need to scan for change in level more than going by frequency steps.

What I have now is easy to edit and works much better, so thank you. Though it does still require some hand edititing.

Thanks for the report back. The algorithm doesn’t care about frequencies ranges. It starts at a given point (anchor), and steps to the next higher point and throws out points until it sees a change of 0.1% in amplitude response. Once the error exceeds that, it keeps that point and repeats the process over and over. So, you should be able to look at an export and verify the change between adjacent points in the export are very close in magnitude.

hmm. 0.1% is 8mdB right? I am definitely seeing jumps bigger than that <100Hz so something still isn’t right. A clue might be that, lets say I have a 2dB peek at 60Hz, then by 61Hz it’s recovered back to the base line, but there is a line from 60Hz to 40Hz the other way that it misses before it “recovers” to the base line. My “fix” is to just change "40Hz to “58” hz in a text editor and I am close enough.
I still think a “fix” might be to make the minimum step be say 1/12 octave or something useful. Even 1/3 octave would be better than I currently am getting.

I wish I had grabbed an example, but alas I was trying to get work done on a Friday night and didn’t think about it. I can perhaps later if you need.

BTW I tried the QA40x app you posted. I gave up trying to figure out how to get to the graph app. I assume, unlike the QA401 app you can’t get there without the unit attached? It’s super handy that I can edit off line while someone else is using my unit. We only have 3 units and it’s not enough so editing off line is super important so an engineer can design while a tech uses the unit.

It’s the in the same place on the QA40x and as the QA401, but the menu is disabled if the HW isn’t connected. I logged an issue on github to improve that.

If you can upload a single capture that will fail to generate a correct mask I’ll take a look. I just took a look using a bass guitar EQ pedal and it looks like it tracked it fine. But maybe a sharper notch would cause an issue.

@matt thanks for looking into this. I tried to recreate what I got Friday with no luck, but maybe I didn’t remember the mask generation settings. I did about a dozen masks on Friday and about 3 of them had this issue and only below 60Hz. I think if your using smaller number (0.5db -1dB min/max, sigma 3 or 4) you see it more often.

Today I tried the 4 I thought might be it and couldn’t recreate my problem. However before your changes all of them had problems and they also had problems from 1-10KHz which I don’t see anymore either. So thank you. Next time I see this happen in the real world I’ll take better notes.

thanx for helping.