{"id":20739298,"url":"https://github.com/ramy-badr-ahmed/signal-processor","last_synced_at":"2026-04-15T11:31:51.554Z","repository":{"id":249851131,"uuid":"832735618","full_name":"Ramy-Badr-Ahmed/Signal-Processor","owner":"Ramy-Badr-Ahmed","description":"Signal Processor in Python - https://doi.org/10.5281/zenodo.13286179","archived":false,"fork":false,"pushed_at":"2024-09-02T13:41:10.000Z","size":1411,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-25T23:26:34.387Z","etag":null,"topics":["bessel-filter","butterworth-filter","data-visualization","filter-design","fourier","fourier-transform","highpass-filter","lowpass-filter","model-fitting","noise-reduction","noisy-signals","python-library","python-oop","signal-processing","statistical-analysis"],"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/Ramy-Badr-Ahmed.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":"2024-07-23T16:06:32.000Z","updated_at":"2024-08-30T09:15:50.000Z","dependencies_parsed_at":"2024-11-17T06:26:28.816Z","dependency_job_id":"6d56212d-88d6-4450-8cab-b1cf75c373cc","html_url":"https://github.com/Ramy-Badr-Ahmed/Signal-Processor","commit_stats":null,"previous_names":["ramy-badr-ahmed/signalprocessor","ramy-badr-ahmed/signal-processor"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/Ramy-Badr-Ahmed/Signal-Processor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ramy-Badr-Ahmed%2FSignal-Processor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ramy-Badr-Ahmed%2FSignal-Processor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ramy-Badr-Ahmed%2FSignal-Processor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ramy-Badr-Ahmed%2FSignal-Processor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ramy-Badr-Ahmed","download_url":"https://codeload.github.com/Ramy-Badr-Ahmed/Signal-Processor/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ramy-Badr-Ahmed%2FSignal-Processor/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31839202,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T11:29:19.690Z","status":"ssl_error","status_checked_at":"2026-04-15T11:29:19.171Z","response_time":63,"last_error":"SSL_read: 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":["bessel-filter","butterworth-filter","data-visualization","filter-design","fourier","fourier-transform","highpass-filter","lowpass-filter","model-fitting","noise-reduction","noisy-signals","python-library","python-oop","signal-processing","statistical-analysis"],"created_at":"2024-11-17T06:24:24.452Z","updated_at":"2026-04-15T11:31:51.532Z","avatar_url":"https://github.com/Ramy-Badr-Ahmed.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Python](https://img.shields.io/badge/Python-3670A0?style=plastic\u0026logo=python\u0026logoColor=ffdd54) ![SciPy](https://img.shields.io/badge/SciPy-%230C55A5.svg?style=plastic\u0026logo=scipy\u0026logoColor=%white) ![NumPy](https://img.shields.io/badge/Numpy-777BB4.svg?style=plastic\u0026logo=numpy\u0026logoColor=white) ![Plotly](https://img.shields.io/badge/Plotly-239120.svg?style=plastic\u0026logo=plotly\u0026logoColor=white) ![Matplotlib](https://img.shields.io/badge/Matplotlib-%233F4F75.svg?style=plastic\u0026logo=plotly\u0026logoColor=white)  ![GitHub](https://img.shields.io/github/license/Ramy-Badr-Ahmed/SignalProcessor?style=plastic)\n\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.13286179.svg)](https://doi.org/10.5281/zenodo.13286179)\n\n# SignalProcessor\n\nThis repository provides a Python package for generating, filtering, fitting, and analyzing signals. The package includes functionalities for creating noisy signals, applying filters, fitting damped sine waves, and performing statistical analysis.\n\n### Overview\n\n- Generate noisy sine wave signals (or import custom signals)\n- Apply Butterworth low-pass filters\n- Fit damped sine waves to filtered signals\n- Perform t-tests between filtered signals and fitted models\n- Compute and visualize Fourier Transforms\n\n### Installation\n\n1) Create and source virtual environment:\n```shell\npython -m venv env\nsource env/bin/activate  # On Windows use `env\\Scripts\\activate`\n```\n2) Install the dependencies:\n```shell\npip install -r requirements.txt\n```\n\n### Running Tests\nUsing unittest\n\n```shell\npython -m unittest discover -s tests\n```\n\n### Example\nAn example demonstrating generating a signal, applying filters, fitting models, and performing analysis, exists in the `main.py`.\n\n\u003e[!Note]\n\u003e An example plot has been uploaded to the `plots` directory.\n\n### Example Usage\n\nGenerate a Noisy Signal\n\n```shell\nimport numpy as np\nfrom src.signal_processor import SignalProcessor\n\ntimeVector = np.linspace(0, 1, 1000, endpoint = False)  # Or consider importing or modifying your time vector\n\ngenerator = SignalGenerator(timeVector)\n   \ngenerator.generateNoisySignal(frequency = 20, noiseStdDev = 0.6)\n\n  # or with defaults:\n    processor.generateNoisySignal()   # frequency = 10, noiseStdDev = 0.5\n```\n\nApply a Filter (`butter`, `bessel`, `highpass`). Default is `butter`.\n\n```shell\nfrom src.signal_filter import SignalFilter\n\nfilteredInstance = generator.generateNoisySignal() \\\n                            .applyFilter(filterType = 'butter', \n                                         filterOrder = 4, \n                                         cutOffFrequency = 0.2, \n                                         bType = 'lowpass')\n    # Or with different filter parameters:\n      filteredInstance.setFilterParameters('bessel', 5, 0.5, 'highpass').applyFilter()    \n```\n\nFit a damped sine wave to the filtered signal\n\n```shell    \nfrom src.signal_fitter import SignalFitter\n\n    # default sine wave parameters: amplitudeParam = 1.0, frequencyParam = 10.0, phaseParam = 0.0, decayRateParam = 0.1\nfittedInstance = filteredInstance.fitDampedSineWave()\n\n    # Or with custom parameters:\n      fittedInstance.setDampedSineWaveParameters(3.0, 12.0, np.pi / 6, 0.3)\n      fittedInstance.setDampedSineWaveBounds([0, 0, -np.pi/2, 0], [10, 20, np.pi/2, 1])\n      fittedInstance.fitDampedSineWave()      \n```\n\nPerform a t-test between the filtered signal and the fitted damped sine wave\n\n```shell\nfrom src.statistical_analyzer import StatisticalAnalyzer\n\nanalyzedInstance = fittedInstance.analyzeFit()\ntTestResults = analyzedInstance.getTTestResults()\nprint(f\"T-test result: statistic={tTestResults[0]}, p-value={tTestResults[1]}\")\n```\n\nPlot and save the results (will be saved under `plots` directory)\n\n```shell\nfrom src.signal_visualizer import SignalVisualizer\n\nvisualizer = SignalVisualizer(timeVector, generator.getNoisySignal(), \n                              filteredInstance.getFilteredSignal(), \n                              fittedInstance.getFittedSignal()\n                              )\nvisualizer.plotResults()\nvisualizer.plotInteractiveResults()\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Framy-badr-ahmed%2Fsignal-processor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Framy-badr-ahmed%2Fsignal-processor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Framy-badr-ahmed%2Fsignal-processor/lists"}