Cannot change transmit power

Hey All,

I created a flow graph which would do the following

dip_image_source_block (custom made digital image processing block

which helps sending images over the air (neat OpenCV work))
|
|–> throttle block
–>packet_encoder–>gmsk_mod–>uhd_usrp_sink(tuned with the help of
uhd.tune_request)

Below described is a snip of my code :

class my_top_block(gr.top_block):
def init(self,options):
gr.top_block.init(self)

    ##################################################
    #  Variables to be set
    ##################################################
    self.samp_rate = samp_rate = 250000
    self._tx_amplitude = options.tx_amplitude   # digital amplitude

sent to USRP

    ##################################################
# Blocks
##################################################

    self.dip_image_source_0 =

dip.image_source("/usr/include/opencv/lena512.bmp")
self.gr_throttle_0 = gr.throttle(gr.sizeof_float*1, samp_rate)
self.blks2_packet_encoder_0 =
grc_blks2.packet_mod_f(grc_blks2.packet_encoder(
samples_per_symbol=2,
bits_per_symbol=1,
access_code="",
pad_for_usrp=True,
),
payload_length=0,
)
#self.txpath_0 = transmit_path(modulator, options)
self.digital_gmsk_mod_0 = digital.gmsk_mod(
samples_per_symbol=2,
bt=0.35,
verbose=False,
log=False,
)

    self.amp = gr.multiply_const_cc(1)
    self.set_tx_amplitude(self._tx_amplitude)
    self.uhd_usrp_sink_0 = uhd.usrp_sink(
        device_addr="",
        stream_args=uhd.stream_args(
            cpu_format="fc32",
            channels=range(1),
        ),
    )
self.uhd_usrp_sink_0.set_samp_rate(samp_rate)

self.uhd_usrp_sink_0.set_center_freq(uhd.tune_request(2.475*10**9,10000),
0)
self.uhd_usrp_sink_0.set_gain(20, 0)

#self.connect(self.dip_image_source_0,self.gr_throttle_0,self.blks2_packet_encoder_0,self.txpath,self.uhd_usrp_sink_0)
self.connect((self.dip_image_source_0, 0), (self.gr_throttle_0,
0))
self.connect((self.gr_throttle_0, 0), (self.blks2_packet_encoder_0,
0))
self.connect((self.blks2_packet_encoder_0,
0),(self.digital_gmsk_mod_0,0))
self.connect((self.digital_gmsk_mod_0,0),(self.uhd_usrp_sink_0,
0))

def get_samp_rate(self):
return self.samp_rate

def set_samp_rate(self, samp_rate):
self.samp_rate = samp_rate
self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)

def set_tx_amplitude(self, ampl):
    """
    Sets the transmit amplitude sent to the USRP in volts
    @param: ampl 0 <= ampl < 1.
    """
    self._tx_amplitude = max(0.0, min(ampl, 1))
    print "Anay"
    self.amp.set_k(self._tx_amplitude)
    print "Tx amplitude     %s"    %

(self.amp.set_k(self._tx_amplitude))

def main():

parser = OptionParser(option_class=eng_option,

conflict_handler=“resolve”)
expert_grp = parser.add_option_group(“Expert”)

parser.add_option("", "--tx-amplitude", type="eng_float",
                      default=0.250, metavar="AMPL",
                      help="set transmitter digital amplitude: 0 <=

AMPL < 1 [default=%default]")

(options, args) = parser.parse_args ()

# build the graph
tb = my_top_block(options)
tb.start()                       # start flow graph
tb.wait()                       # wait for it to finish

if name == ‘main’:
try:
main()
except KeyboardInterrupt:
pass

Although i have defined set_tx_amplitude and at run time i do provide
the
user option --tx-amplitude value is set to 0.25 but it still transmits
at
16dBm (max power of a USRP N200) when you would expect it to be around a
quarter of that power.
Any suggestions in this regard would be greatly appreciated.

Thanks,
Josh.

Although i have defined set_tx_amplitude and at run time i do provide the
user option --tx-amplitude value is set to 0.25 but it still transmits at
16dBm (max power of a USRP N200) when you would expect it to be around a
quarter of that power.
Any suggestions in this regard would be greatly appreciated.

The code looked correct as far as set_k on the multiplier. I think a
good control test would be to transmit zeros and compare that to
multiply with set_k(0).

You might take a look at the uhd_siggen_gui and try some test waveforms
with slide the amplitudes around and see what your measurement equipment
is showing.

-josh

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs