Monday, October 2, 2023

Generating a chirp pulse, non-even transfers

I want to generate a chirp signal. My idea was to have a sawtooth signal feed a VCO. The generated chirp repeats, so I was going to blank off the signal after the first chirp. I wanted to count the number of samples in the chirp with a python block and output the VCO chirp only when the blanking pulse was high. It sort of works but the python code doesn't count the regularly. It seems to count in random length blocks, so I get some "chirps output" that have 20 chirps and some have 50, not the one chirp I want. I have attached my code.  Thanks...Tom

My Python Block's Code:
"""
Embedded Python Blocks:

Each time this file is saved, GRC will instantiate the first class it finds
to get ports and parameters of your block. The arguments to __init__  will
be the parameters. All of them are required to have default values!
"""

import numpy as np
from gnuradio import gr


class blk(gr.sync_block):  # other base classes are basic_block, decim_block, interp_block
    """Embedded Python Block example - a simple multiply const"""

    def __init__(self, ONpulsecount=1000,OFFpulsecount=10000,threshold = 0.5):  # only default arguments here
        """arguments to this function show up as parameters in GRC"""
        gr.sync_block.__init__(
            self,
            name='pulseshaper',   # will show up in GRC
            in_sig=[np.complex64,np.float32],
            out_sig=[np.complex64,np.float32]
        )
        # if an attribute with the same name as a parameter is found,
        # a callback is registered (properties work, too).
        self.ONpulsecount = ONpulsecount
        self.OFFpulsecount = OFFpulsecount
        self.threshold = threshold
        self.count=0
        self.pulseblanker = 1.0

    def work(self, input_items, output_items):
        """example: multiply with constant"""
   
        self.count = self.count + 1

        if self.count < self.ONpulsecount:
            self.pulseblanker = 1.0
        elif self.count < self.OFFpulsecount:
            self.pulseblanker = 0.0
        else:
            self.count = 0    

        output_items[0][:] = input_items[0][:] * self.pulseblanker
        output_items[1][:] = self.pulseblanker
       
        return len(output_items[0])


Inline image



No comments:

Post a Comment