ΣSigmaStudio Ask AI Русский Log in

VCO Phase Control/Modulation on ADAU1701

SigmaDSP & SigmaStudio BenKB Apr 12, 2016 00:00 2 replies Original on forum ↗
Subscribe
BenKB Question
Apr 12, 2016 00:00

Hello all,

is there a way to control the phase of a VCO block, in order to have PM (Phase Modulation)?

Right now, I am able to create projects with FM which are working perfectly but I would need also to control the phase of a VCO.

I think it is not a big deal to implement within the VCO block, since it's clearly a phase accumulator adressing a sine lookup table located in the ADAU1701 ROM.

Thanks for the help

Audio Signal Processors

adau_1701

SigmaDSP Audio Processors

vco

adau1701

phase_modulation

Show More

KJBob Reply
Apr 13, 2016 00:00

Hello Ben,

Perhaps this idea would work in your application: The VCO converts a given constant input to a frequency, which in turn is a constantly increasing phase -- phase is the integral of frequency. If we put a differentiator before the VCO, we can get phase modulation instead. One way to make a differentiator is with a simple two-tap FIR filter, as shown below. This filter, with the absolute value of its + and - coefficients equal to K, has a frequency-dependent gain of G = 4*pi*K*f / fs

Best regards,

Bob

8db389115704a30d2fe9f8543196973c.png
8db389115704a30d2fe9f8543196973c.png
8db389115704a30d2fe9f8543196973c.png-471x229.png
8db389115704a30d2fe9f8543196973c.png-471x229.png
BenKB Reply
Apr 14, 2016 00:00

Hi Bob,

this is not a bad idea. I have to check it, thanks for the proposal.

The possible issue I see is that the "FM oscillators" used in sound synthesis are both controlled in term of frequency and phase.

Technically, oscillators found on synthesizers are PM, not FM (even if synths are called "FM synths")

I will try to find a good diagram which shows how things are organized in such a oscillator, it may be useful for a better understanding of what I try to implement on the Sigma.

Beside this, I have partly reversed the binary code used for the VCO (yes, I know I am crazy ), and I think I have understood how it is implemented. As far as I can see, they use a phase accumulator controlled by the frequency input (exactly like in their Sine and Saw sources, but it's not an input but a parameter in this case). This phase accumulator addresses something I suppose to be a sine LUT located in ROM (apparenly, the SigmaDSP have two tables in ROM : one containing a sine, and another one containing exp coefficients)

Based on this, I think it is possible to "link" the code generated by SigmaStudio with some custom code which attacks directly the phase accumulator located in the Data RAM.

I will post the results of these two solutions here, they may be useful for other programmers

Benoit