usrp-users@lists.ettus.com

Discussion and technical support related to USRP, UHD, RFNoC

View all threads

RFNOC: FIR 'set-taps' function causing output of all zero

GJ
Greene,David J
Mon, Dec 14, 2015 6:31 PM

Hi folks,

I'm using the rx_samples_to_file.cpp demo application with very minor modifications (listed below). I'm having an issue with the noc_block_fir_filter in RFNOC on an E310. Whenever I try to set the taps, using the set_taps method of the uhd::rfnoc::fir_block_ctrl class in my main function, I get an output of all zeros.

Here's the funny part, I can go through and manually edit fir_block_ctrl_impl.cpp to assign a fixed vector of taps instead of all zeros, re-compile, and it will assign them just fine when it instantiates the blocks. However, if I try calling this method from my main file, I get an output of all zeros. No warnings or errors are thrown, as far as I can tell. I've tried changing up the order of setting the channel, passing the streamargs, and assigning the taps; no luck.

Any insight would be appreciated, thanks!

Changes to rx_samples_to_file.cpp (aside from adding the required includes), blockid is always FIR,

    // Clear the E310
    usrp->get_device3()->clear();

    // Clear all previous channels
    usrp->clear_channels();

    // Create a pointer to our FIR filter
    uhd::rfnoc::fir_block_ctrl::sptr fir_block_ctrl_imp =
            usrp->get_device3()->find_block_ctrl< uhd::rfnoc::fir_block_ctrl >(blockid);

    // Read in our filter taps (single column of ints) from a file
    std::vector<int> coeffsVector;
    std::ifstream coeffsFile(coeffs);
    if (coeffsFile) {
        int value;
        while (coeffsFile >> value) coeffsVector.push_back(value);
    }
    coeffsFile.close();
    std::cout << "-- Read " << coeffsVector.size() << " filter taps.\n";

    // Set the taps on our FIR Filter
    fir_block_ctrl_imp->set_taps(coeffsVector);

    // Pass through our stream arguments to the blocks
    fir_block_ctrl_imp->set_args(streamargs);
    usrp->get_device3()->get_block_ctrl(radio_ctrl_id)->set_args(streamargs);

    // Connect our blocks together
    std::cout << "Connecting Blocks..." << std::endl;
    usrp->connect(radio_ctrl_id, fir_block_ctrl_imp->get_block_id());

    // Set the RX Channel to the ARM
    usrp->set_rx_channel(fir_block_ctrl_imp->get_block_id());

All the best,

David Greene

University of Florida

Hi folks, I'm using the rx_samples_to_file.cpp demo application with very minor modifications (listed below). I'm having an issue with the noc_block_fir_filter in RFNOC on an E310. Whenever I try to set the taps, using the set_taps method of the uhd::rfnoc::fir_block_ctrl class in my main function, I get an output of all zeros. Here's the funny part, I can go through and manually edit fir_block_ctrl_impl.cpp to assign a fixed vector of taps instead of all zeros, re-compile, and it will assign them just fine when it instantiates the blocks. However, if I try calling this method from my main file, I get an output of all zeros. No warnings or errors are thrown, as far as I can tell. I've tried changing up the order of setting the channel, passing the streamargs, and assigning the taps; no luck. Any insight would be appreciated, thanks! Changes to rx_samples_to_file.cpp (aside from adding the required includes), blockid is always FIR, // Clear the E310 usrp->get_device3()->clear(); // Clear all previous channels usrp->clear_channels(); // Create a pointer to our FIR filter uhd::rfnoc::fir_block_ctrl::sptr fir_block_ctrl_imp = usrp->get_device3()->find_block_ctrl< uhd::rfnoc::fir_block_ctrl >(blockid); // Read in our filter taps (single column of ints) from a file std::vector<int> coeffsVector; std::ifstream coeffsFile(coeffs); if (coeffsFile) { int value; while (coeffsFile >> value) coeffsVector.push_back(value); } coeffsFile.close(); std::cout << "-- Read " << coeffsVector.size() << " filter taps.\n"; // Set the taps on our FIR Filter fir_block_ctrl_imp->set_taps(coeffsVector); // Pass through our stream arguments to the blocks fir_block_ctrl_imp->set_args(streamargs); usrp->get_device3()->get_block_ctrl(radio_ctrl_id)->set_args(streamargs); // Connect our blocks together std::cout << "Connecting Blocks..." << std::endl; usrp->connect(radio_ctrl_id, fir_block_ctrl_imp->get_block_id()); // Set the RX Channel to the ARM usrp->set_rx_channel(fir_block_ctrl_imp->get_block_id()); All the best, David Greene University of Florida
GJ
Greene,David J
Wed, Dec 16, 2015 6:19 PM

