# DSP newbie

#### Do you have a question? Post it now! No Registration Necessary

Translate This Thread From English to

•  Subject
• Author
• Posted on
I have written a process to generate sin wave as below.

-- sine wave constants
amp_sin : real := 10.0;
phase_sin : real := 0.0          -- phase in radians
samples_sin : integer := 1000;                   -- number of
samples
incr_sin : real := 0.001;          -- 1/samples
period_sin : time := 0.001 ns;                      -- period of
sine wave/samples

two : process
variable phase_temp,result : real ;
begin
phase_temp := phase_sin; --phase_sin;
l1 : for i in 1 to samples_sin loop --number_of_samples loop

sine_real <= ((amp_sin*sin(phase_temp)));
phase_temp := phase_temp + incr_sin;
wait for period_sin;
end loop l1;
end process two;

The problem I am facing is, I get sine wave for some values and for
some I just get triangulr wave. Is there any limitation to the sin
function in math_real. Should I be able to generate any type of

Re: DSP newbie
I have written a process to generate sin wave as below.

-- sine wave constants
amp_sin : real := 10.0;
phase_sin : real := 0.0                --
samples_sin : integer :=
1000;                   -- number of
samples
incr_sin : real := 0.001;              -- 1/
samples
period_sin : time := 0.001
ns;                         -- period of
sine wave/samples

two : process
variable phase_temp,result : real ;
begin
phase_temp := phase_sin; --phase_sin;
l1 : for i in 1 to samples_sin loop --number_of_samples loop

sine_real <= ((amp_sin*sin(phase_temp)));
phase_temp := phase_temp + incr_sin;
wait for period_sin;
end loop l1;
end process two;

The problem I am facing is, I get sine wave for some values and for
some I just get triangulr wave. Is there any limitation to the sin
function in math_real. Should I be able to generate any type of

Re: DSP newbie

10.0;

Also, the sine wave does not stop after it takes all the samles, I
keep getting a continous sine wave. Would like to add the option of
generating wave from 0 tp 2pi or 4 pi, etc. I want to make this as
generic as possible

Re: DSP newbie

:3D%

:=

integ=

:=

time :=

lo=

((amp_sin*sin(phase_temp)))=

To get it to stop after 1 run through the "l1" loop, add "wait;" betwee
the "end loop" and "end process".

Regarding triangular waves, that could happen be when you do not hav
enough samples per period. Does "nyquist theorem" mean anything to you?

Re: DSP newbie

It's repeating because you havent told the process to wait when it
finishes the loop. Currently the loop finishs, and then the process
restarts and does the whole loop again, and this will repeat for ever.
To stop this simply put "wait;" at the end of the process.

Re: DSP newbie

I am required to design this using the CORDIC algorithm.

Re: DSP newbie

-

Then why aren't you using the CORDIC algorithm? Google it.

Re: DSP newbie

I was able to add the wait statement and the problem was solved. I
modified some of the things and not I am able to get waveforms at
different frequencies. FYI,
incr_phase_sin : real :3D% (2.0*MATH_PI)/(real(samples_sin));      -- 2pi/
samples per period
incr_time_sin : time :3D% time(period_sin/samples_sin);                  --
period/samples per period

Re: DSP newbie

The sine wave function in math_real uses the CORDIC algorithm