On Mon, 11 May 2026 10:23:35 -0500
David Lechner <[email protected]> wrote:

> On 5/11/26 10:02 AM, Rodrigo Alencar wrote:
> > On 26/05/11 09:46AM, David Lechner wrote:  
> >> On 5/10/26 4:30 AM, Rodrigo Alencar wrote:  
> >>> On 26/05/09 06:42PM, David Lechner wrote:  
> >>>> On 5/8/26 12:00 PM, Rodrigo Alencar via B4 Relay wrote:  
> >>>>> From: Rodrigo Alencar <[email protected]>
> >>>>>
> >>>>> Add documentation for the AD9910 DDS IIO driver, which describes 
> >>>>> channels,
> >>>>> DDS modes, attributes and ABI usage examples.  
> >>>
> >>> ...
> >>>  
> >>>>> +       must be a power of 2.
> >>>>> +
> >>>>> +   * - ``frequency_offset``
> >>>>> +     - Hz
> >>>>> +     - Base FTW to which scaled parallel data is added. Range 
> >>>>> :math:`[0, f_{SYSCLK}/2)`.
> >>>>> +
> >>>>> +   * - ``phase_offset``
> >>>>> +     - rad
> >>>>> +     - Base phase for polar modulation. Lower 8 bits of POW register.
> >>>>> +       Range :math:`[0, 2\pi/256)`.
> >>>>> +
> >>>>> +   * - ``scale_offset``
> >>>>> +     - fractional
> >>>>> +     - Base amplitude for polar modulation. Lower 6 bits of ASF 
> >>>>> register.
> >>>>> +       Range :math:`[0, 1/256)`.
> >>>>> +  
> >>>>
> >>>> I guess there was some discussion on these attributes. I see some of 
> >>>> these in the
> >>>> ad9832 driver in staging, but I'm guessing they are new ABI. It isn't 
> >>>> clear to
> >>>> me from the documentation here what they actually do though. I guess 
> >>>> they are
> >>>> just basic transformations on the input signal?  
> >>>
> >>> Not sure how the ABI is not clear:
> >>>
> >>>   For a channel that allows amplitude control through buffers, this
> >>>   represents the value for a base amplitude scale. The actual output
> >>>   amplitude scale is a result with the sum of this value.
> >>>
> >>> So yes, it is a basic transformation.  
> >>
> >> I didn't have time to read the ABI docs yet. For scale_offset though,
> >> how is that different from the existing offset attribute?  
> > 
> > I suppose that existing offset ABI is applied to (raw * scale), mostly for
> > voltage channels, here the scale_offset is an offset to the scale itself.  
> 
> 
> Ah, so a very general case would be (raw * (scale + scale_offset)) + offset
> 
> when the scale can change as a function of time and comes from an external
> source.
Ah. Similar question to what I was commenting on.  Though maths is currently 
wrong
for normal offset application as it is pre scale.


        (raw + offset) * scale is normal case.
This is proposing (I think)

        (raw + offset) * (scale_offset + scale)

Altvoltages are a little odd though in that we are really always kind of dealing
in scales as it's the peak voltage that is the base unit. So they are kind
of always about scale - hence for such a single offset would be shifting the
mid voltage point which I guess is different form scale_offset.

Hmm. Not sure I can draw this but i'll give it a go...

So with no modulation going on and scale = 2.0, Raw 1000. 
(imagine these are sign waves)

  _         _       _ 2V
 / \       / \
/___\_____/___\___  _ 0V
     \   /     \
      \_/       \__ _ -2V

That is sine wave -2/2V swing.

Now if scale or voltage double it get twice as big.

If offset + 100

  _         _       _ 3V
 / \       / \
/   \     /   \   
_____\___/_____\___ _ 0v
      \_/       \__ _ -1V

Scale offset at this point seems straight forward.. Gets more fun when it's 
modulated.

For now apply a scale offset of -1 and scale becomes 2 - 1 == 1. 
  _         _       _ 1.5V
 / \       / \
/   \     /   \   
_____\___/_____\___ _ 0v
      \_/       \__ _ -0.5V

So for simple case we could just role it into scale. However the fun here
I believe is that _scale is controlled by say a ramp generator.. 

Ok. I can't really draw this.. Lets try with xs

Initial scale 1, ramping to 2 over a couple 1ish cycles, offset 1.  That is
computed sale is going from 2 to 3.
                   Peak 3
____________________________ 3V
    Peak 2.33         xx
______x_______________xx____ 2V 
     xxx             x  x
   xx   x            x
 xx      x          x
x_________x_________x_______ 0V   
           x       x 
            x      x
             x    x
______________x__x__________ -2V            
_______________xx___________ -2.5
                Peak 2.67

Key being really where this starts which is scale_offset = 1 rather than 
starting
ramp from scale of 0.

Having drawn these I'm even less clear in my head on whether we can move from
expressing that scale_offset and scale_roc in volts  - i.e. not as scales
or not.

Given need for separate control for overall mid point of waveform and the
starting point of scaling I think not.  Ah well.  The challenge will be
how to makes sure folk looking at the ABI can understand the complex
interactions of all these parameters. We may need some extra docs with
better diagrams than above.
              
Jonathan



Reply via email to