Post Go back to editing

Noise Issue During Runtime Parameter Control in SigmaStudio+ Example (ADSP-2156x)

Thread Summary

The user encountered noise issues when changing parameters in Sigma Studio+ via SPI during runtime on the ADSP-21568 SOM-CRR-EZLITE board. The noise was more prominent with increased volume levels in the Volume Control module. The Analog Devices support team provided an updated utility function, which resolved the issue.
AI Generated Content
Category: Software
Product Number: ADSP-21568
Software Version: Sigma studio plus 2.4.0

Dear Team,
   We are trying to verify the example code given at C:\Analog Devices\SigmaStudioPlus-Rel2.4.0\Target\Examples\Demo\ADSP-2156x.which is available in the installation path of SigmaStudioplus 2.4.0.

   We have noise observation (particularly audible with music streams) when changing parameters in Sigma Studio + via SPI in runtime.

   Please find the attached image for your reference.

                         

Regards,
Deiveega Sundaram

Edit Notes

Board image is added
[edited by: Sundaram37 at 7:07 AM (GMT -4) on 17 Oct 2025]
  • Hi Sundaram,
    We will check and report this observation to internal team. Could you please confirm SigmaStudio+ 2.3.0 having same issue?

    If possible, could you try providing the audio input from a mobile device or another source instead of a PC? We've noticed that when the SOM CRR EZ LITE board is connected to a PC for audio input, it tends to amplify some grounding-level noise.

  • Hi Team,

    We are currently trying to verify the example code provided in LibIntegrationExample. We attempted this using SigmaStudio+ version 2.3.0, but the same issue persists.

    We checked the input using a mobile device instead of a PC, and the issue still remains.

    Please share your feedback.

    Regards,
    Deiveega Sundaram

  • We are not able to reproduce the issue with default example. Could you please share the target application code and SS+ project to analyze further? 

  • Hi Team,

    Please find the project files for your reference. We had confirmed noise observation in Analog Audio Output best noticeable with Music Streams.

    Please let us have your feedback on this.

    Regards,

    Sundaram.LibIntegrationExample.zipADSP-21568 Audio Processing Example.zip

  • Hi,

    We did not observe any noise issues using the code and schematic you provided. However, distortion occurs when the PC volume is set to maximum, likely due to speaker power limitations. Playback from a mobile or external device does not show this issue.

    Please verify your evaluation hardware—if available, try with another board and ensure you're using the correct stereo headphone connectors. Also, is the noise consistently present, or does it occur only after specific actions in the schematic?

  • Dear Team,
    We are used to evaluating various codes in many of the ADI provided EZKITS (both SHARC and SIGMA DSP) and have never encountered anything that had to do with Maximum PC volume, so we do not think that could be the cause of this.
    We have verified this in another hardware too and issue is persistent. Noise is more prominent with increased volume set in Volume Control module and becomes less prominent as we reduce the levels.

    Regards,

    Sundaram

  • Hi Team,
       Can you please check the above observation. Please Provide your feedback.


    Regards,
    Sundaram

  • Hi,
    Please try the updated utility function and share the results. The ADSP-21568 SOM-CRR-EZLITE features a more powerful stereo output amplifier compared to other evaluation boards. While the additional audio data shift did not cause any noise issues on other boards, it appears to affect the ADSP-21568.




    /******************************************************************************
     Copyright (c) 2012 - Analog Devices Inc. All Rights Reserved.
     This software is proprietary & confidential to Analog Devices, Inc. 
     and its licensors. 
     ****************************************************************************** 
    
     Title: SigmaStudio for SHARC Application
    
     Description: Contains routine to check whether non floating point number is
     			  present in output.
    
     ******************************************************************************/ 
    
    .global IsNanInf.;
    .global CopyFix2Float.;
    .global CopyFloat2Fix.;
    
    .section/pm/DOUBLE32 adi_fast_prio0_code;
    IsNanInf.:
    //-------------------------------------------------------------------
    //   Procedure statistics:
    //   Frame size            = 10 words
    //   Scratch registers used:{r0-r2,r4,r8,r12,i12,acc,mcc}
    //   Call preserved registers used:{i7}
    //   r4 = BufferPointer, r8 = nBufLength, r0 = return value
    //   Return value = 1 if input INF/NAN/IND else 0
    //	 A single-precision NaN value is one whose mantissa is not zero and 
    //	 whose exponent is set to the maximum - the sign bit is ignored). 
    //-------------------------------------------------------------------
    
    	/* Store value of registers/DAGS used */
    	modify(i7,-9)(nw);
    	dm(-9,i6) = r1;
    	r1=i0;
    	dm(-8,i6) = r1;
    	r1=m0;
    	dm(-7,i6) = r1;
    	
    	i0 = r4;
    	m0 = 1;
    	r4 = dm(i0,m0);
    	r2 = 0;
    	r0 = r0 - r0; 
    		
    		LCNTR = r8, do (pc,IsNanInf_LoopEnd) until LCE;	
    		if ne jump exit_loop_NAN (la);	// Jump out of loop if a non floating point number detected	
          	r1 = fext r4 by 0:23;          	// Extract mantissa, bits 0-23
          	if not sz r0 = m0;				// If mantissa not 0 r0 = 1
          	r1 = fext r4 by 23:8 (se);      // Extract exponent, bits 23-30 and sign-extend   
          	if not sz r0 = r0 - r0;			// If mantissa not 0 and exponent is zero r0 = 1 else r0 = r0-r0 = 0
          	r1 = r1+1, r4 = dm(i0,m0);      // R1 becomes zero if exponent was max r0 = 1           
          	if eq r0 = m0;          		// if exponent == max return 1 (NAN and INF)                 
          	IsNanInf_LoopEnd:r1 = r0 + r0;	// Dummy operation to get flag to check if NAN/INF/IND has occurred
          	
        
    	/* Restore values */
    exit_loop_NAN:	r1=dm(-7,i6);
    	m0=r1;
    	r1=dm(-8,i6);
    	i0=r1;	
    	r1=dm(-9,i6);
    	
    	/* Return nResult*/
    	i12=dm(m7,i6);
    	jump (m14,i12) (db);  rframe; nop;
    IsNanInf..end:
    
    
    
    .section/pm/DOUBLE32 adi_fast_prio0_code;
    CopyFix2Float.:
    
    	modify(i7,-7)(nw);
    	dm(-6,i6)=r9;
    	dm(-5,i6)=r14;
    	dm(-4,i6)=r15;
    	r2=m3;
    	dm(-3,i6)=r2;
    	r2=i5;
    	dm(-2,i6)=r2;
    	r0=dm(2,i6);
    	r2=0;
    	
    	/* Check for 0 value of the loop count */
    	r0=r0+r2;
    	if eq jump exit_loop_Fix2Float;
    	
    	r0=r0-1, m4=r8;
    	r0=r0-1;
    	i4=r12;
    	i5=r4;
    	m3=dm(m6,i6);
    
    	r1=-31;
    	r14=dm(3,i6);
    	
    	r9=8;
    	r15=0;
    	
    	r14 = r14+r15;
    
    	if ne r15=r9;
    	
    	r2=dm(i5,m4);
    	r4=lshift r2 by r15;
    	f8= FLOAT r4 BY r1,r2=dm(i5,m4);
    	lcntr=r0, do (pc,CopyFix2Float_loop_end) until lce;
    	r4=lshift r2 by r15, dm(i4,m3)=r8;
    CopyFix2Float_loop_end:
    	f8= FLOAT r4 BY r1,r2=dm(i5,m4);
    	r4=lshift r2 by r15, dm(i4,m3)=r8;
    	f8= FLOAT r4 BY r1;
    	dm(i4,m3)=r8;
    	
    exit_loop_Fix2Float:	
    	r9=dm(-6,i6);
    	r14=dm(-5,i6);
    	r15=dm(-4,i6);
    	m3=dm(-3,i6);
    	i5=dm(-2,i6);
    	i12=dm(m7,i6);
    	jump (m14,i12) (db); rframe; nop;
    	
    CopyFix2Float..end:
    
    
    .section/pm/DOUBLE32 adi_fast_prio0_code;
    CopyFloat2Fix.:
    
    	modify(i7,-7)(nw);
    	dm(-6,i6)=r9;
    	dm(-5,i6)=r14;
    	dm(-4,i6)=r15;
    	r2=m3;
    	dm(-3,i6)=r2;
    	r2=i5;
    	dm(-2,i6)=r2;
    	r0=0;
    	r2=dm(2,i6);
    	
    	/* Check for 0 value of the loop count */	
    	r2=r2+r0;
    	if eq jump exit_loop_Float2Fix;	
    	
    	m4=r8;
    	i4=r12;
    	r12=r2-1, i5=r4;
    	m3=dm(m6,i6);
    	
    	r1=23;
    	b12 = r10;
    	r10=8388607;
    	
    	r9=8;
    	r15=0;
    	r14=dm(3,i6);
    	
    	r14 = r14+r15;
    	
    	if eq r15=r9;
    	
    	r8=dm(i5,m4);
    	
    	lcntr=r12, do (pc,CopyFloat2Fix_loop_end) until lce;
    	r2=trunc f8 by r1;
    	r4=clip r2 by r10, r8=dm(i5,m4);
    	comp(r4,r2);
    	if ne r0=m6;	
    	r4 = lshift r4 by r15;
    CopyFloat2Fix_loop_end:	
     	dm(i4,m3)=r4;	
    	r2=trunc f8 by r1;
    	r4=clip r2 by r10;
    	comp(r4,r2);
    	if ne r0=m6;	
    	r4 = lshift r4 by r15;
    	dm(i4,m3)=r4;
    
    	r10 = b12;
    exit_loop_Float2Fix:	
    	r9=dm(-6,i6);
    	r14=dm(-5,i6);
    	r15=dm(-4,i6);
    	m3=dm(-3,i6);
    	i5=dm(-2,i6);
    	i12=dm(m7,i6);
    	jump (m14,i12) (db); rframe; nop;
    		
    CopyFloat2Fix..end:
    
    

  • Hi Team,
    Thanks for your response.

    We made the changes you suggested, and now it is working fine.

    Regards
    Sundaram