It would probably be more useful to the list-serve if I include the E310 bit file, sorry about that...

This contains the Radio_0, Radio_1, FIFO, and a 31-tap FIR filter block.  It was built on 12/14/2015 using the latest source. Thanks again!

Dropbox link in case the list-serve blocks it:

https://www.dropbox.com/s/qa61rrojfyhynwx/usrp_e310_fpga_fir_31taps.bit?dl=0

All the best,

David Greene

University of Florida

Mobile: (954) 655-3421


From: USRP-users usrp-users-bounces@lists.ettus.com on behalf of Greene,David J via USRP-users usrp-users@lists.ettus.com
Sent: Monday, December 14, 2015 1:31 PM
To: usrp-users@lists.ettus.com
Subject: [USRP-users] RFNOC: FIR 'set-taps' function causing output of all zero

Hi folks,

I'm using the rx_samples_to_file.cpp demo application with very minor modifications (listed below). I'm having an issue with the noc_block_fir_filter in RFNOC on an E310. Whenever I try to set the taps, using the set_taps method of the uhd::rfnoc::fir_block_ctrl class in my main function, I get an output of all zeros.

Here's the funny part, I can go through and manually edit fir_block_ctrl_impl.cpp to assign a fixed vector of taps instead of all zeros, re-compile, and it will assign them just fine when it instantiates the blocks. However, if I try calling this method from my main file, I get an output of all zeros. No warnings or errors are thrown, as far as I can tell. I've tried changing up the order of setting the channel, passing the streamargs, and assigning the taps; no luck.

Any insight would be appreciated, thanks!

Changes to rx_samples_to_file.cpp (aside from adding the required includes), blockid is always FIR,

    // Clear the E310
    usrp->get_device3()->clear();

    // Clear all previous channels
    usrp->clear_channels();

    // Create a pointer to our FIR filter
    uhd::rfnoc::fir_block_ctrl::sptr fir_block_ctrl_imp =
            usrp->get_device3()->find_block_ctrl< uhd::rfnoc::fir_block_ctrl >(blockid);

    // Read in our filter taps (single column of ints) from a file
    std::vector<int> coeffsVector;
    std::ifstream coeffsFile(coeffs);
    if (coeffsFile) {
        int value;
        while (coeffsFile >> value) coeffsVector.push_back(value);
    }
    coeffsFile.close();
    std::cout << "-- Read " << coeffsVector.size() << " filter taps.\n";

    // Set the taps on our FIR Filter
    fir_block_ctrl_imp->set_taps(coeffsVector);

    // Pass through our stream arguments to the blocks
    fir_block_ctrl_imp->set_args(streamargs);
    usrp->get_device3()->get_block_ctrl(radio_ctrl_id)->set_args(streamargs);

    // Connect our blocks together
    std::cout << "Connecting Blocks..." << std::endl;
    usrp->connect(radio_ctrl_id, fir_block_ctrl_imp->get_block_id());

    // Set the RX Channel to the ARM
    usrp->set_rx_channel(fir_block_ctrl_imp->get_block_id());

All the best,

David Greene

University of Florida

