https://github.com/suryakantamangaraj/touchstone-python
Python library for parsing Touchstone .sNp files in RF/microwave engineering. Provides easy APIs for S‑parameter analysis, integration with NumPy/SciPy, and reproducible workflows for simulation and visualization.
https://github.com/suryakantamangaraj/touchstone-python
microwave network networkanalyzer parser rf s-parameter s2p snp touchstone
Last synced: 2 months ago
JSON representation
Python library for parsing Touchstone .sNp files in RF/microwave engineering. Provides easy APIs for S‑parameter analysis, integration with NumPy/SciPy, and reproducible workflows for simulation and visualization.
- Host: GitHub
- URL: https://github.com/suryakantamangaraj/touchstone-python
- Owner: suryakantamangaraj
- License: mit
- Created: 2026-04-18T07:39:15.000Z (2 months ago)
- Default Branch: main
- Last Pushed: 2026-04-23T06:18:17.000Z (2 months ago)
- Last Synced: 2026-04-23T21:16:28.554Z (2 months ago)
- Topics: microwave, network, networkanalyzer, parser, rf, s-parameter, s2p, snp, touchstone
- Language: Python
- Homepage: https://suryaraj.com/touchstone-python/
- Size: 137 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Security: SECURITY.md
Awesome Lists containing this project
README
# touchstone.parser
> **A Python library for Touchstone `.sNp` parsing and S‑parameter analysis in RF/microwave engineering.**
[](https://pypi.org/project/touchstone.parser/)
[](https://pypi.org/project/touchstone.parser/)
[](https://github.com/suryakantamangaraj/touchstone-python/actions/workflows/ci.yml)
[](https://codecov.io/gh/suryakantamangaraj/touchstone-python)
[](https://suryakantamangaraj.github.io/touchstone-python/)
[](LICENSE)
[](https://python.org/)
**touchstone.parser** is a clean, modular, enterprise-ready Python library for parsing [Touchstone](https://ibis.org/) (`.sNp`) files — the industry-standard format for RF and microwave S‑parameter data. It provides strongly typed classes, LINQ-friendly APIs, and seamless integration into simulation and analysis workflows.
---
## ✨ Features
- **Parse `.sNp` files** into strongly typed Python classes (`TouchstoneData`, `FrequencyPoint`, `NetworkParameter`)
- **Multi-port support** — 1‑port through N‑port networks
- **All data formats** — Real/Imaginary (RI), Magnitude/Angle (MA), Decibel/Angle (DB)
- **All frequency units** — Hz, kHz, MHz, GHz with automatic normalization
- **All parameter types** — S, Y, Z, H, G
- **LINQ-friendly APIs** — query S‑parameters with `get_s11(data)`, `get_s21(data)`, `data.get_parameter(r, c)`
- **RF calculations** — insertion loss, return loss, VSWR out of the box
- **Export utilities** — CSV export and Touchstone writer for round-trip fidelity
- **Minimal dependencies** — powered by `numpy` for fast array operations
---
## 📦 Installation
```bash
pip install touchstone.parser
```
Or via the PyPI Package Manager:
```
pip install touchstone.parser
```
---
## 🚀 Quick Start
```python
from touchstone.parser import TouchstoneParser
# Parse a Touchstone file
data = TouchstoneParser.parse("filter.s2p")
print(f"Ports: {data.n_ports}")
print(f"Frequency points: {data.n_freq}")
# Query S21 insertion loss
il = data.to_insertion_loss()
for f, val in zip(data.frequencies, il):
freq_ghz = f / 1e9
print(f"{freq_ghz:.3f} GHz → IL = {val:.2f} dB")
# Filter to a frequency range
passband = data.in_frequency_range(2.0e9, 3.0e9)
# Compute VSWR
vswr = data.to_vswr()
for f, val in zip(data.frequencies, vswr):
print(f"VSWR = {val:.3f}")
# Export to CSV
data.to_csv("output.csv")
```
---
## 📖 API Overview
### Parsing
| Method | Description |
|--------|-------------|
| `TouchstoneParser.parse(filepath)` | Parse from a file path |
| `TouchstoneParser.parse_string(content, n_ports?)` | Parse from a raw string |
### Data Access
| Method | Description |
|--------|-------------|
| `data.get_s(to_port, from_port)` | Get S‑parameters across all frequencies |
| `data.frequency` | All frequency values in Hz |
| `data.s_parameters` | 3D numpy array of all parameters |
### RF Calculations
| Method | Description |
|--------|-------------|
| `data.to_insertion_loss()` | \|S21\| insertion loss in dB |
| `data.to_return_loss()` | \|S11\| return loss in dB |
| `data.to_vswr()` | VSWR from S11 |
### Filtering & Export
| Method | Description |
|--------|-------------|
| `data.in_frequency_range(min_hz, max_hz)` | Filter to frequency range |
| `data.to_csv(writer)` | Export to CSV file or path |
| `data.to_csv_string()` | Export to CSV string |
| `write_snp(data, filepath)` | Write back to Touchstone format |
### Utilities
| Method | Description |
|--------|-------------|
| `normalize_frequency(val, unit)` | Convert to Hz |
| `db_to_mag(db)` | Convert DB to magnitude |
| `mag_to_db(mag)` | Convert magnitude to DB |
| `ma_to_complex(mag, deg)` | Create from MA |
| `db_to_complex(dB, deg)` | Create from DB |
---
## 🏗️ Project Structure
```
touchstone-python/
├── src/
│ └── touchstone/parser/ # Core library
│ ├── models/ # Domain models (enums, data classes)
│ ├── parsing/ # Parser engine
│ └── utilities/ # Converters, extensions, writer
├── tests/ # pytest test suite
├── docs/ # Sphinx documentation
├── pyproject.toml # Project metadata and dependencies
└── .github/workflows/ # GitHub Actions CI/CD
```
---
## 🔧 Supported Formats
| Feature | Supported |
|---------|-----------|
| Touchstone v1.0 / v1.1 | ✅ |
| 1‑port (`.s1p`) | ✅ |
| 2‑port (`.s2p`) | ✅ |
| Multi-port (`.s3p`, `.s4p`, ...) | ✅ |
| Real-Imaginary (RI) | ✅ |
| Magnitude-Angle (MA) | ✅ |
| Decibel-Angle (DB) | ✅ |
| Hz / kHz / MHz / GHz | ✅ |
| S / Y / Z / H / G parameters | ✅ |
| Comments and metadata | ✅ |
| Touchstone v2.0 keywords | 🔜 Planned |
---
## 🧪 Running Tests
```bash
pytest --verbosity normal
```
---
## 🤝 Contributing
Contributions are welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
---
## 💬 Community
- ⭐ **Star this repo** and related RF/microwave projects to help them grow - then mention your project in context to build visibility.
- 💡 **Share feedback** via [GitHub Discussions](https://github.com/suryakantamangaraj/touchstone-python/discussions) - we'd love to hear how you're using the library, what's working, and what could be better.
---
## 📄 License
This project is licensed under the [MIT License](LICENSE).
---
## 💖 Support & Funding
If this library helps you in your RF/microwave engineering work, consider supporting its maintenance and the development of new features:
- **[Sponsor on GitHub](https://github.com/sponsors/suryakantamangaraj)**
- ⭐ **Star the project** to help it gain visibility in the engineering community.
---
## 📚 Resources
- [Touchstone File Format Specification (IBIS)](https://ibis.org/)
- [S-parameter — Wikipedia](https://en.wikipedia.org/wiki/Scattering_parameters)
- [PyPI Package](https://www.pypi.org/packages/touchstone.parser)
- [Touchstone .NET Library](https://github.com/suryakantamangaraj/touchstone-dotnet) - check out the .NET version for C#-based workflows.
---
Made by suryamangaraj · Built for the RF/microwave engineering community 📡