{"id":17190837,"url":"https://github.com/isazi/aoflagger","last_synced_at":"2026-04-30T00:34:26.111Z","repository":{"id":66809773,"uuid":"121751285","full_name":"isazi/AOFlagger","owner":"isazi","description":"AOFlagger Radio Frequency Interference mitigation algorithm.","archived":false,"fork":false,"pushed_at":"2021-01-15T10:28:40.000Z","size":59,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-30T05:27:39.111Z","etag":null,"topics":["cuda","gpu","many-core","rfi"],"latest_commit_sha":null,"homepage":"","language":"Python","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/isazi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-02-16T13:00:34.000Z","updated_at":"2024-08-25T00:34:33.000Z","dependencies_parsed_at":"2023-07-31T19:15:58.523Z","dependency_job_id":null,"html_url":"https://github.com/isazi/AOFlagger","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isazi%2FAOFlagger","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isazi%2FAOFlagger/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isazi%2FAOFlagger/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isazi%2FAOFlagger/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/isazi","download_url":"https://codeload.github.com/isazi/AOFlagger/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245407773,"owners_count":20610234,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["cuda","gpu","many-core","rfi"],"created_at":"2024-10-15T01:24:07.211Z","updated_at":"2026-04-30T00:34:24.891Z","avatar_url":"https://github.com/isazi.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AOFlagger\n\nAOFlagger is a Radio Frequency Interference (RFI) mitigation algorithm proposed by A. Offringa in the paper \"[A morphological algorithm for improving radio-frequency interference detection](https://www.aanda.org/index.php?option=com_article\u0026amp;access=doi\u0026amp;doi=10.1051/0004-6361/201118497\u0026amp;Itemid=129)\".\n\nIn this repository I am toying around with some a real-time many-core implementation of said algorithm, using as a starting point the code developed by [Rob van Nieuwpoort and Linus Schoemaker](https://arxiv.org/pdf/1701.08197v1.pdf).\n\n## Sequential Code Analysis\n\n### Data\n\nThe input is a time series.\nData could be one or two dimensional, in the scenario that we are currently investigating.\nThe output is a flagging mask that, when applied to the data, cancels the RFI out.\nOr the mask could be only kept internally and applied to the input data, permanently modifying it.\n\n### Statistics\n\nThe most important building block of the flagger are the statistics.\nThe statistics used in the code are:\n- **Mean**\n- **Median**\n- **Standard Deviation**\n- **Median Absolute Deviation**\n\nPlus the *winsorized* version of mean and median.\nWinsorized version of mean and median are still mean and median, but computed only on the middle part of the data.\nIn the original source code, the middle 80% of data is used, i.e. top and bottom 10% of values are excluded from the computation.\n\nOf all the statistics, the most expensive to compute is the median; this is, assuming the input data are not already ordered.\nComputing mean and standard deviation can be done in O(n) on the input data, without sorting; it is also possible to easily parallelize the computation of mean and standard deviation.\n\n#### Mean and Standard Deviation\n\nFor mean and standard deviation we currently have a 1D implementation in CUDA. It does not assume that the data has been previously sorted.\nThe kernel could be easily extended to 2D if the dimensions are independent, e.g. in case we need to compute mean and standard deviation of different frequency channels.\n\n#### Median\n\n- Sorting and indexing\n- [Introselect](https://en.wikipedia.org/wiki/Introselect)\n- [Quickselect](https://en.wikipedia.org/wiki/Quickselect)\n- Approximate median\n    - [Median of Medians](https://en.wikipedia.org/wiki/Median_of_medians)\n\n#### Median Absolute Deviation (MAD)\n\n- [Wikipedia article](https://en.wikipedia.org/wiki/Median_absolute_deviation)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fisazi%2Faoflagger","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fisazi%2Faoflagger","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fisazi%2Faoflagger/lists"}