> In my case, I am trying to implement a quadrature
modulator on a 56303EVM
> basically according to the incoming input stream to be tranmitted, I
> multiply a sine or a cosine with a certain constant. (e.g 1 or -1) and
> transmit for 1 period.
Discontinuities are intrinsic in quadrature modulation: everytime a bit
changes while the carrier value peaks you have a strong discontinuity.
If I understand right: the incoming bit stream rate is the same as the
period of the carrier sinusoid. In this case you can mitigate the
magnitude of the discontinuity by starting the sin/cos table at 45; by
doing so, everytime a bit changes both carriers will always have a
discontinuity of sqrt(2). (cos 45 = sin 45 = sqrt(2)/2).
I can see no better way because as I said discontinuities are intrinsic
in QAM.
Best regards,
Carlo Concari.
Reply by rtur...@yahoo.de●May 18, 20072007-05-18
Hello Carlo
Thank you for your response,
In my case, I am trying to implement a quadrature modulator on a 56303EVM
basically according to the incoming input stream to be tranmitted, I multiply a
sine or a cosine with a certain constant. (e.g 1 or -1) and transmit for 1
period.
so if such is the case that a 1 followed by a -1 is to be transmitted then a
discontinuity arises for the cosine. In my lookup table cosine starts with 0.999
and as you have also said finishes with some value very close to 0.999 so when I
multiply my cosine with -1 (for the second symbol to be transmitted) then there
happens a jump from 0.999 to -0.999 (-1 x 0.99)
there should be a way to overcome this issue but I simply cant find one yet :/
looking forward to hearing from you
rifat
r...@yahoo.de wrote: >
>> Okey I figured out the problem,
>>
>> Since the cosine starts with a 0.9999 in its lookup table, there happens
>> a sudden jump from 0.999 to -0.999 if the bit stream is such that the
>> first constellation point is a 1 and the second one is -1
>
>Maybe I'm out of scope here 'cause I seem to have missed some
previous
>discussion... but sin/cos lookup tables should have no discontinuities
>for their nature. I.e., if you table a complete 360 degrees span, the
>first and last values of the table should be almost equal.
>
>Furthermore, it is a waste of memory to use both a sine and cosine
>lookup table! It is best (for example) to use only a sine LUT and add 90
>degrees to the angle (with the proper rollover) if you need a cosine value.
>
>Hope this helps,
>-- Carlo Concari.
Reply by Carlo●May 17, 20072007-05-17
r...@yahoo.de wrote:
> Okey I figured out the problem,
>
> Since the cosine starts with a 0.9999 in its lookup table, there happens
> a sudden jump from 0.999 to -0.999 if the bit stream is such that the
> first constellation point is a 1 and the second one is -1
Maybe I'm out of scope here 'cause I seem to have missed some
previous
discussion... but sin/cos lookup tables should have no discontinuities
for their nature. I.e., if you table a complete 360 degrees span, the
first and last values of the table should be almost equal.
Furthermore, it is a waste of memory to use both a sine and cosine
lookup table! It is best (for example) to use only a sine LUT and add 90
degrees to the angle (with the proper rollover) if you need a cosine value.
Hope this helps,
-- Carlo Concari.
Reply by rtur...@yahoo.de●May 16, 20072007-05-16
Okey I figured out the problem,
Since the cosine starts with a 0.9999 in its lookup table, there happens a
sudden jump from 0.999 to -0.999 if the bit stream is such that the first
constellation point is a 1 and the second one is -1
Since this sudden jump includes very high freqs, the scope can`t seem to get a
hold on it and distorts the waveform :/
My question then would be, is there a way to overcome this problem?
I thought about starting the look up table with a smaller value than 0.999
this way, the jump wouldnt be so great (but still there would be)
however if I do this then I have to change the sequence of the sinus lookup
table to since otherwise their orthoganility would be lost.
any help would be appreciated.
thanks alot
rifat
Reply by rtur...@yahoo.de●April 27, 20072007-04-27
Dear all,
I am trying to implement a QAM in 56303EVM. I have a weird problem that confuses
me.
For creating the necessary sine and cosine signals I am using a 16 valued lookup
table. When I sent lookup values to the codec (without modulation)
I get a nice, smooth sinus/cosinus signals. So my codec is working okey.
However when I start modulating the input signal according to constellation
diagram,
my cosinus signal loses its smoothness, nearly doesn`t look like a sinusoid
anymore
Interestingly the sinus portion has no problem,
I would most appreciate if you advice on the subject,
I attach important parts of the code below
org x:$10 ; sinus lookup table
dc 0.000000
dc 0.382700/2
dc 0.707000/2
dc 0.923900/2
dc 0.999999/2
dc 0.923900/2
dc 0.707000/2
dc 0.382700/2
dc 0.000000
dc -0.38270/2
dc -0.70700/2
dc -0.92390/2
dc -0.99999/2
dc -0.92390/2
dc -0.70700/2
dc -0.38270/2
org x:$30 ; //Imaginary part - Constellation diagram
dc -0.5
dc 0.5
dc -0.5
dc 0.5
org x:$60 ; // Real Part - Constellation diagram
dc -0.5
dc -0.5
dc 0.5
dc 0.5
org x:$80 ; cosinus lookup table
dc 0.999999/2
dc 0.923900/2
dc 0.707000/2
dc 0.382700/2
dc 0.000000
dc -0.38270/2
dc -0.70700/2
dc -0.92390/2
dc -0.99999/2
dc -0.92390/2
dc -0.70700/2
dc -0.38270/2
dc 0.000000
dc 0.382700/2
dc 0.707000/2
dc 0.923900/2
;setting up modular buffers
move #$0030,r2 ; pointer to modular buffer
move #$003,m2 ;...and is 4 deep
move #$0060,r3 ; pointer to modular buffer
move #$0003,m3 ;...and is 4 deep
move #$0010,r4 ; pointer to modular buffer
move #$000F,m4 ;...and is 16 deep
move #$0080,r5 ; pointer to modular buffer
move #$000F,m5 ;...and is 16 deep
; // each symbol is multiplied by 1 period of sine and then next
; // symbol is taken
loop_1 nop
nop
do #16,end ;// 16 times since lookup table has 16 values
nop
jset #2,x:M_SSISR0,* ; Wait for frame sync to pass.
jclr #2,x:M_SSISR0,* ; Wait for frame sync.
move x:RX_BUFF_BASE,a ; not used actually
move x:RX_BUFF_BASE+1,b
nop
clr a
clr b
move x:(r2),x0 ; get the symbol
move x:(r3),x1
nop
move x:(r4)+,y0 ;start getting lookup table values
move x:(r5)+,y1
nop
mpy x0,y0,a
mpy x1,y1,b
end
nop
move x:(r2)+,x0 ; start for the next symbol
move x:(r3)+,x1
jmp loop_1 ; Loop back
; I am sorry it has been a long post, hope you can help