Post Go back to editing

ADAU 1761 : sudden sampling frequency shift in function of Y memory allocation

Hi

Attached are 2 simple project files containing a 1kHz generator, and an adaptive filter with 712 coeffs  (that isn,t doing anythin) .

179 Mips out of 1024 are used

734 words out of 4096 words X Mem are used

766 words out of 1024 words Y mem are used

Fs = 48 kHz; I measure a bitclock of 3.125 MHz, a Mclk of 12.8 MHz and a Wordselect clock of 48 kHz at the pins of the EVAL board

The 1kHz is available at the output, so working fine.

I increase the length of the adaptive filter to 720 coeffs; still doing nothing:

179 Mips out of 1024 are used

742 words out of 4096 words X Mem are used

774 words out of 1024 words Y mem are used

Fs = 48 kHz; I measure a bitclock of 3.125 MHwx, a Mclk of 12.8 MHz and a Wordselect clock of 48 kHz at the pins of the EVAL board

BUT , Result is now that the output 500 Hz is measured ! It seems that the DSP is running at 24 kHz iso 48 kHz. But clocks are identical.

When I increase the DSP sampling rate in the DSP REgister to 96 kHz, I get 750 Hz... impossible to explain this

Apparently something has changed in the DSP sampling rate  but I can,t find any indication .

I don,t see it neither in the compiled .h files.

It has nothing to do with the adaptive filter itself, just a function that uses more than 766 Y mem words triggers the fault.

Can anyone help ?

Best regards

Stefan Willems

Metis Acoustics

stefan@metisacoustics.be

Best regards

Stefan

Parents Reply Children
  • Sorry for the long delay in responding. You have to zip the files before uploading or dropping onto the window. It will only upload picture files, PDFs or Zipped files. 

    The issue you have is probably caused by the wrong sampling rate in SigmaStudio. Up at the top of SigmaStudio it needs to say 48kHz. Also, if you right click on the input block you can click on "set sample rate". When it opens you can see what it is set for. 

    It sounds like the clocks on the board are OK since you measured them.

    Dave T

  • Hello,

    Thanks for the files you recently sent via our field engineer. 

    I looked at the projects and I think I see the issue.

     

    Frist let me explain how this core works. Every frame, when it reaches the end of the DSP program it executes NOPs until it gets an interrupt from the clock that is set in the DSP Sampling Rate register setting. This interrupt is what signals the core to start running the program again.

    Well, if the core is still executing instructions then the interrupt is masked. So when the next frame starts the DSP just continues to finish the pervious frame then starts with the NOPs. So it misses the interrupt and so the program is run every other frame which is half the sample rate.

     

    So your program shows 184 instructions used in total with the NLMS block consuming 111 of the 184 instructions. It is clear to me that the report for the NLMS MIPS usage is in error. Here is why I say that.

     

    You have the working program set to 712 taps. You have the non-working program set to 720 taps. This is an FIR filter and this core executes one tap per cycle of the core. So there is no way to use only 111 cycles to calculate a 712 or 720 tap filter.  So there are some gross errors with the MIPS calculation when using the NLMS block.

    So you will need to reduce the number of taps in the filter to keep the MIPS under the 1024 limit. Since the Compiler Output report will not be helpful, Using an oscillator like you did is a good way to know if you are exceeding the number of MIPS.

     Dave T