ΣSigmaStudio Ask AI Русский Log in

Something about SigmaStudio clipper, probe and others

SigmaDSP & SigmaStudio drugoimir May 5, 2012 00:00 4 replies Original on forum ↗
Thread Summary

Thread Summary

The user encountered issues with the ADAU1701 evaluation kit in SigmaStudio, including a probe frequency axis limit of 22KHz, hard clipper asymmetry when grown to stereo, and parameter editing issues. The support engineer confirmed the probe frequency limit and parameter editing issues, and provided a workaround for the clipper by manually writing to the 'ghost' negative threshold parameter. For the compressor gating function, the engineer suggested using two envelope followers and a logic cell to control the release time based on input signal levels.
AI Generated Content
Subscribe
drugoimir Question
May 5, 2012 00:00

Good morning,

i'm using an adau1701 evaluation kit from few days and i'm really impressed for its capabilities.

I got the kit three days ago and, starting from zero, i almost completed my job. Really nice!!

But, during development, i had some little "troubles" which i report:

The probe frequency axis cannot be set above 22KHz, while i'm using 192KHz sampling rate.

Regarding the clipper, i cannot get the hard clipper to work properly: i need a symmetrical

clipper, so i have to clip equally both the positive and negative level.

Well, i select to clip both edges, i put the two constants, the program which is running

on the 1701 is not updated when i change the clipper parameters, so i compile and download and

it seems that it always clips just one part of the wave or, even if i put identical

coefficients, eg. 0.5 and -0.5, it does an asymmetrical clip; the cubic clipper is ok but i cannot use it.

Using the dynamic compressor, is there a way to implement a "gating" function ?

In detail, i should freeze the release or setting it to a large value so

the gain should not rise if the input signal falls below a certain threshold, this to

avoid amplifying noise.

Then, sometimes i cannot edit the parameters into the elements: i can select and drag them,

but if i try to change something, the edit box doesn't allow writing and the pointer changes to

the "wiring" icon, but all ports are still connected.

I have to close the project, not the ide, and reload it again.

Last question, i'm using a fir filter "grew" to have two inputs and two outputs.

I was expecting to have just one coefficient table and two separated memory blocks

for the datas.

Instead, it seems that it has also two separated memory blocks for the coefficients

though they are identical.

I don't know if this would be possible, but if the "grown" filter could be implemented

using just one coefficients table and separated data buffers, there could be more

space in memory.

Many thanks for your support.

Audio Signal Processors

processors and dsp

SigmaDSP Audio Processors

Processors and Microcontrollers

adau1701

ADIApproved Reply
May 8, 2012 00:00

The probe frequency axis cannot be set above 22KHz, while i'm using 192KHz sampling rate.

I will request that this limit is increased in future releases.

Regarding the clipper, i cannot get the hard clipper to work properly: i need a symmetrical

clipper, so i have to clip equally both the positive and negative level.

Well, i select to clip both edges, i put the two constants, the program which is running

on the 1701 is not updated when i change the clipper parameters, so i compile and download and

it seems that it always clips just one part of the wave or, even if i put identical

coefficients, eg. 0.5 and -0.5, it does an asymmetrical clip; the cubic clipper is ok but i cannot use it.

I do not see this problem. I tried the hard clipper on the ADAU1701 today and saw proper operation, with clipping at the desired points. Please see the screenshot attached.

Using the dynamic compressor, is there a way to implement a "gating" function ?

In detail, i should freeze the release or setting it to a large value so

the gain should not rise if the input signal falls below a certain threshold, this to

avoid amplifying noise.

Please see this thread: Creating a noise gate in SigmaStudio

Then, sometimes i cannot edit the parameters into the elements: i can select and drag them,

but if i try to change something, the edit box doesn't allow writing and the pointer changes to

the "wiring" icon, but all ports are still connected.

I have to close the project, not the ide, and reload it again.

