Post Go back to editing

Miscellaneous click and pops with delay block

Category: Software
Product Number: SigmaDSp
Software Version: 4.6

I have been tyring to implement a simple chorus effect on the ADAU1701 using a voltage-controlled fractional delay, and a couple of sinusoidal oscillators.

When I download and run the attached SigmaDSP program, the ADAU1701 outputs click and pops even with no signal present. These can actually be seen using the real-time display, as shown in the screen grab.

I don't understand the source of the problem, but I do know that when the oscillators are turned off, the clicks and pops stop.

I would love help from anyone who could explain what I'm doing wrong.

Thanks.

Delay1.dspproj

Parents
  • Hello markscohen,

    Do you have a system controller "talking" to the part?

    I do not see any traffic on the Capture window so it does not look like you are sending communications using SigmaStudio. 

    You listed that you are using Rev 4.6. I do not think that is the issue. What hardware are you using?

    Feel free to upload your project. 

    Dave T

  • Dave: I am feeling kind of desperate here. Do you have any further thoughts on this problem? 

    Thanks so much,

  • Hello Mark,

    Sorry I have been busy. 

    I looked at your program. the input to the part is not the correct data. Here is what you are sending:

    As you see by the readback it can be a number in the range of a small negative number to almost a 2 in 5.23 format.  

    A 2 in 5.23 format is 1000000

    In decimal that is 16,777,216

    The cell wants to have the number of samples for the current delay setting and it needs to be between 0 and the max samples. you have the max set to 960. So you are sending values that are MUCH higher. The DSP program is written simply and does not check for bounds. The number coming in will be used as an offset pointer from the start of the delay line. So you are picking up samples from WAY beyond the location of the delay memory. Therefore it is garbage data. 

    I am not 100% certain what you are trying to do but I think you are trying to do a chorus of some sort? You want the delay times to be very slowly changing. So here is how you need to do it. 

    Change the addition blocks to multiplies. 

    Change the format of the DC block to 28.0 so you can enter 960 in a user friendly decimal number.

    Get the absolute value of the oscillator outputs so they never go negative. Then they will go between 0 and 1 for the multiplication. 

    Just make sure the DC block does not have a number that is larger than the MAX samples of delay. 

    Note I added a readback with the two gain blocks so you can check the range that the output of the multiply is producing. You will see it never goes over 0x3C0 which is 960 in hex. Note you can also set the readback to be 24.0 and see it in integer format. 

    I think this will work well for you. 

    Dave T

Reply
  • Hello Mark,

    Sorry I have been busy. 

    I looked at your program. the input to the part is not the correct data. Here is what you are sending:

    As you see by the readback it can be a number in the range of a small negative number to almost a 2 in 5.23 format.  

    A 2 in 5.23 format is 1000000

    In decimal that is 16,777,216

    The cell wants to have the number of samples for the current delay setting and it needs to be between 0 and the max samples. you have the max set to 960. So you are sending values that are MUCH higher. The DSP program is written simply and does not check for bounds. The number coming in will be used as an offset pointer from the start of the delay line. So you are picking up samples from WAY beyond the location of the delay memory. Therefore it is garbage data. 

    I am not 100% certain what you are trying to do but I think you are trying to do a chorus of some sort? You want the delay times to be very slowly changing. So here is how you need to do it. 

    Change the addition blocks to multiplies. 

    Change the format of the DC block to 28.0 so you can enter 960 in a user friendly decimal number.

    Get the absolute value of the oscillator outputs so they never go negative. Then they will go between 0 and 1 for the multiplication. 

    Just make sure the DC block does not have a number that is larger than the MAX samples of delay. 

    Note I added a readback with the two gain blocks so you can check the range that the output of the multiply is producing. You will see it never goes over 0x3C0 which is 960 in hex. Note you can also set the readback to be 24.0 and see it in integer format. 

    I think this will work well for you. 

    Dave T

Children
  • Thank you so much for your reply, which I’ll check out today. You are unbelievably supportive of this community. 

  • Hello Mark,

    I got to thinking about this afterwards and I want to add one more little detail that I think will be important for your application. 

    I just got the absolute value of the sine generator output to keep it from going negative. However, that produces a steeper and sharper transition around the zero crossing. It would be better to reduce the sine wave from a 0dBFS signal that goes between 1 and -1 to be half the amplitude then offset it with a DC offset of 1/2. So this would give you a true sine wave for the delay control. Let me show you. 

    Here are the two circuits:

    Notice I named the graphs as ABS and Sine...

    Here is the output they produce:

    They both produce output between 1 and zero but the speed and shape of the transition is much smoother and is a sine function however, it will use a few more MIPS o do it. It will not be a lot more and you can reuse the 0.5DC cell value by using an Alias so you only have one in the project. 

    I think this will sound better and more what you are expecting. 

    Dave T

  • Thank you, thank you, thank you. The headline is that this community is very fortunate to have you. 

    FWIW, I use a triangle waveform for the delays  it is symmetrical after the absolute value, and makes an even sampling of all delays.

    I have to work out something with the mixing, I think, as I don’t get quite the shimmering effect I’d hoped for. Perhaps others in this thread have comments?

    Did I say “thank-you”?