It would probably be more useful to the list-serve if I include the E310 bit file, sorry about that... This contains the Radio_0, Radio_1, FIFO, and a 31-tap FIR filter block. It was built on 12/14/2015 using the latest source. Thanks again! Dropbox link in case the list-serve blocks it: https://www.dropbox.com/s/qa61rrojfyhynwx/usrp_e310_fpga_fir_31taps.bit?dl=0 All the best, David Greene University of Florida Mobile: (954) 655-3421 ________________________________ From: USRP-users <usrp-users-bounces@lists.ettus.com> on behalf of Greene,David J via USRP-users <usrp-users@lists.ettus.com> Sent: Monday, December 14, 2015 1:31 PM To: usrp-users@lists.ettus.com Subject: [USRP-users] RFNOC: FIR 'set-taps' function causing output of all zero Hi folks, I'm using the rx_samples_to_file.cpp demo application with very minor modifications (listed below). I'm having an issue with the noc_block_fir_filter in RFNOC on an E310. Whenever I try to set the taps, using the set_taps method of the uhd::rfnoc::fir_block_ctrl class in my main function, I get an output of all zeros. Here's the funny part, I can go through and manually edit fir_block_ctrl_impl.cpp to assign a fixed vector of taps instead of all zeros, re-compile, and it will assign them just fine when it instantiates the blocks. However, if I try calling this method from my main file, I get an output of all zeros. No warnings or errors are thrown, as far as I can tell. I've tried changing up the order of setting the channel, passing the streamargs, and assigning the taps; no luck. Any insight would be appreciated, thanks! Changes to rx_samples_to_file.cpp (aside from adding the required includes), blockid is always FIR, // Clear the E310 usrp->get_device3()->clear(); // Clear all previous channels usrp->clear_channels(); // Create a pointer to our FIR filter uhd::rfnoc::fir_block_ctrl::sptr fir_block_ctrl_imp = usrp->get_device3()->find_block_ctrl< uhd::rfnoc::fir_block_ctrl >(blockid); // Read in our filter taps (single column of ints) from a file std::vector<int> coeffsVector; std::ifstream coeffsFile(coeffs); if (coeffsFile) { int value; while (coeffsFile >> value) coeffsVector.push_back(value); } coeffsFile.close(); std::cout << "-- Read " << coeffsVector.size() << " filter taps.\n"; // Set the taps on our FIR Filter fir_block_ctrl_imp->set_taps(coeffsVector); // Pass through our stream arguments to the blocks fir_block_ctrl_imp->set_args(streamargs); usrp->get_device3()->get_block_ctrl(radio_ctrl_id)->set_args(streamargs); // Connect our blocks together std::cout << "Connecting Blocks..." << std::endl; usrp->connect(radio_ctrl_id, fir_block_ctrl_imp->get_block_id()); // Set the RX Channel to the ARM usrp->set_rx_channel(fir_block_ctrl_imp->get_block_id()); All the best, David Greene University of Florida
JP
Jonathon Pendlum
Wed, Dec 16, 2015 8:21 PM

Hi David,

I don't see any reason why what you are doing shouldn't work. If I were to
guess, I would say that the FPGA is not accepting the taps properly. Can
you try sending the same taps twice or three times in a row and see if that
makes a difference? I'll also take a closer look with chipscope.

Jonathon

On Wed, Dec 16, 2015 at 10:19 AM, Greene,David J via USRP-users <
usrp-users@lists.ettus.com> wrote:

It would probably be more useful to the list-serve if I include the
E310 bit file, sorry about that...

This contains the Radio_0, Radio_1, FIFO, and a 31-tap FIR filter block.
It was built on 12/14/2015 using the latest source. Thanks again!

Dropbox link in case the list-serve blocks it:

https://www.dropbox.com/s/qa61rrojfyhynwx/usrp_e310_fpga_fir_31taps.bit?dl=0

All the best,

David Greene

University of Florida

Mobile: (954) 655-3421