I think you are probably experiencing this problem: FAQ: Why can't I control any of the knobs or sliders in my SigmaStudio project?

Last question, i'm using a fir filter "grew" to have two inputs and two outputs.

I was expecting to have just one coefficient table and two separated memory blocks

for the datas.

Instead, it seems that it has also two separated memory blocks for the coefficients

though they are identical.

I don't know if this would be possible, but if the "grown" filter could be implemented

using just one coefficients table and separated data buffers, there could be more

space in memory.

I agree. The reason for this problem is that this particular cell seems to have an "add" function (which duplicates the program, parameters, and data), as opposed to a "grow" function (which duplicates the program and data, but not the parameters). I will report this.

19a85348e1c47a7bace7d24fb71e97cb.jpg
19a85348e1c47a7bace7d24fb71e97cb.jpg
19a85348e1c47a7bace7d24fb71e97cb.jpg-450x394.jpg
19a85348e1c47a7bace7d24fb71e97cb.jpg-450x394.jpg
drugoimir Reply
May 8, 2012 00:00

Many thanks Brett,

i made other tests now on the clipper and i discovered this:

this is a live sinusoid input on a single input hard clipper:

it is ok and symmetrical like your graph and it's

how it should work.

Now i grow the clipper to have a second input and,

without touching the clipping levels, the oscilloscope Y

axis sensitivity and the generator output level,

this is what i get:

You can see that both clipping thresholds are lower

(in the upper image you have 5 vertical divisions peak

to peak, in this you have about 2.3 divisions peak to peak)

and the negative part of the sinusoid is clipped more than

the positive.

It seems that the problem arises when you grow the clipper;

with just one input, i confirm, it's ok like you said.

Found the problem:

when growing the clipper, it seems that, while it mantains

just one positive threshold, creates N references for the negative

and intializes them to zero.

Param Address: 3

Param Name: HardClipAlg1up_2 3

Param Data:

0x00, 0x40, 0x00, 0x00

Data 5.32:

0.5

Data 28.0:

4194304

Param Address: 4

Param Name: HardClipAlg1_2 4

Param Data:

0x0F, 0xC0, 0x00, 0x00

Data 5.32:

-0.5

Data 28.0:

-8388608

Param Address: 5

Param Name: HardClipAlg1_2 5

Param Data:

0x00, 0x00, 0x00, 0x00

Data 5.32:

0 <===this is zero while should be -0.5

Data 28.0:

0

One note about the generated header files,

i tried to upload via the host microcontroller the program.

It's all ok, but i noticed that when i read back

the parameter registers, while the program

loaded, for example, this sequence:

...

0xFF, 0xFF, 0x9E, 0x17,

0xFF, 0xFF, 0x92, 0xD1,

0xFF, 0xFF, 0xAC, 0x36,

...

i read back

...

0x0F, 0xFF, 0x9E,0x17

0x0F, 0xFF, 0x92, 0xD1,

0x0F, 0xFF, 0xAC, 0x36,

...

ok, these are 28 bits values packed into 32 bits

so the last nibble should be not important,

but i think that i should read back what i write.

Regarding the gating, my question was different.

Ok, you can avoid noise rushing in with a noise gate, but

what i was asking for was a method to avoid the

compressor's band to release when the input signal

was below a certain level.

It could be intended like a "dual release compressor"

in which one release time, say "fast", is used for

normal operation and another release time, say "very slow",

is used when the input signal is below threshold.

This, in some part, prevents distortion when passing

from silence, where, without this function, the compressors

were totally "open"=maximum gain, to sudden music or

speech: in the first milliseconds, the compressors

have to pass from highest gain to, maybe, the gain that

they had just before the silence part.

In this case, freezing their release or making it extremely

slow when silence begins, results in more pleasant

listening.

Thank you!

