{"id":28780496,"url":"https://github.com/nlesc/polyphase-filter-bank-generator","last_synced_at":"2026-03-07T01:32:58.075Z","repository":{"id":69968424,"uuid":"104264238","full_name":"NLeSC/polyphase-filter-bank-generator","owner":"NLeSC","description":"This code generates the filter weights for polyphase filter banks with arbitrary numbers of channels, and with configurable windows.","archived":false,"fork":false,"pushed_at":"2024-07-10T10:25:07.000Z","size":103,"stargazers_count":26,"open_issues_count":0,"forks_count":6,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-10-04T19:43:33.166Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NLeSC.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2017-09-20T20:26:16.000Z","updated_at":"2025-08-14T15:01:15.000Z","dependencies_parsed_at":"2024-02-16T11:34:30.246Z","dependency_job_id":"12a4c6f4-967f-4308-b2fe-1f7fbf5d23ce","html_url":"https://github.com/NLeSC/polyphase-filter-bank-generator","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/NLeSC/polyphase-filter-bank-generator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NLeSC%2Fpolyphase-filter-bank-generator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NLeSC%2Fpolyphase-filter-bank-generator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NLeSC%2Fpolyphase-filter-bank-generator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NLeSC%2Fpolyphase-filter-bank-generator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NLeSC","download_url":"https://codeload.github.com/NLeSC/polyphase-filter-bank-generator/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NLeSC%2Fpolyphase-filter-bank-generator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30205119,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-06T19:07:06.838Z","status":"ssl_error","status_checked_at":"2026-03-06T18:57:34.882Z","response_time":250,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-06-17T18:07:08.018Z","updated_at":"2026-03-07T01:32:58.028Z","avatar_url":"https://github.com/NLeSC.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"POLYPHASE FILTER BANK GENERATOR\n===============================\n\nImplemented by Rob V. van Nieuwpoort, http://www.vannieuwpoort.com/,\nat the Netherlands eScience center (https://www.esciencecenter.nl/).\n\nThis program is a stand-alone version of the polyphase filter bank\ngenerator I designed and implemented for the LOFAR telescope (http://www.lofar.org/). This\ncode generates the filter weights for polyphase filter banks with\narbitrary numbers of channels, and with configurable windows.  Window\ntypes currently supported are: HAMMING, BLACKMAN, GAUSSIAN, and\nKAISER.  The original code is a part of the LOFAR real-time central\nprocessor (the correlator). The code is completely generic, and can\nbe used for other telescopes, or even completely different signal\nprocessing applications as well.\n\nThe paper below describes the LOFAR real-time central processing\npipeline. This production pipeline uses the filter bank generator to\ngenerate the correct polyphase filter banks at run time, depending on\nthe telescope paramters.\n\nJohn W. Romein, P. Chris Broekema, Jan David Mol, Rob V. van Nieuwpoort:\nThe LOFAR Correlator: Implementation and Performance Analysis,\nACM Symposium on Principles and Practice of Parallel Programming (PPoPP’10), Bangalore, India, pp. 169-178, January, 2010.\nhttps://vannieuwpoort.com/wp-content/uploads/lofar.pdf\n\nThe paper describes the usage of the filter bank as follows.\n\nThe LOFAR subband data are processed by a Poly-Phase Filter bank\n(PPF) that splits a frequency subband into a number of narrower\nfrequency channels. In this step, we trade time resolution for frequency\nresolution: we split a subband into N separate channels, but\nwith an N-times lower sampling rate per channel. With the higher\nfrequency resolution, we can remove RFI artifacts with a higher accuracy\nlater in the pipeline. For LOFAR, typically a 195 KHz subband is split\ninto 256 channels of 763 Hz, but the filter supports any reasonable\npower-of-two number of channels for different observation modes.\nThe PPF consists of two parts. First, the data are filtered using\nFinite Impulse Response (FIR) filters. A FIR filter simply multiplies\na sample with a real weight factor, and also adds a number\nof weighted samples from the past. Since we have to support different\nnumbers of channels, our software automatically designs a\nfilter bank with the desired properties and number of channels at\nrun time, generating the FIR filter weights on the fly. This again\ndemonstrates the flexibility of a software solution. For performance\nreasons, the implementation of the filter is done in assembly. Next,\nthe filtered data are Fourier Transformed.\n\nPlease cite this paper if this code is useful to you.\n\n\ndependencies:\n-------------\n\nThis code needs FFTW3 to run. (On Debian / Ubuntu based systems, you can use \"sudo apt install libfftw3-dev\" to install it.\nGnuplot is used to show the output, but this is optional.\n\nCompiling the code:\n-------------------\n\njust type \"make\". The code should be compiled, and you should now have an executable called \"polyphase-filter-bank-generator\".\nYou can run the code as follows: ./polyphase-filter-bank-generator [nrChannels] [nrTaps] [windowType]\", \nwhere windowType is one of HAMMING, BLACKMAN, GAUSSIAN, KAISER.\n\nVisualizing the output:\n-----------------------\n\nYou can show the filter constants of the filter bank by running \"make plot\". \nThis will generate a small filter bank with 32 channels, and 16 filter taps per channel, using all different window options. \nThe 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.\n\n.. image:: example.jpg?raw=true\n\n\n\nRELATED WORK: polyphase filter bank implementations on CPUs and GPUs.\n---------------------------------------------------------------------\n\nYou can use the filter bank constants generated with this generator program to create a filter bank.\nI also worked on polyphase filter bank implementations for GPUs and multi-core processors.\nThe code runs on Intel CPUs (written in C), NVIDIA (with Cuda) and AMD GPUs (with OpenCL), and on the simulated MicroGrid architecture. \nThe source code for the filter banks is available here:\nhttps://vannieuwpoort.com/wp-content/uploads/2023/05/ppf.zip\n\nFor more information, see this paper:\n\nKarel van der Veldt, Rob van Nieuwpoort, Ana Lucia Varbanescu and Chris Jesshope:\nA Polyphase Filter For GPUs And Multi-Core Processors\nFirst Workshop on High Performance Computing in Astronomy (AstroHPC 2012)\nIn conjunction with the 21-st International ACM Symposium on High-Performance Parallel and Distributed Computing (HPDC 2012) June 19, 2012, Delft, the Netherlands.\nhttps://vannieuwpoort.com/wp-content/uploads/astro05-vanderveldt.pdf.\n\nFor more details on the implementation, you can also have a\nlook at Karel’s master thesis:\nA Polyphase Filter For GPUs And Multi-Core Processors.\nhttps://vannieuwpoort.com/wp-content/uploads/Karel-van-der-Veldt.pdf\n\n\n\n\nFor more information on Polyphase filter banks in general, please see the paper by Harris et al.:\n\nF.J. Harris ; C. Dick ; M. Rice\nDigital receivers and transmitters using polyphase filter banks for wireless communications\nIEEE Transactions on Microwave Theory and Techniques ( Volume: 51, Issue: 4, Apr 2003 )\nPage(s): 1395 - 1412\nApril 2003 \nDOI: 10.1109/TMTT.2003.809176\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnlesc%2Fpolyphase-filter-bank-generator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnlesc%2Fpolyphase-filter-bank-generator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnlesc%2Fpolyphase-filter-bank-generator/lists"}