From: USRP-users usrp-users-bounces@lists.ettus.com on behalf of
Greene,David J via USRP-users usrp-users@lists.ettus.com
Sent: Monday, December 14, 2015 1:31 PM
To: usrp-users@lists.ettus.com
Subject: [USRP-users] RFNOC: FIR 'set-taps' function causing output of
all zero

Hi folks,

I'm using the rx_samples_to_file.cpp demo application with very minor
modifications (listed below). I'm having an issue with the
noc_block_fir_filter in RFNOC on an E310. Whenever I try to set the taps,
using the set_taps method of the uhd::rfnoc::fir_block_ctrl class in my
main function, I get an output of all zeros.

Here's the funny part, I can go through and manually
edit fir_block_ctrl_impl.cpp to assign a fixed vector of taps instead of
all zeros, re-compile, and it will assign them just fine when it
instantiates the blocks. However, if I try calling this method from my main
file, I get an output of all zeros. No warnings or errors are thrown, as
far as I can tell. I've tried changing up the order of setting the channel,
passing the streamargs, and assigning the taps; no luck.

Any insight would be appreciated, thanks!

Changes to rx_samples_to_file.cpp (aside from adding the required
includes), blockid is always FIR,

     // Clear the E310
     usrp->get_device3()->clear();

     // Clear all previous channels
     usrp->clear_channels();

     // Create a pointer to our FIR filter
     uhd::rfnoc::fir_block_ctrl::sptr fir_block_ctrl_imp =
             usrp->get_device3()->find_block_ctrl<

uhd::rfnoc::fir_block_ctrl >(blockid);

     // Read in our filter taps (single column of ints) from a file
     std::vector<int> coeffsVector;
     std::ifstream coeffsFile(coeffs);
     if (coeffsFile) {
         int value;
         while (coeffsFile >> value) coeffsVector.push_back(value);
     }
     coeffsFile.close();
     std::cout << "-- Read " << coeffsVector.size() << " filter

taps.\n";

     // Set the taps on our FIR Filter
     fir_block_ctrl_imp->set_taps(coeffsVector);

     // Pass through our stream arguments to the blocks
     fir_block_ctrl_imp->set_args(streamargs);

usrp->get_device3()->get_block_ctrl(radio_ctrl_id)->set_args(streamargs);

     // Connect our blocks together
     std::cout << "Connecting Blocks..." << std::endl;
     usrp->connect(radio_ctrl_id, fir_block_ctrl_imp->get_block_id());

     // Set the RX Channel to the ARM
     usrp->set_rx_channel(fir_block_ctrl_imp->get_block_id());

All the best,

David Greene

University of Florida


USRP-users mailing list
USRP-users@lists.ettus.com
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com