90c8af50f15fcba92fa51bc687178776.jpg
90c8af50f15fcba92fa51bc687178776.jpg
90c8af50f15fcba92fa51bc687178776.jpg-290x217.jpg
90c8af50f15fcba92fa51bc687178776.jpg-290x217.jpg
a2c66450e8e44153d209b0fa44a86505.jpg
a2c66450e8e44153d209b0fa44a86505.jpg
a2c66450e8e44153d209b0fa44a86505.jpg-300x225.jpg
a2c66450e8e44153d209b0fa44a86505.jpg-300x225.jpg
ADIApproved Reply
May 9, 2012 00:00

Thanks for the great debugging work! This definitely looks like a SigmaStudio issue. I will report it to the software team immediately.

Regarding the top nibble of the data stored in memory... Here's a post I wrote to explain that:

Parameter RAM: Writing 0xFF but Reading 0x0F
Regarding the compressor, I think there is a method we can use to implement the functionality you want. I would recommend using two envelope followers (one fast and one slow) and then using a logic cell to select between them. That would feed into the detection input on a dynamics processor. This would require some refinement, but I imagine it could work.

MaxAudioDSP Reply
Feb 21, 2015 00:00

Hi, from my own experiments with ADAU1701 and Sigma Studio V3.10 Build 4 Rev 1326

the problem found by drugoimir is still present with this release.

I'm using a custom library written for arduino/energia to talk with DSP and to fix this problem I have to write

also the "ghost" parameter wich is a duplicated parameter negative threshold.

I'm using an hard clipper block growed to stereo, I see

Param Address: 4

Param Name: HardClipAlg1up_3 4

Param Data:

0x00, 0x80, 0x00, 0x00

Data 5.32:

1

Data 28.0:

8388608

Param Address: 5

Param Name: HardClipAlg1_3 5

Param Data:

0x0F, 0x80, 0x00, 0x00

Data 5.32:

-1

Data 28.0:

-16777216

Param Address: 6

Param Name: HardClipAlg1_3 6

Param Data:

0x00, 0x00, 0x00, 0x00

Data 5.32:

0

Data 28.0:

0

but the last one is the second negative threshold parameter wich is wrongly initialized to zero, it should be

-1 to work properly (symmetric clip).

Also I noticed sigma studio generated header files are missing this parameter address

...

...

...

/* Module HardClip1 - Standard Clip*/

#define MOD_HARDCLIP1_COUNT 2

#define MOD_HARDCLIP1_DEVICE "IC1"

#define MOD_HARDCLIP1_ALG0_HARDCLIPALG1UP0_ADDR 4

#define MOD_HARDCLIP1_ALG0_HARDCLIPALG1UP0_FIXPT 0x00800000

#define MOD_HARDCLIP1_ALG0_HARDCLIPALG1UP0_VALUE SIGMASTUDIOTYPE_FIXPOINT_CONVERT(1)

#define MOD_HARDCLIP1_ALG0_HARDCLIPALG1UP0_TYPE SIGMASTUDIOTYPE_FIXPOINT

#define MOD_HARDCLIP1_ALG0_HARDCLIPALG1UP1_ADDR 5

#define MOD_HARDCLIP1_ALG0_HARDCLIPALG1UP1_FIXPT 0xFF800000

#define MOD_HARDCLIP1_ALG0_HARDCLIPALG1UP1_VALUE SIGMASTUDIOTYPE_FIXPOINT_CONVERT(-1)

#define MOD_HARDCLIP1_ALG0_HARDCLIPALG1UP1_TYPE SIGMASTUDIOTYPE_FIXPOINT

/* Module Nx2-1 - Stereo Switch Nx2*/

#define MOD_NX2_1_COUNT 3

#define MOD_NX2_1_DEVICE "IC1"

#define MOD_NX2_1_ALG0_STAGE0_STEREOSWITCHNOSLEW_ADDR 7

...

...

...

So I have modified my libraries to write to this "ghost" parameter and now it seems to work ok.

Thanks