I am trying, without success, to recover the integer/fractional parts of a sine wave multiplied by a constant. The integer part is used to index a delay buffer of 500 samples. I need the fractional part for interpolation of the output. Is this possible with Sigma DSP without losing too much resolution? (ADAU1761)

Since there are no bit-wise operators in SigmaStudio (yet), this is a bit tricky.

I would suggest the following approach:

To get the integer part, you need to bit-shift to the right 23 places and then back to the left 23 places. This will truncate the lower 23 bits. Unfortunately that requires a lot of processing to do.

If you read back in 28.0 format, it looks like this:

You're basically bit shifting to the right 23 bits by multiplying the input by 1 LSB. Note that the input is 12.34567 and the output is 12.

If you need to read back in 5.23 format, it gets more complicated:

The multiplies are essentially bit shifting back to the left.

Unfortunately you can't use the same method in reverse to get the fractional part, because upper bits do not truncate, they saturate. Until we get a bit shift algorithm implemented, I'm not sure how you could do that. You could probably use some logic cells or RMS table to subtract integers from the signal based on certain constraints until you get down to zero. That won't be too hard to implement, but will take a fair bit of resources.