Difference between revisions of "FFT Filter"

From GNU Radio
Jump to: navigation, search
(Created page with "Category:Block Docs Category:Stub Docs This is the template for the "Page-per-block Docs". This first section should describe what the block...")
 
(Source Files: added outside reference)
 
(2 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
[[Category:Block Docs]]
 
[[Category:Block Docs]]
[[Category:Stub Docs]]
+
This block implements a decimating filter using the fast convolution method via an FFTIt is an alternative to the [[Decimating FIR Filter]], useful when there is a large number of taps.
This is the template for the [[:Category:Block_Docs|"Page-per-block Docs"]].  This first section should describe what the block does and how to use it, using however many paragraphs necessary.  Note that the title of the wiki page should match the block's name in GRC, i.e. the one defined in the block's .grc fileLook at the [[FFT]] Block for a good example.
 
  
As this is a basic template, it's also in the [[:Category:Stub_Docs|"Stub Docs category"]]. Please improve it.
+
This filter is implemented by using the FFTW package to perform the required FFTs. An optional argument, nthreads, may be passed to the constructor (or set using the set_nthreads member function) to split the FFT among N number of threads. This can improve performance on very large FFTs (that is, if the number of taps used is very large) if you have enough threads/cores to support it.
 +
 
 +
For standard filters such as lowpass, highpass, bandpass, etc., the filter.firdes and filter.optfir classes provide convenient generating methods.
  
 
== Parameters ==
 
== Parameters ==
 
(''R''): <span class="plainlinks">[https://wiki.gnuradio.org/index.php/GNURadioCompanion#Variable_Controls ''Run-time adjustable'']</span>
 
(''R''): <span class="plainlinks">[https://wiki.gnuradio.org/index.php/GNURadioCompanion#Variable_Controls ''Run-time adjustable'']</span>
  
; Param 1 (''R'')
+
; Decimation
: Description of parameter, provide any tips or recommended values.  Note that the name of the parameter above should match the param's label that shows up in grc (e.g. Sample Rate).
+
: Decimation rate.  The output stream will have this decimation applied to it.  A decimation rate of 1 simply means no decimation.  If decimation is set higher than 1, make sure the filter will remove energy outside of the "output region", i.e. -Fs/2 to Fs/2 where Fs is the input sample rate divided by the decimation rate.
 +
 
 +
; Taps (''R'')
 +
: Taps to use in FIR filter.
 +
 
 +
; Sample Delay
 +
: Number of additional samples to delay signal by.
  
; Param 2
+
; Number of Threads
: blah blah blah
+
: Number of threads to use for this block, i.e. to increase performance on multicore CPUs.
  
 
== Example Flowgraph ==
 
== Example Flowgraph ==
  
Insert description of flowgraph here, then show a screenshot of the flowgraph and the output if there is an interesting GUI.  Currently we have no standard method of uploading the actual flowgraph to the wiki or git repo, unfortunately. The plan is to have an example flowgraph showing how the block might be used, for every block, and the flowgraphs will live in the git repo.
+
This flowgraph implements a Broadcast FM stereo receiver using basic blocks.
 +
 
 +
[[File:USRP_FM_stereo_fg.png|644px]]
  
 
== Source Files ==
 
== Source Files ==
Line 31: Line 40:
 
; Block definition
 
; Block definition
 
: [https://github.com/gnuradio/gnuradio TODO]
 
: [https://github.com/gnuradio/gnuradio TODO]
 +
 +
== Outside References ==
 +
:  [http://www.trondeau.com/blog/2014/2/27/to-use-or-not-to-use-fft-filters.html|To Use or Not to Use FFT Filters]
 +
 +
http://blog.sdr.hu/grblocks/xlating-fir.html

Latest revision as of 05:48, 29 November 2020

This block implements a decimating filter using the fast convolution method via an FFT. It is an alternative to the Decimating FIR Filter, useful when there is a large number of taps.

This filter is implemented by using the FFTW package to perform the required FFTs. An optional argument, nthreads, may be passed to the constructor (or set using the set_nthreads member function) to split the FFT among N number of threads. This can improve performance on very large FFTs (that is, if the number of taps used is very large) if you have enough threads/cores to support it.

For standard filters such as lowpass, highpass, bandpass, etc., the filter.firdes and filter.optfir classes provide convenient generating methods.

Parameters[edit]

(R): Run-time adjustable

Decimation
Decimation rate. The output stream will have this decimation applied to it. A decimation rate of 1 simply means no decimation. If decimation is set higher than 1, make sure the filter will remove energy outside of the "output region", i.e. -Fs/2 to Fs/2 where Fs is the input sample rate divided by the decimation rate.
Taps (R)
Taps to use in FIR filter.
Sample Delay
Number of additional samples to delay signal by.
Number of Threads
Number of threads to use for this block, i.e. to increase performance on multicore CPUs.

Example Flowgraph[edit]

This flowgraph implements a Broadcast FM stereo receiver using basic blocks.

USRP FM stereo fg.png

Source Files[edit]

C++ files
TODO
Header files
TODO
Public header files
TODO
Block definition
TODO

Outside References[edit]

Use or Not to Use FFT Filters

http://blog.sdr.hu/grblocks/xlating-fir.html