diff --git a/csdr.c b/csdr.c
index 457faa7..922dcf7 100644
--- a/csdr.c
+++ b/csdr.c
@@ -1555,7 +1555,7 @@ int main(int argc, char *argv[])
for(;;)
{
FEOF_CHECK;
- FREAD_R;
+ FREAD_C;
add_dcoffset_cc((complexf*)input_buffer, (complexf*)output_buffer, the_bufsize);
FWRITE_C;
TRY_YIELD;
@@ -1576,6 +1576,24 @@ int main(int argc, char *argv[])
}
}
+ if(!strcmp(argv[1],"fixed_amplitude_cc"))
+ {
+ if(argc<=2) return badsyntax("need required parameters (new_amplitude)");
+
+ float new_amplitude;
+ sscanf(argv[2],"%g",&new_amplitude);
+
+ if(!sendbufsize(initialize_buffers())) return -2;
+ for(;;)
+ {
+ FEOF_CHECK;
+ FREAD_C;
+ fixed_amplitude_cc((complexf*)input_buffer, (complexf*)output_buffer, the_bufsize, new_amplitude);
+ FWRITE_C;
+ TRY_YIELD;
+ }
+ }
+
if(!strcmp(argv[1],"none"))
{
return 0;
diff --git a/grc_tests/test_fixed_amplitude_cc.grc b/grc_tests/test_fixed_amplitude_cc.grc
new file mode 100644
index 0000000..2c14740
--- /dev/null
+++ b/grc_tests/test_fixed_amplitude_cc.grc
@@ -0,0 +1,844 @@
+
+
+
+ Sun Nov 1 12:27:49 2015
+
+ options
+
+ id
+ top_block
+
+
+ _enabled
+ True
+
+
+ title
+
+
+
+ author
+
+
+
+ description
+
+
+
+ window_size
+ 1280, 1024
+
+
+ generate_options
+ wx_gui
+
+
+ category
+ Custom
+
+
+ run_options
+ prompt
+
+
+ run
+ True
+
+
+ max_nouts
+ 0
+
+
+ realtime_scheduling
+
+
+
+ alias
+
+
+
+ _coordinate
+ (10, 10)
+
+
+ _rotation
+ 0
+
+
+
+ variable
+
+ id
+ samp_rate
+
+
+ _enabled
+ True
+
+
+ value
+ 32000
+
+
+ alias
+
+
+
+ _coordinate
+ (176, 11)
+
+
+ _rotation
+ 0
+
+
+
+ notebook
+
+ id
+ nb0
+
+
+ _enabled
+ True
+
+
+ style
+ wx.NB_TOP
+
+
+ labels
+ ['Scope', 'FFT']
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ alias
+
+
+
+ _coordinate
+ (272, 11)
+
+
+ _rotation
+ 0
+
+
+
+ notebook
+
+ id
+ nb1
+
+
+ _enabled
+ True
+
+
+ style
+ wx.NB_TOP
+
+
+ labels
+ ['Scope', 'FFT']
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ alias
+
+
+
+ _coordinate
+ (272, 99)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ amp
+
+
+ _enabled
+ True
+
+
+ label
+
+
+
+ value
+ 0.5
+
+
+ min
+ 0
+
+
+ max
+ 1
+
+
+ num_steps
+ 100
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ alias
+
+
+
+ _coordinate
+ (544, 11)
+
+
+ _rotation
+ 0
+
+
+
+ analog_sig_source_x
+
+ id
+ analog_sig_source_x_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ samp_rate
+ samp_rate
+
+
+ waveform
+ analog.GR_COS_WAVE
+
+
+ freq
+ freq
+
+
+ amp
+ amp
+
+
+ offset
+ 0
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ minoutbuf
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ _coordinate
+ (8, 163)
+
+
+ _rotation
+ 0
+
+
+
+ blocks_throttle
+
+ id
+ blocks_throttle_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ samples_per_second
+ samp_rate
+
+
+ vlen
+ 1
+
+
+ ignoretag
+ True
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ minoutbuf
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ _coordinate
+ (176, 195)
+
+
+ _rotation
+ 0
+
+
+
+ variable_slider
+
+ id
+ freq
+
+
+ _enabled
+ True
+
+
+ label
+
+
+
+ value
+ 1000
+
+
+ min
+ -samp_rate/2
+
+
+ max
+ samp_rate/2
+
+
+ num_steps
+ 100
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+ converver
+ float_converter
+
+
+ grid_pos
+
+
+
+ notebook
+
+
+
+ alias
+
+
+
+ _coordinate
+ (424, 11)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_scopesink2
+
+ id
+ wxgui_scopesink2_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ title
+ Scope Plot of Original Signal
+
+
+ samp_rate
+ samp_rate
+
+
+ v_scale
+ 0
+
+
+ v_offset
+ 0
+
+
+ t_scale
+ 0
+
+
+ ac_couple
+ False
+
+
+ xy_mode
+ False
+
+
+ num_inputs
+ 1
+
+
+ win_size
+
+
+
+ grid_pos
+
+
+
+ notebook
+ nb0,0
+
+
+ trig_mode
+ wxgui.TRIG_MODE_AUTO
+
+
+ y_axis_label
+ Counts
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ _coordinate
+ (352, 331)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_fftsink2
+
+ id
+ wxgui_fftsink2_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ title
+ FFT Plot of Original Signal
+
+
+ samp_rate
+ samp_rate
+
+
+ baseband_freq
+ 0
+
+
+ y_per_div
+ 10
+
+
+ y_divs
+ 10
+
+
+ ref_level
+ 0
+
+
+ ref_scale
+ 2.0
+
+
+ fft_size
+ 1024
+
+
+ fft_rate
+ 15
+
+
+ peak_hold
+ False
+
+
+ average
+ False
+
+
+ avg_alpha
+ 0
+
+
+ win
+ None
+
+
+ win_size
+
+
+
+ grid_pos
+
+
+
+ notebook
+ nb0,1
+
+
+ freqvar
+ None
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ _coordinate
+ (352, 459)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_scopesink2
+
+ id
+ wxgui_scopesink2_0_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ title
+ Scope Plot of Processed Signal (csdr)
+
+
+ samp_rate
+ samp_rate
+
+
+ v_scale
+ 0
+
+
+ v_offset
+ 0
+
+
+ t_scale
+ 0
+
+
+ ac_couple
+ False
+
+
+ xy_mode
+ False
+
+
+ num_inputs
+ 1
+
+
+ win_size
+
+
+
+ grid_pos
+
+
+
+ notebook
+ nb1,0
+
+
+ trig_mode
+ wxgui.TRIG_MODE_AUTO
+
+
+ y_axis_label
+ Counts
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ _coordinate
+ (944, 171)
+
+
+ _rotation
+ 0
+
+
+
+ wxgui_fftsink2
+
+ id
+ wxgui_fftsink2_0_0
+
+
+ _enabled
+ True
+
+
+ type
+ complex
+
+
+ title
+ FFT Plot of Processed Signal (csdr)
+
+
+ samp_rate
+ samp_rate
+
+
+ baseband_freq
+ 0
+
+
+ y_per_div
+ 10
+
+
+ y_divs
+ 10
+
+
+ ref_level
+ 0
+
+
+ ref_scale
+ 2.0
+
+
+ fft_size
+ 1024
+
+
+ fft_rate
+ 15
+
+
+ peak_hold
+ False
+
+
+ average
+ False
+
+
+ avg_alpha
+ 0
+
+
+ win
+ None
+
+
+ win_size
+
+
+
+ grid_pos
+
+
+
+ notebook
+ nb1,1
+
+
+ freqvar
+ None
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ _coordinate
+ (952, 371)
+
+
+ _rotation
+ 0
+
+
+
+ ha5kfu_execproc_xx
+
+ id
+ ha5kfu_execproc_xx_0
+
+
+ _enabled
+ True
+
+
+ type
+ cc
+
+
+ commandline
+ csdr fixed_amplitude_cc 1.0
+
+
+ alias
+
+
+
+ affinity
+
+
+
+ minoutbuf
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ _coordinate
+ (448, 195)
+
+
+ _rotation
+ 0
+
+
+
+ analog_sig_source_x_0
+ blocks_throttle_0
+ 0
+ 0
+
+
+ blocks_throttle_0
+ ha5kfu_execproc_xx_0
+ 0
+ 0
+
+
+ blocks_throttle_0
+ wxgui_scopesink2_0
+ 0
+ 0
+
+
+ blocks_throttle_0
+ wxgui_fftsink2_0
+ 0
+ 0
+
+
+ ha5kfu_execproc_xx_0
+ wxgui_scopesink2_0_0
+ 0
+ 0
+
+
+ ha5kfu_execproc_xx_0
+ wxgui_fftsink2_0_0
+ 0
+ 0
+
+
diff --git a/libcsdr.c b/libcsdr.c
index 598d1d2..e6b5b31 100644
--- a/libcsdr.c
+++ b/libcsdr.c
@@ -848,6 +848,22 @@ float fmmod_fc(float* input, complexf* output, int input_size, float last_phase)
return phase;
}
+void fixed_amplitude_cc(complexf* input, complexf* output, int input_size, float new_amplitude)
+{
+ for(int i=0;i 0) ? new_amplitude / amplitude_now : 0;
+ iof(output,i)=iof(input,i)*gain;
+ qof(output,i)=qof(input,i)*gain;
+ }
+}
+
/*
______ _ ______ _ _______ __
| ____| | | | ____| (_) |__ __| / _|
diff --git a/libcsdr.h b/libcsdr.h
index a2e80c4..ca4a311 100644
--- a/libcsdr.h
+++ b/libcsdr.h
@@ -164,6 +164,7 @@ void gain_ff(float* input, float* output, int input_size, float gain);
void add_dcoffset_cc(complexf* input, complexf* output, int input_size);
float fmmod_fc(float* input, complexf* output, int input_size, float last_phase);
+void fixed_amplitude_cc(complexf* input, complexf* output, int input_size, float amp);
void convert_u8_f(unsigned char* input, float* output, int input_size);
void convert_f_u8(float* input, unsigned char* output, int input_size);