Kelly Boswell wrote:
> All,
>
> I recently had to create a library replacement of qammod.m in the
> communications toolbox, because it doesn't allow for non-square (power
> of 4) symbol sets and that was desired for my project. Here is what I
> have:
>
> my_qammod.m:
>
> function [y] = my_qammod(x, M, qam_type)
>
> switch(qam_type)
> case 1
> error('qammod type %d is undefined', qam_type);
> exit;
>
> case 3
> if (nargin < 2)
> usage('y = my_qammod(x,m,type)');
> exit;
> end
> if (M ~= fix(M))
> error('m must be an integer power of 2 > 4');
> exit;
> end
> if (any(x >= M))
> error('values of x must be in range [0,M-1]');
> exit;
> end
> if (~any(x == fix(x)))
> error('values of x must be integer');
> exit;
> end
>
> c = sqrt(M);
> if (c ~= fix(c)|| log2(c) ~= fix(log2(c)))
> switch(M)
> case 8
> a = [ -1, 1, ...
> -1, 1, ...
> -1, 1, ...
> -1, 1];
>
> b = [ 3, 3, ...
> 1, 1, ...
> -1, -1, ...
> -3, -3];
>
> c = a + i*b;
> y = c(x + 1);
> case 32
> a = [ -3, -1, 1, 3, ...
> -5, -3, -1, 1, 3, 5, ...
> -5, -3, -1, 1, 3, 5, ...
> -5, -3, -1, 1, 3, 5, ...
> -5, -3, -1, 1, 3, 5, ...
> -3, -1, 1, 3];
>
> b = [ 5, 5, 5, 5, ...
> 3, 3, 3, 3, 3, 3, ...
> 1, 1, 1, 1, 1, 1, ...
> -1, -1, -1, -1, -1, -1, ...
> -3, -3, -3, -3, -3, -3, ...
> -5, -5, -5, -5];
>
> c = a + i*b;
> y = c(x + 1);
> case 128
> a = [ -7, -5, -3, -1, 1, 3,
> 5, 7, ...
> -7, -5, -3, -1, 1, 3,
> 5, 7, ...
> -11, -9, -7, -5, -3, -1, 1, 3,
> 5, 7, 9, 11, ...
> -11, -9, -7, -5, -3, -1, 1, 3,
> 5, 7, 9, 11, ...
> -11, -9, -7, -5, -3, -1, 1, 3,
> 5, 7, 9, 11, ...
> -11, -9, -7, -5, -3, -1, 1, 3,
> 5, 7, 9, 11, ...
> -11, -9, -7, -5, -3, -1, 1, 3,
> 5, 7, 9, 11, ...
> -11, -9, -7, -5, -3, -1, 1, 3,
> 5, 7, 9, 11, ...
> -11, -9, -7, -5, -3, -1, 1, 3,
> 5, 7, 9, 11, ...
> -11, -9, -7, -5, -3, -1, 1, 3,
> 5, 7, 9, 11, ...
> -7, -5, -3, -1, 1, 3,
> 5, 7, ...
> -7, -5, -3, -1, 1, 3, 5,
> 7];
>
> b = [ 11, 11, 11, 11, 11, 11,
> 11, 11, ...
> 9, 9, 9, 9, 9, 9,
> 9, 9, ...
> 7, 7, 7, 7, 7, 7, 7, 7,
> 7, 7, 7, 7, ...
> 5, 5, 5, 5, 5, 5, 5, 5,
> 5, 5, 5, 5, ...
> 3, 3, 3, 3, 3, 3, 3, 3,
> 3, 3, 3, 3, ...
> 1, 1, 1, 1, 1, 1, 1, 1,
> 1, 1, 1, 1, ...
> -1, -1, -1, -1, -1, -1, -1, -1,
> -1, -1, -1, -1, ...
> -3, -3, -3, -3, -3, -3, -3, -3,
> -3, -3, -3, -3, ...
> -5, -5, -5, -5, -5, -5, -5, -5,
> -5, -5, -5, -5, ...
> -7, -7, -7, -7, -7, -7, -7, -7,
> -7, -7, -7, -7 ...
> -9, -9, -9, -9, -9, -9,
> -9, -9, ...
> -11, -11, -11, -11, -11, -11, -11,
> -11];
>
> c = a + i*b;
> y = c(x + 1);
> otherwise
> error('qammod for M = %d is undefined', M);
> exit;
>
> end
> else
> b = -2.*mod(x,(c)) + c-1;
> a = 2.*floor(x./(c)) - c+1;
> y = a + i.*b;
> end
>
> otherwise
> error('qammod type %d is undefined', qam_type);
> exit;
> end
>
> end
>
> It's basically a copy of what was already there, except I added
> special cases for each non-square, like 8, 32, etc. I also added a
> "type" which for QAM could be type I, II, or III. Square
> constellations are type III and are the most common. However, type
> I's can be useful in fading situations, so I may add that
> functionality later. Basically, type I's are circular constellations,
> and they're useful in fading channels if you use a differential coding
> scheme.
>
> You can use the qamdemod that already exists in the communications
> package, though you may have to change the reference to "qammod" to be
> "my_qamdemod" or rename this file and put it in a path that is at a
> higher priority than your communications package.
>
> Please let me know what you think.
>
>
Have you looked at the qaskenco function? This was a Matlab R13 function
that mathworks replaced in later versions of their communications
toolbox.. It would make sense to implement qammod /qamdemodproperly
perhaps using qaskenco/qaskdeco (that I tried a few years back to make
as fast as I could) a these do try 8-QAM, 32-QAM, etc
D.
--
David Bateman [email protected]
35 rue Gambetta +33 1 46 04 02 18 (Home)
92100 Boulogne-Billancourt FRANCE +33 6 72 01 06 33 (Mob)
------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
Octave-dev mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/octave-dev