Thanks Ron! I really appreciate your help!
George

On Wed, Dec 22, 2021, 9:52 PM Ron Economos <w...@comcast.net> wrote:

> Comments in-line.
>
> Ron
> On 12/22/21 1:30 PM, George Edwards wrote:
>
> Hi Ron,
>
> Today, I tried to create an OOT block to compute FFT based on your good
> instructions. However, I must be doing something wrong because when I build
> my grc flowgraph to test (I run a complex sinusoid into a throttle which
> connects to a stream-to-vector, then to my fft block which takes in a
> vector and outputs a vector, then connects to a vector-to-stream which
> outputs to a file sink to collect data for me to view) it outputs zeros.
>
> The FFT of a sine wave is almost all zeroes. Only the center bin will have
> a value. Check your output carefully.
>
>
> I tried to Debug using a small data size of 8 samples in a QA file
> because I can easily compute the fft of 8 samples to know what to expect if
> the block is working properly. This way, I can single step through the code
> to Debug. When I ran the Debugger, it fails to get inside the
> my_fft_cc.impl.cc code and gave the error message:
> itemsize mismatch: vector_source0:0 using 8, my_fft_cc0:0 using 64
> However, I explicitly set the vector length inside my_fft_cc.impl.cc with
> a #define vlength 8, unless the fft function forces things to a minimum
> of 64 samples
> I will appreciate any suggestions you can offer here.
>
> The sizes being reported are in bytes. So you're connecting a complex
> vector_source of vector size 1 (8 bytes) to your FFT block of vector size 8
> (64 bytes).
>
>
> Regards,
> George
>
> On Thu, Dec 16, 2021 at 8:14 PM Ron Economos <w...@comcast.net> wrote:
>
>> Comments in-line.
>>
>> Ron
>> On 12/16/21 12:47 PM, George Edwards wrote:
>>
>> Hi Ron,
>>
>> Thanks again for sending the links and annotating the lines of interest.
>> I have looked through links and have some questions:
>> Q1. The lib/CMakeList.txt file I can identify easily, but I am not sure
>> which is the top level CMakeList.txt file. There are CMakeList.txt files
>> in directories "apps" and "grc" in my project directory and I am not
>> sure which is considered the top level. I do not know if you can help me
>> here (thing is, in my project the contents of these CMakefileList.txt files
>> are small and do not mimic that in the link you sent, so I have no clue).
>>
>> Let's say you have an OOT in your home directory.
>>
>> ~/gr-something
>>
>> The top level CMakeLists.txt is in ~/gr-something.
>>
>>
>> Q2. I am reading in a fixed size vector of floats to compute the fft and
>> output a vector of fft values (complex) the same size as the block of
>> input, so I assumed the OOT block should be a "sync" block, right?
>>
>> Yes. If you want to use vectors on your input and output pins, change the
>> signature to (where vlength is your vector size):
>>
>>     gr::io_signature::make(1, 1, sizeof(input_type) * vlength),
>>     gr::io_signature::make(1, 1, sizeof(output_type) * vlength)),
>>
>> Then in the block .yml file, use the vlen tag.
>>
>> inputs:
>> -   domain: stream
>>     dtype: complex
>>     vlen: ${vlength}
>>
>> outputs:
>> -   domain: stream
>>     dtype: complex
>>     vlen: ${vlength}
>>
>> Note that when you use vectors, noutput_items will be the number of
>> vectors, not the number of items in each vector.
>>
>>
>> Q3. Assuming the input vector comes in on the variable "in" and the
>> output vector is on the variable "out" how do I taylor the expression in
>> the link which I copied below to compute the fft and pass it to the output
>> (plus, is volk_32fc_s32fc_multiply_32fc(...) a function in the fft
>> computation module?):
>> [image: df0555eb-9839-457b-ac3d-0a4c9d17c662.png]
>>
>> I was using an IFFT in that example, and it's almost always required to
>> normalize the output. So that's what the volk_32fc_s32fc_multiply_32fc()
>> was for. Here's the code for just a simple in to out IFFT. Also, the
>> variable names don't have to be "ofdm_fft". You can use something more
>> descriptive.
>>
>>     gr_complex* dst;
>>     dst = ofdm_fft.get_inbuf();
>>     memcpy(&dst[ofdm_fft_size / 2], &in[0], sizeof(gr_complex) *
>> ofdm_fft_size / 2);
>>     memcpy(&dst[0], &in[ofdm_fft_size / 2], sizeof(gr_complex) *
>> ofdm_fft_size / 2);
>>
>>     ofdm_fft.execute();
>>
>>     memcpy(&out[0], ofdm_fft.get_outbuf(), sizeof(gr_complex) *
>> ofdm_fft_size);
>>
>> Note that for a forward FFT, you have to do the shift *after* the FFT.
>> Also, the example is complex in and complex out.
>>
>> Thank you very much!
>> George
>>
>>
>> On Wed, Dec 15, 2021 at 12:32 AM Ron Economos <w...@comcast.net> wrote:
>>
>>> FFT support is built in to GNU Radio with FFTW. Here's how it's done.
>>> First, define it in your foo_impl.h file. The options are fft_complex_fwd,
>>> fft_complex_rev, fft_real_fwd and fft_real_rev.
>>>
>>> https://github.com/drmpeg/gr-paint/blob/master/lib/paint_bc_impl.h#L25
>>>
>>> https://github.com/drmpeg/gr-paint/blob/master/lib/paint_bc_impl.h#L41
>>>
>>> Then initialize it in your foo_impl.cc constructor.
>>>
>>> https://github.com/drmpeg/gr-paint/blob/master/lib/paint_bc_impl.cc#L47
>>>
>>> Then execute it.
>>>
>>>
>>> https://github.com/drmpeg/gr-paint/blob/master/lib/paint_bc_impl.cc#L175-L179
>>>
>>> You'll need to add the component in the top level CMakeLists.txt.
>>>
>>> https://github.com/drmpeg/gr-paint/blob/master/CMakeLists.txt#L78
>>>
>>> And link with it in lib/CMakeLists.txt
>>>
>>> https://github.com/drmpeg/gr-paint/blob/master/lib/CMakeLists.txt#L25
>>>
>>> If you need a window, you can look at the block implementation file for
>>> details.
>>>
>>> https://github.com/gnuradio/gnuradio/blob/master/gr-fft/lib/fft_v_fftw.cc
>>>
>>> Ron
>>> On 12/14/21 7:53 PM, George Edwards wrote:
>>>
>>>  Dear GNURadio Community:
>>>
>>> I am writing a C++ OOT block where the signal processing requires
>>> the computation of both fft and ifft. Is there any Gnuradio C++ functions
>>> for the fft and ifft? If not, is there any way to wrap in Python's
>>> libraries with these methods into C++ OOT?
>>>
>>> Thank you!
>>>
>>> Regards,
>>> George
>>>
>>>

Reply via email to