GrComplexVCOMixer.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
#ifndef _GRCOMPLEXVCOMIXER_H_
00024
#define _GRCOMPLEXVCOMIXER_H_
00025
00026
#include <VrSigProc.h>
00027
00028
template<
class iType,
class oType>
00029 class GrComplexVCOMixer :
public VrSigProc {
00030
protected:
00031 double sensitivity;
00032 double freq;
00033 double arg;
00034 double argInc;
00035
void evaluate(
int n);
00036
virtual void initialize();
00037
public:
00038 virtual const char *
name() {
return "GrComplexVCOMixer"; }
00039
virtual int work(
VrSampleRange output,
void *ao[],
00040
VrSampleRange inputs[],
void *ai[]);
00041 GrComplexVCOMixer(
double f,
double s) :
VrSigProc(2,sizeof(
iType),sizeof(
oType)),
sensitivity(s),
freq(f),
arg(0) { }
00042 };
00043
00044
template<
class iType,
class oType>
int
00045 GrComplexVCOMixer<iType,oType>::work(
VrSampleRange output,
void *ao[],
00046
VrSampleRange inputs[],
void *ai[])
00047 {
00048
iType **i = (
iType**)ai;
00049
oType **o = (
iType**)ao;
00050
int size = output.
size;
00051
while(size -- > 0) {
00052 *o[0]++ = (
oType) (*i[0] *
cos(
arg));
00053 *o[1]++ = (
oType) (*i[0]++ *
sin(
arg));
00054
arg +=
argInc;
00055 argInc = 2*M_PI*(
freq +
sensitivity * *i[1]++)*(1 / (
double)
getInputSamplingFrequencyN(0));
00056 }
00057
return output.
size;
00058 }
00059
00060
template<
class iType,
class oType>
void
00061 GrComplexVCOMixer<iType,oType>::initialize()
00062 {
00063
argInc = 2*M_PI*
freq*(1 / (
double)
getInputSamplingFrequencyN(0));
00064 }
00065
#endif
Generated on Wed Aug 4 02:22:04 2004 for GNU Radio by
1.3.8