i did that wrong.  i meant to say:

         

           x[n] = a[n] + j*b[n] = g[n-1]*exp(j*w[n]) * x[n-1]

         

        this is the same as

         

        
                  a[n] = g[n-1]*cos(w[n])*a[n-1] - g[n-1]*sin(w[n])*b[n-1]
        
                 
        
                
                          b[n] = g[n-1]*sin(w[n])*a[n-1] + 
g[n-1]*cos(w[n])*b[n-1] 
                
                         
        


        and adjust the gain g[n] so that |x[n]|^2 = a[n]^2 + b[n]^2 converges 
to the desired amplitude squared (let's say that we want that to be 1).  you 
can adjust the gain slowly with:

         

          g[n] = 3/2 - (a[n]^2 + b[n]^2)/2

         

        that will keep the amplitude sqrt(a[n]^2 + b[n]^2) stably at 1 even as 
w[n] varies.

         

        i've done this before (when i wanted a quadrature sinusoid) for doing 
frequency offset shifting (not pitch shifting).  worked pretty good.

--


r b-j                         r...@audioimagination.com



"Imagination is more important than knowledge."
 
> A very simple oscillator recipe is:

>

> a(t+1) = C*a(t) - S*b(t)

> b(t+1) = S*a(t) + C*b(t)

>

> Where C=cos(w), S=sin(w), w being the angular frequency. a and b are your

> two state variables that are updated every sample clock, either of which

> you can use as your output.

>

> There won't be any phase or amplitude discontinuity when you change C and

> S. However, it's not stable as is, so you periodically have to make an

> adjustment to make sure that a^2 + b^2 = 1.

>

> -Ethan

>

>

> On Wed, Feb 20, 2019 at 12:26 PM Ian Esten <i...@ianesten.com> wrote:

>

>> The problem you are experiencing is caused by the fact that after changing

>> the filter coefficients, the state of the filter produces something

>> different to the current output. There are several ways to solve the

>> problem:

>> - The time varying bilinear transform:

>> http://www.aes.org/e-lib/browse.cfm?elib=18490

>> - Every time you modify the filter coefficients, modify the state of the

>> filter so that it will produce the output you are expecting. Easy to do.

>>

>> I will also add that some filter structures are less prone to problems

>> like this. I used a lattice filter structure to allow audio rate modulation

>> of a biquad without any amplitude problems. I have no idea how it would

>> work for using the filter as an oscillator.

>>

>> Best,

>> Ian

>>

>> On Wed, Feb 20, 2019 at 9:07 AM Dario Sanfilippo <

>> sanfilippo.da...@gmail.com> wrote:

>>

>>> Hello, list.

>>>

>>> I'm currently working with digital resonators for sinusoidal oscillators

>>> and I was wondering if you have worked with some design which allows for

>>> frequency variations without discontinuities in phase or amplitude.

>>>

>>> Thank you so much for your help.

>>>

>>> Dario
 
 
 
 
_______________________________________________
dupswapdrop: music-dsp mailing list
music-dsp@music.columbia.edu
https://lists.columbia.edu/mailman/listinfo/music-dsp

Reply via email to