DSP newbie

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

Translate This Thread From English to

Threaded View
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
frequencies with this function. Please help

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                --
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
frequencies with this function. Please help



Re: DSP newbie
Quoted text here. Click to load it
 10.0;
Quoted text here. Click to load it

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
Quoted text here. Click to load it
:3D%
Quoted text here. Click to load it
:=
Quoted text here. Click to load it
integ=
Quoted text here. Click to load it
:=
Quoted text here. Click to load it
time :=
Quoted text here. Click to load it
lo=
Quoted text here. Click to load it
((amp_sin*sin(phase_temp)))=
Quoted text here. Click to load it
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
Quoted text here. Click to load it

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
Quoted text here. Click to load it

I am required to design this using the CORDIC algorithm.

Re: DSP newbie
Quoted text here. Click to load it
-
Quoted text here. Click to load it

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

Re: DSP newbie
Quoted text here. Click to load it

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
Quoted text here. Click to load it

The sine wave function in math_real uses the CORDIC algorithm

Site Timeline