VCO Phase Control/Modulation on ADAU1701
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
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
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
Please log in to reply.

