discuss-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Discuss-gnuradio] call the work() method


From: xianda
Subject: Re: [Discuss-gnuradio] call the work() method
Date: Sat, 31 May 2014 21:22:39 +0800 (CST)

Hi
     Thank you so much for your patient instructions.
     Yes ,I know the "UHD:USRP Sink" can specifies two USRP addresses.But the symbol i try to transmit to the usrp is different.
They may be should in two flow graph.
[file source 1] --> [ (I)FFT ] --> [ cyclic prefixer ] --> [ USRP sink 1]
[file source 2] --> [ (I)FFT ] --> [ cyclic prefixer ] --> [ USRP sink 2]
Can i realize it in grc?Or should i write the c++ code?
Thank you.Thank you.
Best regards,
xianda






At 2014-05-31 09:15:03, "Marcus Müller" <address@hidden> wrote: >Hi! > >The gr-uhd USRP sink can represent multiple USRPs at once. >If you have a recent GNU Radio version, in gnuradio-companion your "UHD: >USRP Sink" block will have a "Documentation" tab. >There is an example that specifies two USRP addresses. This will >automatically enable you to transmit the contents of both files >simultaneously [1]. >You should start with the gnuradio-companion, which will generate >easy-to-read Python code. >Usually, you don't need to write your own blocks to interface with USRPs. > >Greetings, >Marcus > >[1] "Simultaneously" does not mean "coherently"! > >On 31.05.2014 14:48, xianda wrote: >> Hi: >> Thank you so much for your kindly reply. >> Sorry for my poor English. >> The reason why i directly write the c++ code is that I want to use the uhd to control my two usrps send simultaneously. >> The aim i want to reach is that read symbol from file and perform ifft and insert cp and then transmit.Just like you write: >> [file source 1] --> [ (I)FFT ] --> [ cyclic prefixer ] --> [ USRP sink 1] >> [file source 2] --> [ (I)FFT ] --> [ cyclic prefixer ] --> [ USRP sink 2] >> I can control them simutanously.Use some class like uhd::usrp::multi_usrp. >> Which is the best way to realize it?Use the c++ or write python flow graph?Thanks. >> Thank you so much. >> Best regards, >> xianda >> >> >> >> >> >> >> >> >> At 2014-05-31 08:25:53, "Marcus Müller" <address@hidden> wrote: >>> Hi Xianda, >>> >>> some of your emails are really hard to read due to your email client >>> writing non-standard-compliant HTML mail. Could you disable >>> HTML/multimedia mail? >>> >>>> What I want to do is that read symbols from file and perform fft and insert cp and then transmit to the usrp. >>> ok, thanks for clarifying that! >>> >>>> Just as the "fft" and "OFDM Cyclic Prefixer" do! >>> Well, the fft block doesn't read from a file, and ofdm cyclic prefixer does not transmit, but I get your point. >>> >>>> The easy way is use the <gnuradio/fft/fft.h> and <gnuradio/digital/ofdm_cyclic_prefixer.h>; >>> No! >>> In GNU Radio, you build flow graphs out of existing blocks, whenever possible. So you want to use >>> >>> [file source] --> [ (I)FFT ] --> [ cyclic prefixer ] --> [ USRP sink ] >>> >>> by instantiating these blocks, and connecting them to a GNU Radio flow graph. Then you let GNU Radio run that flow graph. >>> There's no need to write your own block, so far. Actually, you can do this without writing a single line of code just by constructing >>> above flow graph in gnuradio-companion. That will generate the flowgraph setup and starting program in python. >>> >>> If you need to add more functionality, you usually just add another block to this chain, but from what you've said there will be no need to do this. >>> >>> >>>> But as you said fft_complex_vcc is a block. But now how can i call it in my code? >>> You don't, see my previous post on calling work(). >>> >>> >>> Greetings, >>> Marcus >>> >>> >>> >>> On 31.05.2014 13:53, xianda wrote: >>>> Hi:<br/> Thank you so much.<br/> What I want to do is that read symbols from file and perform fft and insert cp and then transmit to the usrp.Just as the "fft" and "OFDM Cyclic Prefixer" do!<br/> The easy way is use the&lt;gnuradio/fft/fft.h&gt; and &lt;gnuradio/digital/ofdm_cyclic_prefixer.h&gt;.But as you said fft_complex_vcc is a block.But now how can i call it in my code?(It's a block.It has work function.)Can i add it's work function in my code?Thank you.<br/>Best regards,<br/>xianda >>>> At 2014-05-31 07:36:24, "Marcus Müller" <address@hidden> wrote: >>>>> Hi Xianda, >>>>> >>>>>> I just want to write c++ code to realize ("fft" block+"OFDM Cyclic >>>>> Prefixer"). >>>>> >>>>> Sorry, I still did not understand. I only understand your C++, so here's >>>>> my comments: >>>>> >>>>> The code you posted has really nothing to do with gr::block; >>>>> gr::fft:fft_complex is *not* a gr::block, and has no work()! >>>>> http://gnuradio.org/doc/doxygen/classgr_1_1fft_1_1fft__complex.html >>>>> >>>>> Also, I don't see the need to #include >>>>> <gnuradio/digital/ofdm_cyclic_prefixer.h>. Is this a mistake or was it >>>>> intentional? >>>>> >>>>> fft_complex really just a convenience wrapper around FFTW. >>>>> I haven't tried to test your code, and you could read() directly into >>>>> the get_inbuf() buffer, and write directly from your get_outbuf() >>>>> buffer, but it looks ok. >>>>> >>>>> Again: gr::fft:fft_complex is not a block! it is used from within >>>>> fft_complex_vcc (which is a block). >>>>> All it does is use the FFTW library to perform FFTs, you can do that >>>>> yourself without using GNU Radio at all. Only use it when you are >>>>> developing a GNU Radio program! >>>>> >>>>> Greetings, >>>>> Marcus >>>>> >>>>> >>>>> On 31.05.2014 13:21, xianda wrote: >>>>>> Hi: >>>>>> Thank you so much. >>>>>> I just want to write c++ code to realize ("fft" block+"OFDM Cyclic Prefixer"). >>>>>> And I attached my code which just realize ifft but the "OFDM Cyclic Prefixer" has it's work function. >>>>>> #include <fstream> >>>>>> #include <vector> >>>>>> #include <gnuradio/gr_complex.h> >>>>>> #include <gnuradio/fft/fft.h> >>>>>> #include <gnuradio/digital/ofdm_cyclic_prefixer.h> >>>>>> >>>>>> std::vector<std::complex<float> *> buff1(64);//read data >>>>>> std::vector<std::complex<float> *> buff2(64);//write data >>>>>> >>>>>> std::ifstream infile("a.dat",std::ifstream::binary); >>>>>> std::ofstream outfile("b.dat",std::ofstream::binary); >>>>>> >>>>>> int main(){ >>>>>> while(not infile.eof()) >>>>>> { >>>>>> infile.read((char*)&buff1.front(),buff1.size()*sizeof(std::complex<float>)); >>>>>> >>>>>> gr::fft::fft_complex *buff=new gr::fft::fft_complex(64,0); >>>>>> gr_complex *bu=buff->get_inbuf(); >>>>>> memcpy(bu,&buff1.front(),buff1.size()*sizeof(std::complex<float>)); >>>>>> buff->execute(); >>>>>> gr_complex *out=buff->get_outbuf(); >>>>>> memcpy(&buff2.front(),out,buff2.size()*sizeof(std::complex<float>)); >>>>>> >>>>>> outfile.write((char*)&buff2.front(),buff2.size()*sizeof(std::complex<float>)); >>>>>> } >>>>>> >>>>>> infile.close(); >>>>>> outfile.close(); >>>>>> } >>>>>> >>>>>> Thank you. >>>>>> Best regards, >>>>>> xianda >>>>>> >>>>>> At 2014-05-31 06:33:35, "Martin Braun" <address@hidden> wrote: >>>>>> >>>>>> >>>>>> >>>>>> On 31 May 2014 11:57, "Marcus Müller" <address@hidden> wrote: >>>>>>> Hi Xianda, >>>>>>> >>>>>>> >>>>>>>> I know every block should have it's work or general_work function.And i know it's used by scheduler >>>>>> For the record, a block that only uses message passing doesn't need a work function - not that that's what you're looking for here. >>>>>> >>>>>> >>>>>> M >>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> Discuss-gnuradio mailing list >>>>>> address@hidden >>>>>> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio >>>>> _______________________________________________ >>>>> Discuss-gnuradio mailing list >>>>> address@hidden >>>>> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio >



reply via email to

[Prev in Thread] Current Thread [Next in Thread]