Hi David, I don't see any reason why what you are doing shouldn't work. If I were to guess, I would say that the FPGA is not accepting the taps properly. Can you try sending the same taps twice or three times in a row and see if that makes a difference? I'll also take a closer look with chipscope. Jonathon On Wed, Dec 16, 2015 at 10:19 AM, Greene,David J via USRP-users < usrp-users@lists.ettus.com> wrote: > It would probably be more useful to the list-serve if I include the > E310 bit file, sorry about that... > > > This contains the Radio_0, Radio_1, FIFO, and a 31-tap FIR filter block. > It was built on 12/14/2015 using the latest source. Thanks again! > > > Dropbox link in case the list-serve blocks it: > > > https://www.dropbox.com/s/qa61rrojfyhynwx/usrp_e310_fpga_fir_31taps.bit?dl=0 > > > All the best, > > > David Greene > > University of Florida > > Mobile: (954) 655-3421 > > > ------------------------------ > *From:* USRP-users <usrp-users-bounces@lists.ettus.com> on behalf of > Greene,David J via USRP-users <usrp-users@lists.ettus.com> > *Sent:* Monday, December 14, 2015 1:31 PM > *To:* usrp-users@lists.ettus.com > *Subject:* [USRP-users] RFNOC: FIR 'set-taps' function causing output of > all zero > > > Hi folks, > > > I'm using the rx_samples_to_file.cpp demo application with very minor > modifications (listed below). I'm having an issue with the > noc_block_fir_filter in RFNOC on an E310. Whenever I try to set the taps, > using the set_taps method of the uhd::rfnoc::fir_block_ctrl class in my > main function, I get an output of all zeros. > > > Here's the funny part, I can go through and manually > edit fir_block_ctrl_impl.cpp to assign a fixed vector of taps instead of > all zeros, re-compile, and it will assign them just fine when it > instantiates the blocks. However, if I try calling this method from my main > file, I get an output of all zeros. No warnings or errors are thrown, as > far as I can tell. I've tried changing up the order of setting the channel, > passing the streamargs, and assigning the taps; no luck. > > > Any insight would be appreciated, thanks! > > > Changes to rx_samples_to_file.cpp (aside from adding the required > includes), blockid is always FIR, > > > // Clear the E310 > usrp->get_device3()->clear(); > > // Clear all previous channels > usrp->clear_channels(); > > // Create a pointer to our FIR filter > uhd::rfnoc::fir_block_ctrl::sptr fir_block_ctrl_imp = > usrp->get_device3()->find_block_ctrl< > uhd::rfnoc::fir_block_ctrl >(blockid); > > // Read in our filter taps (single column of ints) from a file > std::vector<int> coeffsVector; > std::ifstream coeffsFile(coeffs); > if (coeffsFile) { > int value; > while (coeffsFile >> value) coeffsVector.push_back(value); > } > coeffsFile.close(); > std::cout << "-- Read " << coeffsVector.size() << " filter > taps.\n"; > > // Set the taps on our FIR Filter > fir_block_ctrl_imp->set_taps(coeffsVector); > > // Pass through our stream arguments to the blocks > fir_block_ctrl_imp->set_args(streamargs); > > usrp->get_device3()->get_block_ctrl(radio_ctrl_id)->set_args(streamargs); > > > // Connect our blocks together > std::cout << "Connecting Blocks..." << std::endl; > usrp->connect(radio_ctrl_id, fir_block_ctrl_imp->get_block_id()); > > // Set the RX Channel to the ARM > usrp->set_rx_channel(fir_block_ctrl_imp->get_block_id()); > > > > All the best, > > > David Greene > > University of Florida > > > _______________________________________________ > USRP-users mailing list > USRP-users@lists.ettus.com > http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com > >
GJ
Greene,David J
Wed, Dec 16, 2015 11:14 PM

Hi Jonathan,

I've tried multiple sets, even tried including a delay in case it was taking some time to settle before streaming, no luck.

If I call 'set_taps' more than twice, the channel outputs zeros. After analyzing the frequency response of the data I'm getting back when it does work, it doesn't seem to be using the taps I specify at all...just the initial taps set in VHDL. I'm assuming the 'coefficient reload' isn't working, so I'm taking a stab at rebuilding the ip entirely and inserting it back into the design. I noticed the original seemed to have been designed for the xc7k410t, so it may be worth looking into it.

I'll post back on my progress, thanks.

All the best,

David Greene

University of Florida


From: Jonathon Pendlum jonathon.pendlum@ettus.com
Sent: Wednesday, December 16, 2015 3:21 PM
To: Greene,David J
Cc: usrp-users@lists.ettus.com
Subject: Re: [USRP-users] RFNOC: FIR 'set-taps' function causing output of all zero

Hi David,

I don't see any reason why what you are doing shouldn't work. If I were to guess, I would say that the FPGA is not accepting the taps properly. Can you try sending the same taps twice or three times in a row and see if that makes a difference? I'll also take a closer look with chipscope.

Jonathon

On Wed, Dec 16, 2015 at 10:19 AM, Greene,David J via USRP-users <usrp-users@lists.ettus.commailto:usrp-users@lists.ettus.com> wrote:

It would probably be more useful to the list-serve if I include the E310 bit file, sorry about that...

