polyphase-filter-bank-generator

This code generates the filter weights for polyphase filter banks with arbitrary numbers of channels, and with configurable windows.

https://github.com/nlesc/polyphase-filter-bank-generator

Science Score: 67.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 1 DOI reference(s) in README
  • Academic publication links
  • Committers with academic emails
    1 of 2 committers (50.0%) from academic institutions
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (12.5%) to scientific vocabulary
Last synced: 6 months ago · JSON representation ·

Repository

This code generates the filter weights for polyphase filter banks with arbitrary numbers of channels, and with configurable windows.

Basic Info
  • Host: GitHub
  • Owner: NLeSC
  • License: apache-2.0
  • Language: C++
  • Default Branch: master
  • Size: 101 KB
Statistics
  • Stars: 23
  • Watchers: 4
  • Forks: 6
  • Open Issues: 0
  • Releases: 0
Created over 8 years ago · Last pushed over 1 year ago
Metadata Files
Readme License Citation

README.rst

POLYPHASE FILTER BANK GENERATOR
===============================

Implemented by Rob V. van Nieuwpoort, http://www.vannieuwpoort.com/,
at the Netherlands eScience center (https://www.esciencecenter.nl/).

This program is a stand-alone version of the polyphase filter bank
generator I designed and implemented for the LOFAR telescope (http://www.lofar.org/). This
code generates the filter weights for polyphase filter banks with
arbitrary numbers of channels, and with configurable windows.  Window
types currently supported are: HAMMING, BLACKMAN, GAUSSIAN, and
KAISER.  The original code is a part of the LOFAR real-time central
processor (the correlator). The code is completely generic, and can
be used for other telescopes, or even completely different signal
processing applications as well.

The paper below describes the LOFAR real-time central processing
pipeline. This production pipeline uses the filter bank generator to
generate the correct polyphase filter banks at run time, depending on
the telescope paramters.

John W. Romein, P. Chris Broekema, Jan David Mol, Rob V. van Nieuwpoort:
The LOFAR Correlator: Implementation and Performance Analysis,
ACM Symposium on Principles and Practice of Parallel Programming (PPoPP’10), Bangalore, India, pp. 169-178, January, 2010.
https://vannieuwpoort.com/wp-content/uploads/lofar.pdf

The paper describes the usage of the filter bank as follows.

The LOFAR subband data are processed by a Poly-Phase Filter bank
(PPF) that splits a frequency subband into a number of narrower
frequency channels. In this step, we trade time resolution for frequency
resolution: we split a subband into N separate channels, but
with an N-times lower sampling rate per channel. With the higher
frequency resolution, we can remove RFI artifacts with a higher accuracy
later in the pipeline. For LOFAR, typically a 195 KHz subband is split
into 256 channels of 763 Hz, but the filter supports any reasonable
power-of-two number of channels for different observation modes.
The PPF consists of two parts. First, the data are filtered using
Finite Impulse Response (FIR) filters. A FIR filter simply multiplies
a sample with a real weight factor, and also adds a number
of weighted samples from the past. Since we have to support different
numbers of channels, our software automatically designs a
filter bank with the desired properties and number of channels at
run time, generating the FIR filter weights on the fly. This again
demonstrates the flexibility of a software solution. For performance
reasons, the implementation of the filter is done in assembly. Next,
the filtered data are Fourier Transformed.

Please cite this paper if this code is useful to you.


dependencies:
-------------

This code needs FFTW3 to run. (On Debian / Ubuntu based systems, you can use "sudo apt install libfftw3-dev" to install it.
Gnuplot is used to show the output, but this is optional.

Compiling the code:
-------------------

just type "make". The code should be compiled, and you should now have an executable called "polyphase-filter-bank-generator".
You can run the code as follows: ./polyphase-filter-bank-generator [nrChannels] [nrTaps] [windowType]", 
where windowType is one of HAMMING, BLACKMAN, GAUSSIAN, KAISER.

Visualizing the output:
-----------------------

You can show the filter constants of the filter bank by running "make plot". 
This will generate a small filter bank with 32 channels, and 16 filter taps per channel, using all different window options. 
The filter constants are saved to a file called "[WINDOW]-example.data". Next, gnuplot is used to plot the data, saving the result to example.pdf.

.. image:: example.jpg?raw=true



RELATED WORK: polyphase filter bank implementations on CPUs and GPUs.
---------------------------------------------------------------------

You can use the filter bank constants generated with this generator program to create a filter bank.
I also worked on polyphase filter bank implementations for GPUs and multi-core processors.
The code runs on Intel CPUs (written in C), NVIDIA (with Cuda) and AMD GPUs (with OpenCL), and on the simulated MicroGrid architecture. 
The source code for the filter banks is available here:
https://vannieuwpoort.com/wp-content/uploads/2023/05/ppf.zip

For more information, see this paper:

Karel van der Veldt, Rob van Nieuwpoort, Ana Lucia Varbanescu and Chris Jesshope:
A Polyphase Filter For GPUs And Multi-Core Processors
First Workshop on High Performance Computing in Astronomy (AstroHPC 2012)
In conjunction with the 21-st International ACM Symposium on High-Performance Parallel and Distributed Computing (HPDC 2012) June 19, 2012, Delft, the Netherlands.
https://vannieuwpoort.com/wp-content/uploads/astro05-vanderveldt.pdf.

For more details on the implementation, you can also have a
look at Karel’s master thesis:
A Polyphase Filter For GPUs And Multi-Core Processors.
https://vannieuwpoort.com/wp-content/uploads/Karel-van-der-Veldt.pdf




For more information on Polyphase filter banks in general, please see the paper by Harris et al.:

F.J. Harris ; C. Dick ; M. Rice
Digital receivers and transmitters using polyphase filter banks for wireless communications
IEEE Transactions on Microwave Theory and Techniques ( Volume: 51, Issue: 4, Apr 2003 )
Page(s): 1395 - 1412
April 2003 
DOI: 10.1109/TMTT.2003.809176

Owner

  • Name: Netherlands eScience Center
  • Login: NLeSC
  • Kind: organization
  • Location: Amsterdam, The Netherlands

Citation (CITATION.cff)

# This CITATION.cff file was generated with cffinit.
# Visit https://bit.ly/cffinit to generate yours today!

cff-version: 1.2.0
title: polyphase filter bank generator
message: >-
  If you use this software, please cite it using the
  metadata from this file.
type: software
authors:
  - given-names: Rob
    name-particle: van
    family-names: Nieuwpoort
    email: r.v.van.nieuwpoort@liacs.leidenuniv.nl
    affiliation: Leiden University
    orcid: 'https://orcid.org/0000-0002-2947-9444'
identifiers:
  - type: doi
    value: 10.1145/1693453.1693477
    description: Paper descibing the LOFAR pipeline
repository-code: 'https://github.com/NLeSC/polyphase-filter-bank-generator'
url: 'https://github.com/NLeSC/polyphase-filter-bank-generator'
abstract: >-
  This program is a stand-alone version of the polyphase
  filter bank generator I designed and implemented for the
  LOFAR telescope (http://www.lofar.org/). This code
  generates the filter weights for polyphase filter banks
  with arbitrary numbers of channels, and with configurable
  windows. The original code is a part of the LOFAR
  real-time central processor (the correlator). The code is
  completely generic, and can be used for other telescopes,
  or even completely different signal processing
  applications as well. The LOFAR subband data are processed
  by a Poly-Phase Filter bank (PPF) that splits a frequency
  subband into a number of narrower frequency channels. In
  this step, we trade time resolution for frequency
  resolution: we split a subband into N separate channels,
  but with an N-times lower sampling rate per channel.
keywords:
  - LOFAR
  - polyphase
  - filterbank
  - radio astronomy
  - signal processing
license: Apache-2.0

GitHub Events

Total
  • Watch event: 2
Last Year
  • Watch event: 2

Committers

Last synced: 9 months ago

All Time
  • Total Commits: 15
  • Total Committers: 2
  • Avg Commits per committer: 7.5
  • Development Distribution Score (DDS): 0.2
Past Year
  • Commits: 1
  • Committers: 1
  • Avg Commits per committer: 1.0
  • Development Distribution Score (DDS): 0.0
Top Committers
Name Email Commits
Rob van Nieuwpoort R****t@e****l 12
Rob V. van Nieuwpoort r****t@l****l 3
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 9 months ago

All Time
  • Total issues: 1
  • Total pull requests: 0
  • Average time to close issues: 12 days
  • Average time to close pull requests: N/A
  • Total issue authors: 1
  • Total pull request authors: 0
  • Average comments per issue: 0.0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 0
  • Pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Issue authors: 0
  • Pull request authors: 0
  • Average comments per issue: 0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • Jan-Willem (1)
Pull Request Authors
Top Labels
Issue Labels
Pull Request Labels