- #1
intervoxel
- 195
- 1
- TL;DR Summary
- A recursive generator of a quadrature signal which fits exactly in a NxN grid, where N is a large power of two.
I need to recursively generate a quadrature signal which fits exactly into a grid NxN, where N is a large power of two.
After unsuccessful research, I decided to develop my own solution, starting from the waveguide-form oscillator taken from Pete Symons' book 'Digital wave generation, p. 100'.
\begin{gather}
\begin{bmatrix}\hat{ y_1}\\\hat{y_2}\end{bmatrix}
=
\begin{bmatrix}
k &k-1\\
k+1&k
\end{bmatrix}
\begin{bmatrix} y_1\\y_2\end{bmatrix}
\end{gather}
where [itex]k=cos(\omega T)[/itex].
This formula works perfectly when using floating point numbers.
In the case of the NxN grid, we have [itex]\omega T=2\pi/N[/itex], and the amplitude is [itex]N/2[/itex].
For [itex]N>>1[/itex], we have [itex]k=N/2-1[/itex].
The difference equations then become
\begin{gather}
\hat{ y_1}=\frac{2((N/2-1)y_1 - y_2)}{N}
\end{gather}
and
\begin{gather}
\hat{ y_2}=\frac{2((N-1)y_1 + (N/2-1)y_2))}{N}
\end{gather}
If we initialize [itex]N=128[/itex] and [itex]y_1=N/2[/itex], [itex]y_2=0[/itex], we get for the first iteration the values [itex]\hat{y_1}=63[/itex] and [itex]\hat{y_2}=127[/itex] (it was expected a low value!). That is, [itex]y_2>N/2[/itex].
What went wrong? Thank you for any help.
After unsuccessful research, I decided to develop my own solution, starting from the waveguide-form oscillator taken from Pete Symons' book 'Digital wave generation, p. 100'.
\begin{gather}
\begin{bmatrix}\hat{ y_1}\\\hat{y_2}\end{bmatrix}
=
\begin{bmatrix}
k &k-1\\
k+1&k
\end{bmatrix}
\begin{bmatrix} y_1\\y_2\end{bmatrix}
\end{gather}
where [itex]k=cos(\omega T)[/itex].
This formula works perfectly when using floating point numbers.
In the case of the NxN grid, we have [itex]\omega T=2\pi/N[/itex], and the amplitude is [itex]N/2[/itex].
For [itex]N>>1[/itex], we have [itex]k=N/2-1[/itex].
The difference equations then become
\begin{gather}
\hat{ y_1}=\frac{2((N/2-1)y_1 - y_2)}{N}
\end{gather}
and
\begin{gather}
\hat{ y_2}=\frac{2((N-1)y_1 + (N/2-1)y_2))}{N}
\end{gather}
If we initialize [itex]N=128[/itex] and [itex]y_1=N/2[/itex], [itex]y_2=0[/itex], we get for the first iteration the values [itex]\hat{y_1}=63[/itex] and [itex]\hat{y_2}=127[/itex] (it was expected a low value!). That is, [itex]y_2>N/2[/itex].
What went wrong? Thank you for any help.