This contains the Radio_0, Radio_1, FIFO, and a 31-tap FIR filter block.  It was built on 12/14/2015 using the latest source. Thanks again!

Dropbox link in case the list-serve blocks it:

https://www.dropbox.com/s/qa61rrojfyhynwx/usrp_e310_fpga_fir_31taps.bit?dl=0

All the best,

David Greene

University of Florida

Mobile: (954) 655-3421tel:%28954%29%20655-3421


From: USRP-users <usrp-users-bounces@lists.ettus.commailto:usrp-users-bounces@lists.ettus.com> on behalf of Greene,David J via USRP-users <usrp-users@lists.ettus.commailto:usrp-users@lists.ettus.com>
Sent: Monday, December 14, 2015 1:31 PM
To: usrp-users@lists.ettus.commailto:usrp-users@lists.ettus.com
Subject: [USRP-users] RFNOC: FIR 'set-taps' function causing output of all zero

Hi folks,

I'm using the rx_samples_to_file.cpp demo application with very minor modifications (listed below). I'm having an issue with the noc_block_fir_filter in RFNOC on an E310. Whenever I try to set the taps, using the set_taps method of the uhd::rfnoc::fir_block_ctrl class in my main function, I get an output of all zeros.

Here's the funny part, I can go through and manually edit fir_block_ctrl_impl.cpp to assign a fixed vector of taps instead of all zeros, re-compile, and it will assign them just fine when it instantiates the blocks. However, if I try calling this method from my main file, I get an output of all zeros. No warnings or errors are thrown, as far as I can tell. I've tried changing up the order of setting the channel, passing the streamargs, and assigning the taps; no luck.

Any insight would be appreciated, thanks!

Changes to rx_samples_to_file.cpp (aside from adding the required includes), blockid is always FIR,

    // Clear the E310
    usrp->get_device3()->clear();

    // Clear all previous channels
    usrp->clear_channels();

    // Create a pointer to our FIR filter
    uhd::rfnoc::fir_block_ctrl::sptr fir_block_ctrl_imp =
            usrp->get_device3()->find_block_ctrl< uhd::rfnoc::fir_block_ctrl >(blockid);

    // Read in our filter taps (single column of ints) from a file
    std::vector<int> coeffsVector;
    std::ifstream coeffsFile(coeffs);
    if (coeffsFile) {
        int value;
        while (coeffsFile >> value) coeffsVector.push_back(value);
    }
    coeffsFile.close();
    std::cout << "-- Read " << coeffsVector.size() << " filter taps.\n";

    // Set the taps on our FIR Filter
    fir_block_ctrl_imp->set_taps(coeffsVector);

    // Pass through our stream arguments to the blocks
    fir_block_ctrl_imp->set_args(streamargs);
    usrp->get_device3()->get_block_ctrl(radio_ctrl_id)->set_args(streamargs);

    // Connect our blocks together
    std::cout << "Connecting Blocks..." << std::endl;
    usrp->connect(radio_ctrl_id, fir_block_ctrl_imp->get_block_id());

    // Set the RX Channel to the ARM
    usrp->set_rx_channel(fir_block_ctrl_imp->get_block_id());

All the best,

David Greene

University of Florida


USRP-users mailing list
USRP-users@lists.ettus.commailto:USRP-users@lists.ettus.com
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com

