Home > Community > Forums > RF Design > how to capture 1/f noise in spectre

## Email

Recipients email * (separate multiple addresses with commas)

Message *

 Send yourself a copy

## Subscribe

Intro copy of the newsletter section here, some intro copy of the newsletter. Instruction of how to subscribe to this newsletter.

First Name *

Last Name *

Email *

Company / Institution *

 Send Yourself A Copy

# how to capture 1/f noise in spectre

Last post Tue, Apr 27 2010 9:00 PM by pureck. 2 replies.
 Started by pureck 09 Apr 2010 11:03 AM. Topic has 2 replies and 3188 views
• #### Fri, Apr 9 2010 11:03 AM

• pureck
• Joined on Tue, Sep 23 2008
• Posts 5
• Points 70
how to capture 1/f noise in spectre
 Hello I am designing a down-converter and need to capture 1/f noise corner. I need to find a way to capture the corner automatically after simulation (PSS and Pnoise) instead of using rulers to find it. Does anyone know how to grab it automatically? Thanks much in advance.
• Post Points: 20
• #### Sun, Apr 11 2010 1:33 AM

Re: how to capture 1/f noise in spectre
 Not exactly sure how you intended to determine where the 1/f corner is, but here's an example I put together to find the point in a phase noise curve of an oscilator where it moves from -30dBc/decade to -20dBc/decade (transition from flicker to thermal):`;------------------------------------------------------------------------; In this example look for change in slope of a phase noise curve;------------------------------------------------------------------------pn=phaseNoise(1 "pss_fd" ?result "pnoise");------------------------------------------------------------------------; Convert the x-axis into the log (base 10) of frequency;------------------------------------------------------------------------decade=log10(xval(pn));------------------------------------------------------------------------; And then get the phase noise versus this - this means that now we; have phase noise versus the decade number;------------------------------------------------------------------------pnVsDecade=abChangeXAxis(pn decade);------------------------------------------------------------------------; Now the slope is in db/decade;------------------------------------------------------------------------slope=deriv(pnVsDecade);------------------------------------------------------------------------; in a phase noise curve, starts at -30dB/decade, and then goes to -20dB/decade; decide the point at which you consider the "corner" (given that it's a; transition over a decade or two;------------------------------------------------------------------------freqDec=cross(slope -28);------------------------------------------------------------------------; Convert back to frequency (from decade);------------------------------------------------------------------------freq=10**freqDec`This uses this code to change the X axis:`/* abChangeXAxis.ilAuthor A.D.BeckettGroup Custom IC (UK), Cadence Design Systems Ltd.Language SKILLDate May 25, 1999 Modified May 21, 2002 By A.D.BeckettFunction to change the X Axis of a waveform to the correspondingY values of the second variable.Also function to transpose the X and Y axes of a waveform.Now handles families, and can be registered as a special function.Just call:abRegChangeXAxis()to add to the calculator.***************************************************SCCS Info: @(#) abChangeXAxis.il 11/27/08.09:59:36 1.3*//******************************************************************** ** (abChangeXAxis yVar xVar) ** ** Return a new waveform object with the x axis set to the y values ** of the second argument. ** ********************************************************************/(procedure (abChangeXAxis yVar xVar) (let (newWave) (cond ;------------------------------------------------------------------ ; Handle normal waveform ;------------------------------------------------------------------ ((drIsWaveform yVar) (setq newWave (drCreateEmptyWaveform)) (drPutWaveformXVec newWave (drGetWaveformYVec xVar)) (if (eq (drGetWaveformXVec yVar) (drGetWaveformXVec xVar)) ;--------------------------------------------------------------- ; if the x axes are the same for both, it's simple ;--------------------------------------------------------------- (drPutWaveformYVec newWave (drGetWaveformYVec yVar)) ;--------------------------------------------------------------- ; otherwise need to use value() to interpolate ;--------------------------------------------------------------- (let (xVec yVec len) (setq xVec (drGetWaveformXVec xVar)) (setq len (drVectorLength xVec)) (setq yVec (drCreateVec (drGetWaveformYType yVar) len)) (for ind 0 (sub1 len) (drAddElem yVec (value yVar (drGetElem xVec ind))) ) (drPutWaveformYVec newWave yVec) ) ) newWave ) ;------------------------------------------------------------------ ; Handle family ;------------------------------------------------------------------ ((famIsFamily yVar) (famMap 'abChangeXAxis yVar xVar) ) ; is family (t (error "abChangeXAxis - can't handle %L\n" yVar) ) ) ; cond ) ; let ) ; defun/*********************************************************************** ** (abRegChangeXAxis) ** ** Registers abChangeXAxis as a new special function in the calculator ** ***********************************************************************/(procedure (abRegChangeXAxis) (calRegisterSpecialFunction (list "abChangeXAxis" 'abChangeXAxisCB) ) t )/**************************************************************************** ** (abChangeXAxisCB) ** ** Callback function for the special function - which builds the expression ** ****************************************************************************/(procedure (abChangeXAxisCB) (calSpecialFunctionInput 'abChangeXAxis '(STACK)) )/**************************************************************** ** (abTransposeXY var) ** ** Swap the X and Y axes of a variable ** ****************************************************************/(procedure (abTransposeXY var) (let (newWave) (setq newWave (drCreateEmptyWaveform)) (drPutWaveformXVec newWave (drGetWaveformYVec var)) (drPutWaveformYVec newWave (drGetWaveformXVec var)) newWave ) )`Regards,Andrew.
• Post Points: 20
• #### Tue, Apr 27 2010 9:00 PM

• pureck
• Joined on Tue, Sep 23 2008
• Posts 5
• Points 70
Re: how to capture 1/f noise in spectre
 Hello Andrew, Thanks a lot. It works.One thing in flicker noise differs from PN is that it is 10dB/dec and we define 1/f noise corner at the point where a straight line (10dB/dec) of the flicker noise meets a horizonal line (0dB/dec) of the thermal noise as you may already know.Now it is a little difficult to decide the corner at what slope which can best interpret the real corner frequency. I guess it is up to designers' interpretation. Thanks a lot for your help.
• Post Points: 5