Hi  Fabian,
thanks for your help. i write a fft index to freq transform block. i put the 
source here for anyone need.




<http://aka.ms/weboutlook>
________________________________
From: Discuss-gnuradio 
<discuss-gnuradio-bounces+james.jordan.999=hotmail....@gnu.org> on behalf of 
Fabian Schwartau <fab...@opencode.eu>
Sent: Friday, December 4, 2020 9:28 PM
To: discuss-gnuradio@gnu.org <discuss-gnuradio@gnu.org>
Subject: Re: how to insert if...else logic between 2 blocks

Hi James,
I cannot tell where you got that init function from, but you are passing
3 arguments to it (ignoring self). The first one has a default argument
(1850e6), but the following don't. That's not allowed in python. If you
want to give a default parameter for the center_freq, put the parameter
at the end:
def __init__(self, fft_size, freq_range, center_freq=1850e6):
or give default values for all parameters:
def __init__(self, center_freq=1850e6, fft_size=1024, freq_range=10e6):

I don't know if it is common (possble) to have an __init__ function in a
"Python Module". I used it just to define a single function, just like
in the example from the wiki.

Hope that helps, I am not a GNU Radio expert, especially on those more
advanced topics like building your own modules.

Best regards,
Fabian

Am 04.12.20 um 14:18 schrieb james jordan:
> Hi Fabian,
> thanks for your quick reply. i think python block is a good choice but
> how to define the block param as what i want? i only see there is a
> example param in the block. when i modify the code as below
> def __init__(self, center_freq=1850e6, fft_size, freq_range):
> grc can not interpret the source code. it shows "Param -
> Code(_source_code): Can't interpret source code: non-default argument
> follows default argument (<string>, line 16)"
> how to deal with this?
>
>
> <http://aka.ms/weboutlook>
> ------------------------------------------------------------------------
> *From:* Discuss-gnuradio
> <discuss-gnuradio-bounces+james.jordan.999=hotmail....@gnu.org> on
> behalf of Fabian Schwartau <fab...@opencode.eu>
> *Sent:* Friday, December 4, 2020 7:14 PM
> *To:* discuss-gnuradio@gnu.org <discuss-gnuradio@gnu.org>
> *Subject:* Re: how to insert if...else logic between 2 blocks
>
> Hi James,
>
> three options I can see:
> 1) Quick& Dirty: Implement both algorithms in parallel and use the Peak
> Detector block to generate a 0 or 1 depending on your condition. Then
> invert the condition, multiply the outputs of the two algorithms with
> the two condition outputs and add them.
> 2) Depending on your condition and what you want to do, the Python
> Module block may help. You can implement python function in it and use
> them anywhere in your flow chart:
> https://wiki.gnuradio.org/index.php/Python_Module
> 3) Build your own module:
> https://wiki.gnuradio.org/index.php/OutOfTreeModules
>
> Best regards,
> Fabian
>
> Am 04.12.20 um 10:36 schrieb james jordan:
>> Hi ALL,
>> i want to compute process a block's output then pass the result to
>> another block's input. the process is not a fix equation but like this
>> if(output > a)... else... so is there any way to do this without making
>> a new block by myself. can i modify the generated python code to insert
>> this logic? if i have to make a new block then how to make?
>>
>>
>> <http://aka.ms/weboutlook>
>
>


"""
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, center_freq=1850e6, fft_size=1024, freq_range=5e6):  # only default arguments here
        """arguments to this function show up as parameters in GRC"""
        gr.sync_block.__init__(
            self,
            name='Embedded Python Block',   # will show up in GRC
            in_sig=[np.short],
            out_sig=[np.float32]
        )
        # if an attribute with the same name as a parameter is found,
        # a callback is registered (properties work, too).
        self.center_freq = center_freq
        self.fft_size = fft_size
        self.freq_range = freq_range

    def work(self, input_items, output_items):
        if (input_items[0] >= (self.fft_size/2)).all():
            output_items[0][:] = (self.freq_range * (input_items[0] - self.fft_size/2) / self.fft_size + self.center_freq - self.freq_range/2) / 1e6
        else:
            output_items[0][:] = (self.freq_range * input_items[0] / self.fft_size + self.center_freq) / 1e6
        return len(output_items[0])

Reply via email to