Hi Jonathan, I've tried multiple sets, even tried including a delay in case it was taking some time to settle before streaming, no luck. If I call 'set_taps' more than twice, the channel outputs zeros. After analyzing the frequency response of the data I'm getting back when it does work, it doesn't seem to be using the taps I specify at all...just the initial taps set in VHDL. I'm assuming the 'coefficient reload' isn't working, so I'm taking a stab at rebuilding the ip entirely and inserting it back into the design. I noticed the original seemed to have been designed for the xc7k410t, so it may be worth looking into it. I'll post back on my progress, thanks. All the best, David Greene University of Florida ________________________________ From: Jonathon Pendlum <jonathon.pendlum@ettus.com> Sent: Wednesday, December 16, 2015 3:21 PM To: Greene,David J Cc: usrp-users@lists.ettus.com Subject: Re: [USRP-users] RFNOC: FIR 'set-taps' function causing output of all zero Hi David, I don't see any reason why what you are doing shouldn't work. If I were to guess, I would say that the FPGA is not accepting the taps properly. Can you try sending the same taps twice or three times in a row and see if that makes a difference? I'll also take a closer look with chipscope. Jonathon On Wed, Dec 16, 2015 at 10:19 AM, Greene,David J via USRP-users <usrp-users@lists.ettus.com<mailto:usrp-users@lists.ettus.com>> wrote: It would probably be more useful to the list-serve if I include the E310 bit file, sorry about that... This contains the Radio_0, Radio_1, FIFO, and a 31-tap FIR filter block. It was built on 12/14/2015 using the latest source. Thanks again! Dropbox link in case the list-serve blocks it: https://www.dropbox.com/s/qa61rrojfyhynwx/usrp_e310_fpga_fir_31taps.bit?dl=0 All the best, David Greene University of Florida Mobile: (954) 655-3421<tel:%28954%29%20655-3421> ________________________________ From: USRP-users <usrp-users-bounces@lists.ettus.com<mailto:usrp-users-bounces@lists.ettus.com>> on behalf of Greene,David J via USRP-users <usrp-users@lists.ettus.com<mailto:usrp-users@lists.ettus.com>> Sent: Monday, December 14, 2015 1:31 PM To: usrp-users@lists.ettus.com<mailto:usrp-users@lists.ettus.com> Subject: [USRP-users] RFNOC: FIR 'set-taps' function causing output of all zero Hi folks, I'm using the rx_samples_to_file.cpp demo application with very minor modifications (listed below). I'm having an issue with the noc_block_fir_filter in RFNOC on an E310. Whenever I try to set the taps, using the set_taps method of the uhd::rfnoc::fir_block_ctrl class in my main function, I get an output of all zeros. Here's the funny part, I can go through and manually edit fir_block_ctrl_impl.cpp to assign a fixed vector of taps instead of all zeros, re-compile, and it will assign them just fine when it instantiates the blocks. However, if I try calling this method from my main file, I get an output of all zeros. No warnings or errors are thrown, as far as I can tell. I've tried changing up the order of setting the channel, passing the streamargs, and assigning the taps; no luck. Any insight would be appreciated, thanks! Changes to rx_samples_to_file.cpp (aside from adding the required includes), blockid is always FIR, // Clear the E310 usrp->get_device3()->clear(); // Clear all previous channels usrp->clear_channels(); // Create a pointer to our FIR filter uhd::rfnoc::fir_block_ctrl::sptr fir_block_ctrl_imp = usrp->get_device3()->find_block_ctrl< uhd::rfnoc::fir_block_ctrl >(blockid); // Read in our filter taps (single column of ints) from a file std::vector<int> coeffsVector; std::ifstream coeffsFile(coeffs); if (coeffsFile) { int value; while (coeffsFile >> value) coeffsVector.push_back(value); } coeffsFile.close(); std::cout << "-- Read " << coeffsVector.size() << " filter taps.\n"; // Set the taps on our FIR Filter fir_block_ctrl_imp->set_taps(coeffsVector); // Pass through our stream arguments to the blocks fir_block_ctrl_imp->set_args(streamargs); usrp->get_device3()->get_block_ctrl(radio_ctrl_id)->set_args(streamargs); // Connect our blocks together std::cout << "Connecting Blocks..." << std::endl; usrp->connect(radio_ctrl_id, fir_block_ctrl_imp->get_block_id()); // Set the RX Channel to the ARM usrp->set_rx_channel(fir_block_ctrl_imp->get_block_id()); All the best, David Greene University of Florida _______________________________________________ USRP-users mailing list USRP-users@lists.ettus.com<mailto:USRP-users@lists.ettus.com> http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com