Research-style signal analysis project using Vela pulsar photon event data
Author: Victoria Kupina
Role: Research / Data Analyst — Signal Processing & Systems Analysis
This project demonstrates how photon arrival-time data from the Vela pulsar can be analyzed to detect periodic structure, build a folded pulse profile and illustrate the basic timing logic behind X-ray pulsar navigation (XNAV).
The goal is not to claim a production-grade navigation system. The goal is to show a reproducible analytical workflow for working with noisy observational data where the measured signal is an indirect projection of a physical process.
This project is positioned at the intersection of:
- time-series analysis;
- signal processing;
- astrophysical data analysis;
- systems thinking;
- reproducible research workflows.
Pulsars are rapidly rotating neutron stars that emit highly periodic signals. Because of their stable timing behavior, pulsars are often discussed in the context of high-precision timing and X-ray pulsar navigation concepts.
In real observational data, the signal is not presented as a clean periodic curve. It must be reconstructed from photon arrival events under noise, sampling limitations and preprocessing assumptions.
This project asks:
Can a dominant periodic structure be extracted from photon event data and transformed into an interpretable folded pulse profile?
- How can photon event data be transformed into a clean analytical format?
- Can periodic structure be detected from arrival-time observations?
- How does epoch folding help reconstruct a pulse profile?
- How can phase shifts be interpreted as timing errors in a simplified XNAV-style demonstration?
- What are the limitations of this simplified workflow compared with a real navigation-grade system?
The project follows a structured research pipeline:
-
Data loading
- read FITS photon event data;
- inspect available columns and event structure.
-
Exploratory analysis
- analyze photon arrival times;
- inspect energy distribution;
- examine inter-arrival behavior.
-
Preprocessing
- convert event data into a clean tabular format;
- create relative time values;
- apply energy-based filtering.
-
Period detection
- search for the dominant pulsation period using an epoch-folding approach;
- evaluate the strongest candidate period.
-
Epoch folding
- fold photon events by phase;
- construct a phase-aligned pulse profile.
-
Simplified XNAV demonstration
- simulate phase shifts;
- convert phase shift into timing error;
- illustrate the relationship between timing error and approximate range error.
pulsar/
├── data/
│ └── README.md
├── notebooks/
│ ├── 01_data_loading.ipynb
│ ├── 02_exploratory_analysis.ipynb
│ ├── 03_preprocessing.ipynb
│ ├── 04_period_detection.ipynb
│ ├── 05_epoch_folding.ipynb
│ ├── 06_xnav_demo.ipynb
│ └── images/
├── requirements.txt
├── LICENSE
└── README.md
| Notebook | Purpose |
|---|---|
01_data_loading.ipynb |
Load FITS photon event data and inspect the dataset |
02_exploratory_analysis.ipynb |
Explore photon arrival times, energy distribution and inter-arrival times |
03_preprocessing.ipynb |
Convert FITS data into a clean tabular format and apply filtering |
04_period_detection.ipynb |
Detect the dominant pulsation period using epoch folding |
05_epoch_folding.ipynb |
Build a folded pulse profile using the detected period |
06_xnav_demo.ipynb |
Demonstrate phase shift, timing error and simplified XNAV logic |
- FITS data loading and inspection;
- photon arrival-time analysis;
- exploratory data analysis;
- signal preprocessing;
- epoch-folding period detection;
- pulse profile reconstruction;
- phase-shift simulation;
- simplified timing-to-range interpretation.
The workflow detects a dominant pulsation period close to the expected Vela pulsar timing scale:
Dominant period ≈ 0.0893 s
The project also produces visual outputs for:
- period detection;
- folded pulse profile;
- simulated XNAV phase shift;
- approximate phase-shift-to-range-error relationship.
The project produces several visual artifacts that summarize the main analytical steps: period detection, pulse-profile reconstruction and simplified XNAV timing interpretation.
The epoch-folding search identifies the strongest candidate pulsation period in the photon arrival-time data.
Photon events are folded by phase using the detected period to reconstruct the pulsar pulse profile.
A simplified XNAV-style example showing how a phase shift can be interpreted as a timing offset.
A conceptual visualization of how timing error can be translated into approximate range error.
This project demonstrates skills that are useful for research, BI/data and systems-oriented roles in technical companies.
- ability to work with unfamiliar technical domains;
- understanding of scientific / engineering context;
- structured decomposition of a physical-data problem;
- clear documentation of assumptions and limitations.
- reproducible analytical pipeline;
- clean transformation from raw data to interpretable outputs;
- data quality awareness;
- structured notebook-based reporting.
- translation of raw observations into system-level interpretation;
- phase-shift and timing-error reasoning;
- explicit limitations and boundary conditions;
- decomposition of a complex technical idea into steps, artifacts and outputs.
This is a simplified research and demonstration project. It does not include:
- barycentric corrections;
- relativistic corrections;
- full spacecraft orbit determination;
- uncertainty estimation;
- multi-pulsar navigation;
- sensor fusion;
- production-grade validation.
The XNAV section should be interpreted as a conceptual timing demonstration, not as a real navigation system.
The value of the project is in the analytical structure: how raw observational data is transformed into a reproducible sequence of technical artifacts.
- Python
- NumPy
- pandas
- Matplotlib
- SciPy
- Astropy
- psrqpy
- Jupyter Notebook
Raw FITS data is not included in this repository because large data files are ignored by Git.
To run the notebooks, place the photon event file at:
data/raw/vela_photons.fits
Additional details are provided in:
data/README.md
Clone the repository:
git clone https://github.com/kva99kva-eng/pulsar.gitGo to the project folder:
cd pulsarCreate and activate a virtual environment:
python -m venv .venv
.venv\Scripts\activateInstall dependencies:
pip install -r requirements.txtPlace the FITS file here:
data/raw/vela_photons.fits
Run Jupyter Lab:
jupyter labThen run the notebooks in order from 01 to 06.
To make the project closer to a production-grade research workflow, the next improvements would be:
- add uncertainty estimation for the detected period;
- compare epoch-folding results with another period-search method;
- move reusable logic from notebooks into
src/; - add tests for preprocessing and phase calculations;
- add a project-level configuration file;
- document assumptions and parameters in a separate technical note;
- add a short architecture diagram for the analysis pipeline.
This project is licensed under the MIT License.



