GrMixer.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 _GRMIXER_H_
00024
#define _GRMIXER_H_
00025
00026
#include <VrSigProc.h>
00027
#include <gr_nco.h>
00028
00029
template<
class iType,
class oType>
00030 class GrMixer :
public VrSigProc {
00031
00032
public:
00033 GrMixer(
double carrier_freq,
double gain)
00034 :
VrSigProc(1,sizeof(
iType), sizeof(
oType)),
00035 carrier_freq (carrier_freq), gain (gain) {}
00036
00037 const char *
name() {
return "GrMixer"; }
00038
00039
int work (
VrSampleRange output,
void *ao[],
00040
VrSampleRange inputs[],
void *ai[]);
00041
00042
00043
protected:
00044
00045
void initialize ();
00046
00047 double carrier_freq;
00048 double gain;
00049 gr_nco<float,float> nco;
00050 };
00051
00052
template<
class iType,
class oType>
void
00053 GrMixer<iType,oType>::initialize ()
00054 {
00055
double Fs =
getSamplingFrequency ();
00056
nco.
set_freq (
carrier_freq / Fs * 2 * M_PI);
00057
nco.
set_phase (0);
00058 }
00059
00060
template<
class iType,
class oType>
00061
int
00062 GrMixer<iType,oType>::work (
VrSampleRange output,
void *ao[],
00063
VrSampleRange inputs[],
void *ai[])
00064 {
00065
iType *in = ((
iType**) ai)[0];
00066
oType *out = ((
iType**) ao)[0];
00067
00068
sync (output.
index);
00069
00070
for (
unsigned oo = 0; oo < output.
size; oo++){
00071 out[oo] = (
oType) (
gain * in[oo] *
nco.
sin ());
00072
nco.
step ();
00073 }
00074
00075
return output.
size;
00076 }
00077
00078
00079
#endif
Generated on Wed Aug 4 02:22:04 2004 for GNU Radio by
1.3.8