# A How can you generate a sine wave using integers only?

#### intervoxel

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 $k=cos(\omega T)$.

This formula works perfectly when using floating point numbers.

In the case of the NxN grid, we have $\omega T=2\pi/N$, and the amplitude is $N/2$.
For $N>>1$, we have $k=N/2-1$.
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 $N=128$ and $y_1=N/2$, $y_2=0$, we get for the first iteration the values $\hat{y_1}=63$ and $\hat{y_2}=127$ (it was expected a low value!). That is, $y_2>N/2$.

What went wrong? Thank you for any help.

#### mfb

Mentor
I don't know where k=N/2 - 1 comes from, but with k getting larger your numbers will get too large as well. This is true for floating point numbers as well.

#### intervoxel

Thank you for answering. DDA uses floats not pure integers.

#### intervoxel

I don't know where k=N/2 - 1 comes from, but with k getting larger your numbers will get too large as well. This is true for floating point numbers as well.
Of course the modified k grows, it is an integer constant.
The rationale for the modified expression for k is:
$$lim_{N\to\infty} \frac{N}{2}sin(2\pi/N)=\pi$$
$$sin^2\theta+cos^2\theta=1$$
$$\overline{k}=\sqrt{\frac{N^2}{4}-\pi^2}$$
for $N>>1$ we have
$$\sqrt{\frac{N^2}{4}-\pi^2}\approx \frac{N}{2}-1$$

#### Svein

Thank you for answering. DDA uses floats not pure integers.
From the Wikipedia article: "The DDA method can be implemented using floating-point or integer arithmetic. " I know that it is so, because a research institute I once worked for implemented a version using only digital logic chips back in the late 60's.

• intervoxel

#### intervoxel

You are right, a DDA variation called Bresenheim algorithm for circles works with integers. Thank you.

### Want to reply to this thread?

"How can you generate a sine wave using integers only?"

### Physics Forums Values

We Value Quality
• Topics based on mainstream science
• Proper English grammar and spelling
We Value Civility
• Positive and compassionate attitudes
• Patience while debating
We Value Productivity
• Disciplined to remain on-topic
• Recognition of own weaknesses
• Solo and co-op problem solving