00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
#ifndef _VRQUADRATUREDEMOD_H_
00019
#define _VRQUADRATUREDEMOD_H_
00020
00021
#include <VrHistoryProc.h>
00022
#include <math.h>
00023
00024
template<
class oType>
00025 class VrQuadratureDemod :
public VrHistoryProc<complex,oType> {
00026
protected:
00027 float gain;
00028
public:
00029 virtual const char *
name() {
return "VrQuadratureDemod"; }
00030 void setGain(
float g){
gain = g;
return;}
00031
virtual int work(
VrSampleRange output,
void *o[],
00032
VrSampleRange inputs[],
void *i[]);
00033
virtual void initialize();
00034
VrQuadratureDemod(
oType g);
00035
VrQuadratureDemod();
00036 };
00037
00038
template<
class oType>
int
00039 VrQuadratureDemod<oType>::work(
VrSampleRange output,
void *ao[],
00040
VrSampleRange inputs[],
void *ai[])
00041 {
00042
complex **i = (
complex **)ai;
00043
oType **o = (
oType **)ao;
00044
complex product,val;
00045
complex lastVal = *i[0]++;
00046
unsigned int size=output.
size;
00047
00048
for (; size>0; i[0]++,size--) {
00049 val = *i[0];
00050 product = val *
conj(lastVal);
00051 lastVal = val;
00052 *o[0]++=(
oType)(
gain *
arg(product));
00053 }
00054
return output.
size;
00055 }
00056
00057
template<
class oType>
void
00058 VrQuadratureDemod<oType>::initialize()
00059 {
00060 history=2;
00061 }
00062
00063
template<
class oType>
00064 VrQuadratureDemod<oType>::VrQuadratureDemod(
oType g)
00065 :
VrHistoryProc<
complex,
oType>(1), gain(g)
00066 {
00067 }
00068
00069
#if 0
00070
template<
class oType>
00071
VrQuadratureDemod<oType>::VrQuadratureDemod()
00072 :gain(1)
00073 {
00074 }
00075
#endif
00076
#endif