diff options
Diffstat (limited to 'gr-channels/python/channels/impairments.py')
-rw-r--r-- | gr-channels/python/channels/impairments.py | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/gr-channels/python/channels/impairments.py b/gr-channels/python/channels/impairments.py new file mode 100644 index 0000000000..3da838a902 --- /dev/null +++ b/gr-channels/python/channels/impairments.py @@ -0,0 +1,129 @@ +#!/usr/bin/env python +################################################## +# Gnuradio Python Flow Graph +# Title: Radio Impairments Model +# Author: mettus +# Generated: Thu Aug 1 12:46:10 2013 +################################################## + +from gnuradio import analog +from gnuradio import blocks +from gnuradio import gr +from gnuradio.filter import firdes +import math + +#Import locally +from phase_noise_gen import * +from iqbal_gen import * +from distortion_2_gen import * +from distortion_3_gen import * + +class impairments(gr.hier_block2): + + def __init__(self, phase_noise_mag=0, magbal=0, phasebal=0, q_ofs=0, i_ofs=0, freq_offset=0, gamma=0, beta=0): + gr.hier_block2.__init__( + self, "Radio Impairments Model", + gr.io_signature(1, 1, gr.sizeof_gr_complex*1), + gr.io_signature(1, 1, gr.sizeof_gr_complex*1), + ) + + ################################################## + # Parameters + ################################################## + self.phase_noise_mag = phase_noise_mag + self.magbal = magbal + self.phasebal = phasebal + self.q_ofs = q_ofs + self.i_ofs = i_ofs + self.freq_offset = freq_offset + self.gamma = gamma + self.beta = beta + + ################################################## + # Blocks + ################################################## + self.channels_phase_noise_gen_0_0 = phase_noise_gen(math.pow(10.0,phase_noise_mag/20.0), .01) + self.channels_iqbal_gen_0 = iqbal_gen(magbal, phasebal) + self.channels_distortion_3_gen_0 = distortion_3_gen(beta) + self.channels_distortion_2_gen_0 = distortion_2_gen(gamma) + self.blocks_multiply_xx_0_0 = blocks.multiply_vcc(1) + self.blocks_multiply_xx_0 = blocks.multiply_vcc(1) + self.blocks_conjugate_cc_0 = blocks.conjugate_cc() + self.blocks_add_const_vxx_0 = blocks.add_const_vcc((i_ofs + q_ofs* 1j, )) + self.analog_sig_source_x_0 = analog.sig_source_c(1.0, analog.GR_COS_WAVE, freq_offset, 1, 0) + + ################################################## + # Connections + ################################################## + self.connect((self.channels_phase_noise_gen_0_0, 0), (self.channels_distortion_3_gen_0, 0)) + self.connect((self.blocks_multiply_xx_0, 0), (self, 0)) + self.connect((self.blocks_add_const_vxx_0, 0), (self.blocks_multiply_xx_0, 1)) + self.connect((self.analog_sig_source_x_0, 0), (self.blocks_multiply_xx_0, 0)) + self.connect((self.blocks_multiply_xx_0_0, 0), (self.channels_phase_noise_gen_0_0, 0)) + self.connect((self.analog_sig_source_x_0, 0), (self.blocks_conjugate_cc_0, 0)) + self.connect((self, 0), (self.blocks_multiply_xx_0_0, 1)) + self.connect((self.blocks_conjugate_cc_0, 0), (self.blocks_multiply_xx_0_0, 0)) + self.connect((self.channels_iqbal_gen_0, 0), (self.blocks_add_const_vxx_0, 0)) + self.connect((self.channels_distortion_3_gen_0, 0), (self.channels_distortion_2_gen_0, 0)) + self.connect((self.channels_distortion_2_gen_0, 0), (self.channels_iqbal_gen_0, 0)) + + +# QT sink close method reimplementation + + def get_phase_noise_mag(self): + return self.phase_noise_mag + + def set_phase_noise_mag(self, phase_noise_mag): + self.phase_noise_mag = phase_noise_mag + self.channels_phase_noise_gen_0_0.set_noise_mag(math.pow(10.0,self.phase_noise_mag/20.0)) + + def get_magbal(self): + return self.magbal + + def set_magbal(self, magbal): + self.magbal = magbal + self.channels_iqbal_gen_0.set_magnitude(self.magbal) + + def get_phasebal(self): + return self.phasebal + + def set_phasebal(self, phasebal): + self.phasebal = phasebal + self.channels_iqbal_gen_0.set_phase(self.phasebal) + + def get_q_ofs(self): + return self.q_ofs + + def set_q_ofs(self, q_ofs): + self.q_ofs = q_ofs + self.blocks_add_const_vxx_0.set_k((self.i_ofs + self.q_ofs* 1j, )) + + def get_i_ofs(self): + return self.i_ofs + + def set_i_ofs(self, i_ofs): + self.i_ofs = i_ofs + self.blocks_add_const_vxx_0.set_k((self.i_ofs + self.q_ofs* 1j, )) + + def get_freq_offset(self): + return self.freq_offset + + def set_freq_offset(self, freq_offset): + self.freq_offset = freq_offset + self.analog_sig_source_x_0.set_frequency(self.freq_offset) + + def get_gamma(self): + return self.gamma + + def set_gamma(self, gamma): + self.gamma = gamma + self.channels_distortion_2_gen_0.set_beta(self.gamma) + + def get_beta(self): + return self.beta + + def set_beta(self, beta): + self.beta = beta + self.channels_distortion_3_gen_0.set_beta(self.beta) + + |