00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
#ifndef _GRPAMMOD_H_
00025
#define _GRPAMMOD_H_
00026
00027
#include <VrSigProc.h>
00028
#include <vector>
00029
00030
using std::vector;
00031
00032
template<
class iType,
class oType>
00033 class GrPAMMod :
public VrSigProc {
00034
protected:
00035 vector<oType>
constellation;
00036
public:
00037 virtual const char *
name() {
return "GrPAMMod"; }
00038
virtual int work(
VrSampleRange output,
void *o[],
00039
VrSampleRange inputs[],
void *i[]);
00040
GrPAMMod(
int bits);
00041 };
00042
00043
template<
class iType,
class oType>
int
00044 GrPAMMod<iType,oType>::work(
VrSampleRange output,
void *ao[],
00045
VrSampleRange inputs[],
void *ai[])
00046 {
00047
iType **i = (
iType **)ai;
00048
oType **o = (
oType **)ao;
00049
int size = output.
size;
00050
00051
while(size-- > 0) {
00052 {
00053 *o[0]++ =
constellation[*i[0]++];
00054 }
00055 }
00056
return output.
size;
00057 }
00058
00059
template<
class iType,
class oType>
00060 GrPAMMod<iType,oType>::GrPAMMod(
int bits)
00061 :
VrSigProc(1, sizeof(
iType), sizeof(
oType))
00062 {
00063
constellation.resize(1<<bits);
00064
for(
int i=0; i< ((1<<bits) ); i++)
00065
constellation[i] = -(1<<bits) + 2*i + 1;
00066 }
00067
#endif