kopia lustrzana https://github.com/Hamlib/Hamlib
git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@1679 7ae35d74-ebe9-4afe-98af-79ac388436b8Hamlib-1.2.0
rodzic
72ae118f85
commit
1a296ceebc
|
@ -0,0 +1,93 @@
|
|||
/* -*- c++ -*- */
|
||||
/*
|
||||
* Copyright 2002 Free Software Foundation, Inc.
|
||||
*
|
||||
* This file is part of GNU Radio
|
||||
*
|
||||
* GNU Radio is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* GNU Radio is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GNU Radio; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _HRAGC_H_
|
||||
#define _HRAGC_H_
|
||||
|
||||
#include <VrSigProc.h>
|
||||
|
||||
template<class iType,class oType>
|
||||
class HrAGC : public VrSigProc {
|
||||
protected:
|
||||
oType k;
|
||||
oType reference;
|
||||
oType gain;
|
||||
virtual void initialize();
|
||||
public:
|
||||
virtual const char *name() { return "HrAGC"; }
|
||||
virtual int work(VrSampleRange output, void *ao[],
|
||||
VrSampleRange inputs[], void *ai[]);
|
||||
HrAGC(double k):VrSigProc(1,sizeof(iType),sizeof(oType)),k(k) { }
|
||||
};
|
||||
|
||||
template<class iType,class oType> int
|
||||
HrAGC<iType,oType>::work(VrSampleRange output, void *ao[],
|
||||
VrSampleRange inputs[], void *ai[])
|
||||
{
|
||||
iType **i = (iType **)ai;
|
||||
oType **o = (oType **)ao;
|
||||
int size = output.size;
|
||||
|
||||
// for normalize
|
||||
iType max = 0;
|
||||
#if 1
|
||||
{ int sz;
|
||||
for (sz = 0; sz < size; sz++)
|
||||
if (fabs(*(i[0]+sz)) > max)
|
||||
max = fabs(*(i[0]+sz));
|
||||
}
|
||||
#endif
|
||||
|
||||
while(size -- > 0) {
|
||||
#if 0
|
||||
power = power + ((*i[0] * *i[0]) - power)/k;
|
||||
inv_gain = sqrt(power);
|
||||
*o[0]++ = (*i[0]++ / inv_gain);
|
||||
#elif 0
|
||||
/* AGC with malus on saturation */
|
||||
|
||||
oType output = (*i[0]++ * gain);
|
||||
if (output < reference) {
|
||||
*o[0]++ = output;
|
||||
gain += (reference - fabsf(output)) * k;
|
||||
} else {
|
||||
*o[0]++ = reference;
|
||||
gain *= reference/fabsf(output);
|
||||
}
|
||||
#else
|
||||
/* AGC with normalization */
|
||||
|
||||
gain = 0.8 / max;
|
||||
*o[0]++ = (*i[0]++ * gain);
|
||||
#endif
|
||||
}
|
||||
return output.size;
|
||||
}
|
||||
|
||||
template<class iType,class oType> void
|
||||
HrAGC<iType,oType>::initialize()
|
||||
{
|
||||
reference = 1;
|
||||
gain = 1;
|
||||
}
|
||||
#endif
|
|
@ -2,7 +2,7 @@
|
|||
* Hamlib GNUradio backend - AM class
|
||||
* Copyright (c) 2003 by Stephane Fillod
|
||||
*
|
||||
* $Id: am.h,v 1.1 2003-09-28 20:51:05 fillods Exp $
|
||||
* $Id: am.h,v 1.2 2004-02-08 20:27:58 fillods Exp $
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Library General Public License as
|
||||
|
@ -39,10 +39,6 @@ class AMDemodChainCF : public DemodChainCF {
|
|||
demod_in = demod_out = a_demod = new GrMagnitude<d_iType, d_oType>();
|
||||
}
|
||||
~AMDemodChainCF() { delete a_demod; }
|
||||
|
||||
//void setWidth(pbwidth_t width) { }
|
||||
//void setFreq(freq_t centerfreq) { }
|
||||
void setRFgain(float gain) { /* a_demod->setGain(gain); */ }
|
||||
};
|
||||
|
||||
#endif /* _AM_H */
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* Hamlib GNUradio backend - Demodulator chain class
|
||||
* Copyright (c) 2003 by Stephane Fillod
|
||||
*
|
||||
* $Id: demod.h,v 1.1 2003-10-20 22:34:56 fillods Exp $
|
||||
* $Id: demod.h,v 1.2 2004-02-08 20:27:58 fillods Exp $
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Library General Public License as
|
||||
|
@ -29,8 +29,8 @@
|
|||
#include <GrFIRfilterFFF.h>
|
||||
#include <VrAmp.h>
|
||||
|
||||
#include <GrAGC.h>
|
||||
//#include <HrAGC.h>
|
||||
//#include <GrAGC.h>
|
||||
#include <HrAGC.h>
|
||||
|
||||
#include <gr_firdes.h>
|
||||
#include <gr_fir_builderF.h>
|
||||
|
@ -45,7 +45,7 @@
|
|||
class DemodChainCF {
|
||||
public:
|
||||
DemodChainCF (VrSource<d_iType> *d_source, VrSink<d_oType> *d_sink, rmode_t mode, pbwidth_t width, int input_rate, freq_t centerfreq = 0) :
|
||||
d_source(d_source), d_sink(d_sink), mode(mode), width(width), input_rate(input_rate), centerfreq(centerfreq), rf_gain(1.0), if_width_of_transition_band(500), CFIRdecimate(1), RFIRdecimate(1) {}
|
||||
d_source(d_source), d_sink(d_sink), mode(mode), width(width), input_rate(input_rate), centerfreq(centerfreq), rf_gain(1.0), if_width_of_transition_band(1000), CFIRdecimate(1), RFIRdecimate(1) {}
|
||||
virtual ~DemodChainCF () { delete agc; delete mixer; delete gainstage; delete audio_filter; }
|
||||
|
||||
virtual const char *name() { return strrmode(mode); }
|
||||
|
@ -64,7 +64,7 @@ class DemodChainCF {
|
|||
VrSigProc *demod_in;
|
||||
VrSigProc *demod_out;
|
||||
|
||||
GrAGC<d_oType,d_oType> *agc;
|
||||
HrAGC<d_oType,d_oType> *agc;
|
||||
GrFreqXlatingFIRfilterCCF *mixer;
|
||||
VrAmp<d_oType,d_oType> *gainstage;
|
||||
GrFIRfilterFFF *audio_filter;
|
||||
|
@ -103,7 +103,7 @@ void DemodChainCF::connect()
|
|||
|
||||
|
||||
mixer = new GrFreqXlatingFIRfilterCCF (CFIRdecimate, channel_coeffs, centerfreq);
|
||||
agc = new GrAGC<d_oType,d_oType>(1e-2);
|
||||
agc = new HrAGC<d_oType,d_oType>(1e-2);
|
||||
gainstage = new VrAmp<float,float>(1); /* AF */
|
||||
audio_filter = new GrFIRfilterFFF (RFIRdecimate, audio_coeffs);
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* Hamlib GNUradio backend - main file
|
||||
* Copyright (c) 2001-2003 by Stephane Fillod
|
||||
*
|
||||
* $Id: gnuradio.cc,v 1.7 2003-09-28 20:51:05 fillods Exp $
|
||||
* $Id: gnuradio.cc,v 1.8 2004-02-08 20:27:58 fillods Exp $
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Library General Public License as
|
||||
|
@ -42,20 +42,13 @@
|
|||
|
||||
#include <VrConnect.h>
|
||||
#include <VrMultiTask.h>
|
||||
#include <GrFreqXlatingFIRfilterSCF.h>
|
||||
#include <GrFreqXlatingFIRfilterCCF.h>
|
||||
#include <GrFIRfilterFSF.h>
|
||||
#include <GrFIRfilterFFF.h>
|
||||
#include <VrQuadratureDemod.h> /* FM */
|
||||
#include <GrMagnitude.h> /* AM */
|
||||
#include <GrSSBMod.h> /* SSB */
|
||||
|
||||
#include <gr_firdes.h>
|
||||
#include <gr_fir_builderF.h>
|
||||
|
||||
/* Demodulator chains */
|
||||
#include <nfm.h>
|
||||
#include <am.h>
|
||||
#include <ssb.h>
|
||||
#include <wfm.h>
|
||||
|
||||
|
||||
|
||||
|
@ -63,8 +56,8 @@
|
|||
#define CARRIER_FREQ 1.070e6 // AM 1070
|
||||
#define AMPLITUDE 3000
|
||||
|
||||
#define AUDIO_IN "/dev/dsp"
|
||||
#define AUDIO_OUT "/dev/dsp1"
|
||||
#define AUDIO_SINK "/dev/dsp"
|
||||
#define AUDIO_SRC "/dev/dsp1"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h> /* Standard input/output definitions */
|
||||
|
@ -271,6 +264,13 @@ int gr_open(RIG *rig)
|
|||
* and override available modes with gnuradio's
|
||||
*/
|
||||
|
||||
rig->state.has_set_func |= priv->tuner->state.has_set_func;
|
||||
rig->state.has_get_func |= priv->tuner->state.has_get_func;
|
||||
rig->state.has_set_level |= priv->tuner->state.has_set_level;
|
||||
rig->state.has_get_level |= priv->tuner->state.has_get_level;
|
||||
rig->state.has_set_parm |= priv->tuner->state.has_set_parm;
|
||||
rig->state.has_get_parm |= priv->tuner->state.has_get_parm;
|
||||
|
||||
|
||||
/* ** Source ** */
|
||||
|
||||
|
@ -288,7 +288,7 @@ int gr_open(RIG *rig)
|
|||
/* VrFileSource (double sampling_freq, const char *file, bool repeat = false) */
|
||||
//priv->source = new VrFileSource<short>(priv->input_rate, "microtune_source.sw", true);
|
||||
|
||||
priv->sink = new GrAudioSink<float>(1,AUDIO_IN);
|
||||
priv->sink = new GrAudioSink<float>(1,AUDIO_SINK);
|
||||
|
||||
/* ** Sink ** */
|
||||
if (!priv->sink)
|
||||
|
@ -299,8 +299,6 @@ int gr_open(RIG *rig)
|
|||
|
||||
priv->m->start();
|
||||
|
||||
/* or set it to MODE_NONE? */
|
||||
//gr_set_mode(rig, RIG_VFO_CURR, RIG_MODE_WFM, RIG_PASSBAND_NORMAL);
|
||||
if (priv->tuner_model == RIG_MODEL_DUMMY) {
|
||||
gr_set_freq(rig, RIG_VFO_CURR, priv->IF_center_freq);
|
||||
}
|
||||
|
@ -358,7 +356,7 @@ int graudio_open(RIG *rig)
|
|||
* assumes sound card is full duplex!
|
||||
* mono source
|
||||
*/
|
||||
priv->source = new GrAudioSource<VrComplex>(priv->input_rate, 1,1,AUDIO_OUT);
|
||||
priv->source = new GrAudioSource<VrComplex>(priv->input_rate, 1,1,AUDIO_SRC);
|
||||
|
||||
return gr_open(rig);
|
||||
}
|
||||
|
@ -376,7 +374,7 @@ int graudioiq_open(RIG *rig)
|
|||
* assumes sound card is full duplex!
|
||||
* I&Q source
|
||||
*/
|
||||
priv->source = new GrAudioSource<VrComplex>(priv->input_rate, 2,1, AUDIO_OUT);
|
||||
priv->source = new GrAudioSource<VrComplex>(priv->input_rate, 2,1, AUDIO_SRC);
|
||||
|
||||
return gr_open(rig);
|
||||
}
|
||||
|
@ -459,8 +457,10 @@ static int update_freq(RIG *rig, unsigned chan_num, freq_t tuner_freq, freq_t fr
|
|||
DemodChainCF *mod = priv->mods[chan_num];
|
||||
double freq_offset;
|
||||
|
||||
if (chan->mode == RIG_MODE_NONE)
|
||||
return RIG_OK;
|
||||
if (chan->mode == RIG_MODE_NONE || !mod) {
|
||||
rig_debug(RIG_DEBUG_TRACE,"No (de)modulator for chan %d\n",chan_num);
|
||||
return RIG_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* In case the tuner is not a real tuner
|
||||
|
@ -469,17 +469,12 @@ static int update_freq(RIG *rig, unsigned chan_num, freq_t tuner_freq, freq_t fr
|
|||
tuner_freq = priv->IF_center_freq;
|
||||
|
||||
freq_offset = (double) (freq - tuner_freq);
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s: %lld %lld freq_offset=%g\n",
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s: tuner:%lld gr:%lld freq_offset=%g\n",
|
||||
__FUNCTION__, tuner_freq, freq, freq_offset);
|
||||
|
||||
if (freq_offset == 0)
|
||||
return RIG_OK; /* nothing to do */
|
||||
|
||||
/* mode=RIG_MODE_NONE? */
|
||||
if (!mod) {
|
||||
return RIG_OK;
|
||||
}
|
||||
|
||||
pthread_mutex_lock(&priv->mutex_process);
|
||||
|
||||
/*
|
||||
|
@ -520,12 +515,18 @@ int gr_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
|
|||
/*
|
||||
* do not set tuner to freq, but center it
|
||||
*/
|
||||
ret = rig_set_freq(priv->tuner, RIG_VFO_CURR, freq + GR_MAX_FREQUENCY(priv)/2);
|
||||
#if 0
|
||||
if (GR_MAX_FREQUENCY(priv)/2 < mode_offset)
|
||||
tuner_freq = freq - mode_offset - resolution;
|
||||
else
|
||||
#endif
|
||||
tuner_freq = freq - GR_MAX_FREQUENCY(priv)/2;
|
||||
ret = rig_set_freq(priv->tuner, RIG_VFO_CURR, tuner_freq);
|
||||
if (ret != RIG_OK)
|
||||
return ret;
|
||||
/*
|
||||
* query freq right back, because wanted freq may not be real freq,
|
||||
* because of resolution of tuner
|
||||
* query freq right back, because wanted freq may be rounded
|
||||
* because of the resolution of the tuner
|
||||
*/
|
||||
ret = rig_get_freq(priv->tuner, RIG_VFO_CURR, &tuner_freq);
|
||||
if (ret != RIG_OK)
|
||||
|
@ -595,9 +596,9 @@ int gr_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
|
|||
if (priv->tuner_model == RIG_MODEL_DUMMY)
|
||||
tuner_freq = 0;
|
||||
|
||||
freq_offset = (double) (chan->freq - tuner_freq);
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s: freq_offset=%g\n",
|
||||
__FUNCTION__, freq_offset);
|
||||
freq_offset = (double) (chan->freq - tuner_freq + priv->IF_center_freq);
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s: freq_offset=%g tuner_freq=%lld, IFcenter=%ld\n",
|
||||
__FUNCTION__, freq_offset, tuner_freq, priv->IF_center_freq);
|
||||
|
||||
|
||||
|
||||
|
@ -619,6 +620,9 @@ int gr_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
|
|||
|
||||
delete mod;
|
||||
priv->mods[chan_num] = NULL;
|
||||
|
||||
delete priv->m;
|
||||
priv->m = new VrMultiTask ();
|
||||
}
|
||||
|
||||
if (mode == RIG_MODE_NONE) {
|
||||
|
@ -629,25 +633,23 @@ int gr_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
|
|||
return RIG_OK;
|
||||
}
|
||||
|
||||
float rf_gain = chan->levels[rig_setting2idx(RIG_LEVEL_RF)].f;
|
||||
|
||||
switch(mode) {
|
||||
#if 0
|
||||
case RIG_MODE_USB:
|
||||
//float rf_gain = chan->levels[rig_setting2idx(RIG_LEVEL_RF)].f;
|
||||
float low_cutoff = 300;
|
||||
float high_cutoff = low_cutoff+width;
|
||||
centerfreq = (freq_t)(priv->IF_center_freq + low_cutoff + width/2);
|
||||
|
||||
mod = new USBDemodChain(priv->source, priv->sink, priv->input_rate, centerfreq);
|
||||
case RIG_MODE_LSB:
|
||||
mod = new LSBDemodChainCF(priv->source, priv->sink, mode, width, priv->input_rate, (freq_t)freq_offset);
|
||||
break;
|
||||
case RIG_MODE_USB:
|
||||
mod = new USBDemodChainCF(priv->source, priv->sink, mode, width, priv->input_rate, (freq_t)freq_offset);
|
||||
break;
|
||||
#endif
|
||||
case RIG_MODE_AM:
|
||||
//centerfreq = priv->IF_center_freq;
|
||||
mod = new AMDemodChainCF(priv->source, priv->sink, mode, width, priv->input_rate, kHz(10));
|
||||
mod = new AMDemodChainCF(priv->source, priv->sink, mode, width, priv->input_rate, (freq_t)freq_offset);
|
||||
break;
|
||||
case RIG_MODE_FM:
|
||||
//centerfreq = priv->IF_center_freq;
|
||||
mod = new FMDemodChainCF(priv->source, priv->sink, mode, width, priv->input_rate, kHz(10));
|
||||
mod = new FMDemodChainCF(priv->source, priv->sink, mode, width, priv->input_rate, (freq_t)freq_offset);
|
||||
break;
|
||||
case RIG_MODE_WFM:
|
||||
mod = new WFMDemodChainCF(priv->source, priv->sink, mode, width, priv->input_rate, (freq_t)freq_offset);
|
||||
break;
|
||||
default:
|
||||
ret = -RIG_EINVAL;
|
||||
|
@ -655,6 +657,7 @@ int gr_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
|
|||
|
||||
priv->mods[chan_num] = mod;
|
||||
|
||||
/* wire up the chain */
|
||||
mod->connect();
|
||||
|
||||
priv->m->add (priv->sink);
|
||||
|
@ -742,11 +745,12 @@ int gnuradio_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
|
|||
|
||||
switch (level) {
|
||||
case RIG_LEVEL_RF:
|
||||
mod->setRFgain(val.f);
|
||||
/* line-in level of sound card, etc. */
|
||||
break;
|
||||
default:
|
||||
rig_debug(RIG_DEBUG_WARN, "%s: level %s unimplemented!\n",
|
||||
rig_debug(RIG_DEBUG_TRACE, "%s: level %s, try tuner\n",
|
||||
__FUNCTION__, strlevel(level));
|
||||
ret = rig_set_level(priv->tuner, vfo, level, val);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* Hamlib GNUradio backend - gnuradio priv structure
|
||||
* Copyright (c) 2001-2003 by Stephane Fillod
|
||||
*
|
||||
* $Id: gr_priv.h,v 1.6 2003-09-28 20:51:05 fillods Exp $
|
||||
* $Id: gr_priv.h,v 1.7 2004-02-08 20:27:58 fillods Exp $
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Library General Public License as
|
||||
|
@ -71,7 +71,7 @@ struct gnuradio_priv_data {
|
|||
};
|
||||
|
||||
|
||||
//#define GR_MAX_FREQUENCY(priv) ((priv)->input_rate/2)
|
||||
#define GR_MAX_FREQUENCY(priv) ((priv)->input_rate)
|
||||
#define GR_MAX_FREQUENCY(priv) ((priv)->input_rate/2)
|
||||
//#define GR_MAX_FREQUENCY(priv) ((priv)->input_rate)
|
||||
|
||||
#endif /* _GR_PRIV_H */
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* Hamlib GNUradio backend - graudio/any rig
|
||||
* Copyright (c) 2001-2003 by Stephane Fillod
|
||||
*
|
||||
* $Id: graudio.c,v 1.5 2003-10-01 19:31:55 fillods Exp $
|
||||
* $Id: graudio.c,v 1.6 2004-02-08 20:27:58 fillods Exp $
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Library General Public License as
|
||||
|
@ -50,8 +50,8 @@
|
|||
|
||||
static const struct gnuradio_priv_caps graudio_priv_caps = {
|
||||
.tuner_model = RIG_MODEL_DUMMY,
|
||||
.input_rate = 48000, /* To be fixed. how? */
|
||||
.IF_center_freq = -kHz(10),
|
||||
.input_rate = 48000, /* To be fixed, later */
|
||||
.IF_center_freq = 0 /* -kHz(10) */,
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* Hamlib GNUradio backend - Narrow FM class
|
||||
* Copyright (c) 2003 by Stephane Fillod
|
||||
*
|
||||
* $Id: nfm.h,v 1.1 2003-09-28 20:51:05 fillods Exp $
|
||||
* $Id: nfm.h,v 1.2 2004-02-08 20:27:58 fillods Exp $
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Library General Public License as
|
||||
|
@ -36,13 +36,9 @@ class FMDemodChainCF : public DemodChainCF {
|
|||
FMDemodChainCF (VrSource<d_iType> *src, VrSink<d_oType> *snk, rmode_t mode, pbwidth_t width, int input_rate, freq_t centerfreq = 0) :
|
||||
DemodChainCF(src, snk, mode, width, input_rate, centerfreq) {
|
||||
|
||||
demod_in = demod_out = q_demod = new VrQuadratureDemod<d_oType>(1);
|
||||
demod_in = demod_out = q_demod = new VrQuadratureDemod<d_oType>(1.0);
|
||||
}
|
||||
~FMDemodChainCF() { delete q_demod; }
|
||||
|
||||
//void setWidth(pbwidth_t width) { }
|
||||
//void setFreq(freq_t centerfreq) { }
|
||||
void setRFgain(float gain) { q_demod->setGain(gain); }
|
||||
};
|
||||
|
||||
#endif /* _NFM_H */
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* Hamlib GNUradio backend - SSB class
|
||||
* Copyright (c) 2003 by Stephane Fillod
|
||||
*
|
||||
* $Id: ssb.h,v 1.1 2003-10-01 19:38:34 fillods Exp $
|
||||
* $Id: ssb.h,v 1.2 2004-02-08 20:27:58 fillods Exp $
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Library General Public License as
|
||||
|
@ -34,21 +34,20 @@ class USBDemodChainCF : public DemodChainCF {
|
|||
float low_cutoff;
|
||||
|
||||
public:
|
||||
// float rf_gain = chan->levels[rig_setting2idx(RIG_LEVEL_RF)].f;
|
||||
USBDemodChainCF (VrSource<d_iType> *src, VrSink<d_oType> *snk, rmode_t mode, pbwidth_t width, int input_rate, freq_t centerfreq = 0, float rf_gain = 1.0) :
|
||||
DemodChainCF(src, snk, mode, width, input_rate, centerfreq, rf_gain) {
|
||||
USBDemodChainCF (VrSource<d_iType> *src, VrSink<d_oType> *snk, rmode_t mode, pbwidth_t width, int input_rate, freq_t centerfreq = 0) :
|
||||
DemodChainCF(src, snk, mode, width, input_rate, centerfreq) {
|
||||
|
||||
low_cutoff = 300;
|
||||
// centerfreq, relative to IF_center_freq
|
||||
centerfreq += (freq_t)(low_cutoff + width/2);
|
||||
|
||||
s_demod = new GrSSBMod<d_oType>(2*M_PI*(low_cutoff+width/2)/(double)input_rate,rf_gain);
|
||||
s_demod = new GrSSBMod<d_oType>(2*M_PI*(low_cutoff+width/2)/(double)input_rate,1.0);
|
||||
|
||||
demod_in = demod_out = s_demod;
|
||||
}
|
||||
~USBDemodChainCF() { delete s_demod; }
|
||||
|
||||
//void setWidth(pbwidth_t width) { } /* TODO */
|
||||
//void setWidth(pbwidth_t width) { }
|
||||
void setFreq(freq_t centerfreq) { s_demod->set_freq(centerfreq); }
|
||||
void setRFgain(float gain) { s_demod->set_gain(gain); }
|
||||
};
|
||||
|
@ -59,25 +58,23 @@ class LSBDemodChainCF : public DemodChainCF {
|
|||
float low_cutoff;
|
||||
|
||||
public:
|
||||
// float rf_gain = chan->levels[rig_setting2idx(RIG_LEVEL_RF)].f;
|
||||
LSBDemodChainCF (VrSource<d_iType> *src, VrSink<d_oType> *snk, rmode_t mode, pbwidth_t width, int input_rate, freq_t centerfreq = 0, float rf_gain = 1.0) :
|
||||
DemodChainCF(src, snk, mode, width, input_rate, centerfreq, rf_gain) {
|
||||
LSBDemodChainCF (VrSource<d_iType> *src, VrSink<d_oType> *snk, rmode_t mode, pbwidth_t width, int input_rate, freq_t centerfreq = 0) :
|
||||
DemodChainCF(src, snk, mode, width, input_rate, centerfreq) {
|
||||
|
||||
float low_cutoff = 300;
|
||||
// centerfreq, relative to IF_center_freq
|
||||
centerfreq += (freq_t)(-low_cutoff - width/2);
|
||||
|
||||
s_demod = new GrSSBMod<d_oType>(-2*M_PI*(low_cutoff+width/2)/(double)input_rate,rf_gain);
|
||||
s_demod = new GrSSBMod<d_oType>(-2*M_PI*(low_cutoff+width/2)/(double)input_rate,1.0);
|
||||
|
||||
demod_in = demod_out = s_demod;
|
||||
}
|
||||
~LSBDemodChainCF() { delete s_demod; }
|
||||
|
||||
//void setWidth(pbwidth_t width) { } /* TODO */
|
||||
//void setWidth(pbwidth_t width) { }
|
||||
void setFreq(freq_t centerfreq) { s_demod->set_freq(centerfreq); }
|
||||
void setRFgain(float gain) { s_demod->set_gain(gain); }
|
||||
};
|
||||
|
||||
|
||||
#endif /* _SSB_H */
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ int main(int argc, char *argv[])
|
|||
int retcode; /* generic return code from functions */
|
||||
struct gnuradio_priv_data *priv;
|
||||
|
||||
GrFFTSink<IOTYPE> *fftsink;
|
||||
GrFFTSink<float> *fftsink;
|
||||
|
||||
VrGUI *guimain = new VrGUI(argc, argv);
|
||||
VrGUILayout *horiz = guimain->top->horizontal();
|
||||
|
@ -64,14 +64,14 @@ int main(int argc, char *argv[])
|
|||
exit(2);
|
||||
}
|
||||
|
||||
fftsink = new GrFFTSink<IOTYPE>(vert, 300, 450, 1024);
|
||||
fftsink = new GrFFTSink<float>(vert, 300, 450, 1024);
|
||||
|
||||
pthread_mutex_lock(&priv->mutex_process);
|
||||
priv->m->add (fftsink);
|
||||
|
||||
// now wire it all together from the sink, back to the sources
|
||||
|
||||
NWO_CONNECT (GR_SOURCE(priv), fftsink);
|
||||
NWO_CONNECT (priv->source, fftsink);
|
||||
pthread_mutex_unlock(&priv->mutex_process);
|
||||
|
||||
rig_set_freq(my_rig, RIG_VFO_CURR, (freq_t)CARRIER_FREQ-kHz(10));
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* Hamlib GNUradio backend - Wide FM class
|
||||
* Copyright (c) 2003 by Stephane Fillod
|
||||
*
|
||||
* $Id: wfm.h,v 1.1 2003-10-01 19:38:34 fillods Exp $
|
||||
* $Id: wfm.h,v 1.2 2004-02-08 20:27:58 fillods Exp $
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Library General Public License as
|
||||
|
@ -36,8 +36,8 @@ class WFMDemodChainCF : public DemodChainCF {
|
|||
GrFIRfilterFFF *audio_filter;
|
||||
|
||||
public:
|
||||
WFMDemodChainCF (VrSource<d_iType> *src, VrSink<d_oType> *snk, rmode_t mode, pbwidth_t width, int input_rate, freq_t centerfreq = 0, float rf_gain = 1.0) :
|
||||
DemodChainCF(src, snk, mode, width, input_rate, centerfreq, rf_gain) {
|
||||
WFMDemodChainCF (VrSource<d_iType> *src, VrSink<d_oType> *snk, rmode_t mode, pbwidth_t width, int input_rate, freq_t centerfreq = 0) :
|
||||
DemodChainCF(src, snk, mode, width, input_rate, centerfreq) {
|
||||
|
||||
CFIRdecimate = 125;
|
||||
RFIRdecimate = 5;
|
||||
|
@ -64,7 +64,7 @@ class WFMDemodChainCF : public DemodChainCF {
|
|||
// float --> float
|
||||
double width_of_transition_band = audioRate / 32;
|
||||
vector<float> audio_coeffs =
|
||||
gr_firdes::low_pass (rf_gain, // gain
|
||||
gr_firdes::low_pass (1.0, // gain
|
||||
quadRate, // sampling rate
|
||||
audioRate/2 - width_of_transition_band, // low-pass cutoff freq
|
||||
width_of_transition_band,
|
||||
|
@ -75,7 +75,7 @@ class WFMDemodChainCF : public DemodChainCF {
|
|||
|
||||
audio_filter = new GrFIRfilterFFF(RFIRdecimate, audio_coeffs);
|
||||
|
||||
q_demod = new VrQuadratureDemod<d_oType>(rf_gain);
|
||||
q_demod = new VrQuadratureDemod<d_oType>(1.0);
|
||||
|
||||
demod_in = q_demod;
|
||||
demod_out = audio_filter;
|
||||
|
|
Ładowanie…
Reference in New Issue