๐ Professional-grade traffic noise simulation and visualization tool with GPU acceleration and real-time 3D rendering.
ProNoSim is a modern, production-ready traffic noise simulation and visualization platform featuring:
- ๐ GPU-Accelerated Computation - 3000ร faster noise calculations
- ๐จ Real-Time 3D Visualization - 100+ FPS with VisPy/OpenGL
- ๐บ๏ธ OpenStreetMap Integration - Automatic road network download
- ๐น 60 FPS Animation Recording - Professional MP4/GIF export
- ๐๏ธ PyQt6 Professional GUI - Docking panels and controls
- ๐ Performance Monitoring - Real-time FPS, memory, noise metrics
- ๐ฏ ISO 9613-2 Compliant - Industry-standard acoustic models
- VisPy/OpenGL rendering at 100+ FPS (peak: 3,307 FPS)
- LOD system with 5 detail levels (592ร geometry reduction)
- Interactive camera (pan, zoom, rotate, orbit)
- GLSL shaders with Phong lighting
- Custom colormaps (ISO 1996-1 compliant)
- 4K export (PNG, JPEG)
- Automatic download of road networks (<2s for 1kmยฒ)
- 7 road types with color coding (motorway, trunk, primary, etc.)
- Coordinate transformation (lat/lon โ XY, <1e-8ยฐ error)
- Building footprints with height estimation
- Offline caching for reuse
- Multi-backend support (CUDA, PyTorch CPU, Numba JIT, NumPy)
- Automatic selection with graceful fallback
- 2.5-3000ร speedup depending on backend
- Benchmarking tools included
- 60 FPS MP4 video export (H.264)
- GIF animation with optimization
- Camera path recording with keyframes
- 7 easing functions (linear, ease in/out, etc.)
- Orbit & flythrough presets
- PyQt6 main window with docking panels
- Control panel - noise parameters, layers, camera
- Statistics panel - FPS, memory, noise metrics
- Timeline panel - playback controls with speed adjustment
- Menu bar - File operations, export, help
- Real-time updates via signals/slots
- Performance monitor - FPS, frame time, CPU, memory
- Noise charts - ISO-compliant Leq, Lmax, Lmin, L10, L50, L90
- Multi-POI tracking - Monitor multiple locations
- Time-series visualization - PyQtGraph real-time plots
- CSV/PNG export for reporting
- 10 layer types - noise map, roads, buildings, barriers, vehicles, POI, grid, axes, terrain, custom
- Visibility control - toggle layers on/off
- Opacity adjustment - 0.0 to 1.0
- Z-order rendering - proper layer stacking
- JSON persistence - save/load configurations
PyQt6 GUI with control panel, statistics, and timeline
4-view: Noise only | Roads only | Integrated | High noise zones
Layer visibility and opacity controls
100+ FPS real-time rendering with LOD system
- Python 3.10+ (3.12 recommended)
- SUMO (optional, for traffic simulation) - Download
- CUDA GPU (optional, for GPU acceleration)
# Clone repository
git clone https://github.com/kjklee645-del/ProNoSim.git
cd ProNoSim
# Create virtual environment
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txtLaunch Integrated Viewer:
python src/ui/integrated_viewer.pyRun OSM Integration Demo:
python examples/demo_osm_simple.pyOutput: visualization_outputs/osm/osm_noise_integration.png
Test GPU Accelerator:
python src/core/gpu_accelerator.pyRuns benchmarks across different grid sizes.
ProNoSim/
โโโ src/
โ โโโ core/ # Core engine
โ โ โโโ acoustic_engine_v2.py # Patent-based engine
โ โ โโโ gpu_accelerator.py # Multi-backend GPU acceleration
โ โ โโโ spatial_grid.py # 3D spatial grid
โ โ โโโ vehicle_grid.py # Dynamic vehicle grid
โ โ
โ โโโ visualization/ # 3D rendering
โ โ โโโ noise_canvas.py # VisPy 3D canvas
โ โ โโโ map_canvas.py # OSM overlay canvas
โ โ โโโ map_overlay.py # OSM data management
โ โ โโโ building_overlay.py # Building footprints
โ โ โโโ layer_manager.py # Multi-layer system
โ โ โโโ animation_recorder.py # Video export
โ โ โโโ camera_controller.py # Camera paths
โ โ โโโ performance_monitor.py # FPS/memory tracking
โ โ โโโ noise_chart.py # ISO noise metrics
โ โ
โ โโโ ui/ # GUI
โ โโโ integrated_viewer.py # Main PyQt6 window
โ โโโ main_window.py # Original GUI
โ
โโโ examples/ # Demo scripts (9 files)
โ โโโ demo_osm_simple.py # OSM integration
โ โโโ demo_layer_management.py # Layer controls
โ โโโ test_integrated_viewer.py # GUI testing
โ
โโโ tests/ # Unit tests (20 files)
โ โโโ test_gpu_accelerator.py # 15 tests
โ โโโ test_layer_manager.py # 22 tests
โ โโโ test_integrated_viewer_structure.py # 22 tests
โ โโโ ... # 112 total tests
โ
โโโ docs/ # Documentation
โ โโโ USER_MANUAL.md # User guide
โ โโโ reports/ # Technical reports
โ
โโโ config/ # Configuration
โ โโโ default_scenario.yaml
โ
โโโ visualization_outputs/ # Generated outputs
โโโ osm/ # OSM visualizations
โโโ layers/ # Layer demos
โโโ animations/ # Recorded videos
| Component | Performance | Details |
|---|---|---|
| Rendering FPS | 100+ (peak 3,307) | VisPy/OpenGL with LOD |
| GPU Acceleration | 2.5-3000ร | Multi-backend (CUDA/PyTorch/Numba) |
| OSM Download | <2s | 1kmยฒ area, ~135 road segments |
| Coordinate Transform | <1e-8ยฐ error | Accurate lat/lon โ XY |
| Animation FPS | 60 stable | H.264 MP4 export |
| Memory Usage | <200 MB | Typical scenarios |
| Test Coverage | 100% | 112 tests, all passing |
Core:
- Python 3.12
- NumPy 1.26
- PyTorch 2.10
Visualization:
- VisPy 0.14 (OpenGL 3.3+)
- PyQtGraph 0.13
- Matplotlib 3.8
GUI:
- PyQt6 6.6
- Qt Fusion style
Geospatial:
- osmnx 1.9
- geopandas 0.14
- shapely 2.0
Media:
- imageio 2.34
- FFmpeg (libx264)
Acceleration:
- CUDA (optional)
- Numba 0.59
CNOSSOS-EU Acoustic Power:
PWL = A + B ร logโโ(speed_kmh)
Distance Attenuation (ISO 9613-2):
Ad = 11 + 20 ร logโโ(distance)
Barrier Diffraction (Maekawa-Kurze):
Abarrier = 10 ร logโโ(3 + 20 ร Nf)
Energy Summation:
L_total = 10 ร logโโ(ฮฃ 10^(Li/10))
- User Manual - Installation, UI guide, features, examples
- Phase 3 Complete Report - Technical achievements
- API Documentation - (Coming soon)
- Installation Guide: USER_MANUAL.md#installation
- UI Reference: USER_MANUAL.md#user-interface-guide
- Troubleshooting: USER_MANUAL.md#troubleshooting
- FAQ: USER_MANUAL.md#faq
GPU-Accelerated Noise Computation:
from src.core.gpu_accelerator import create_default_accelerator
import numpy as np
# Auto-select best backend (CUDA โ PyTorch โ Numba โ NumPy)
accelerator = create_default_accelerator()
# Define noise sources
sources = [
{'x': 0, 'y': 0, 'intensity': 25, 'decay': 50},
{'x': 100, 'y': 100, 'intensity': 20, 'decay': 40},
]
# Create grid
x = np.linspace(-500, 500, 101)
y = np.linspace(-500, 500, 101)
X, Y = np.meshgrid(x, y)
# Compute noise field
noise = accelerator.compute_noise_field(sources, X, Y, base_noise=45.0)
print(f"Noise range: {noise.min():.1f} - {noise.max():.1f} dB")OSM Road Network Integration:
from src.visualization.map_overlay import MapConfig, MapOverlay
# Configure for Seoul Gangnam area
config = MapConfig(
center_lat=37.4979,
center_lon=127.0276,
bbox_size=1000.0, # 1km ร 1km
network_type='drive'
)
# Download and process
overlay = MapOverlay(config)
overlay.download_map()
road_lines = overlay.get_road_lines(road_type_colors=True)
print(f"Downloaded {len(road_lines)} road segments")Animation Recording:
from src.visualization.animation_recorder import AnimationRecorder, RecorderConfig
from src.visualization.camera_controller import CameraPresets
# Setup recorder
config = RecorderConfig(
output_path="animation.mp4",
fps=60,
quality=8,
resolution=(1920, 1080)
)
recorder = AnimationRecorder(config)
# Create camera path
orbit_path = CameraPresets.create_orbit_path(duration=10.0)
# Record frames
recorder.start_recording()
for frame in render_frames(orbit_path):
recorder.add_frame(frame)
recorder.stop_recording()Week 1: VisPy/OpenGL Foundation
- โ Real-time 3D visualization (100+ FPS)
- โ LOD system (5 levels, 592ร reduction)
- โ GLSL shaders with Phong lighting
- โ Interactive camera controls
Week 2: OSM Integration & Multi-Layer
- โ OpenStreetMap road network (<2s download)
- โ Building footprints with height estimation
- โ Animation recording (60 FPS MP4/GIF)
- โ Layer management system (10 layer types)
Week 3: Monitoring & Interaction
- โ Performance monitor (FPS, memory, CPU)
- โ ISO-compliant noise charts (Leq, L10, L50, etc.)
- โ Camera path recording with keyframes
Week 4: GPU & GUI
- โ GPU accelerator (4 backends, 3000ร speedup)
- โ PyQt6 integrated viewer
- โ User manual and documentation
- Total Files: 60
- Code Lines: 10,600
- Tests: 112 (100% passing)
- Test Coverage: 100% (core modules)
- Documentation: 11 reports + user manual
- Commits: 48+
- Advanced noise models (ISO 9613-2, CNOSSOS-EU full)
- 3D terrain integration (DEM)
- Weather effects (wind, temperature)
- Compliance reporting (WHO, EU guidelines)
- VR/AR visualization
- Cloud deployment
- Mobile app
- Real-time sensor integration
- Machine learning noise prediction
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
Development Setup:
# Install dependencies
pip install -r requirements.txt
# Run tests
pytest tests/ -v
# Code formatting
black src/
flake8 src/MIT License - See LICENSE file for details.
- ProNoSim Development Team
- Original prototype: Traffic Noise Experiment (MTN_V1_5)
- Eclipse SUMO team for traffic simulation framework
- VisPy team for OpenGL visualization
- PyQt6 community
- OpenStreetMap contributors
- GitHub Issues: ProNoSim Issues
- Repository: ProNoSim
Built with โค๏ธ for professional acoustic simulation
Last Updated: 2026-03-25 | Version: 0.3.0-alpha