- Added CSIExtractor class for extracting CSI data from WiFi routers. - Implemented RouterInterface class for SSH communication with routers. - Developed DensePoseHead class for body part segmentation and UV coordinate regression. - Created unit tests for CSIExtractor and RouterInterface to ensure functionality and error handling. - Integrated paramiko for SSH connections and command execution. - Established configuration validation for both extractor and router interface. - Added context manager support for resource management in both classes.
47 lines
1.6 KiB
Python
47 lines
1.6 KiB
Python
"""CSI (Channel State Information) processor for WiFi-DensePose system."""
|
|
|
|
import numpy as np
|
|
import torch
|
|
from typing import Dict, Any, Optional
|
|
|
|
|
|
class CSIProcessor:
|
|
"""Processes raw CSI data for neural network input."""
|
|
|
|
def __init__(self, config: Optional[Dict[str, Any]] = None):
|
|
"""Initialize CSI processor with configuration.
|
|
|
|
Args:
|
|
config: Configuration dictionary with processing parameters
|
|
"""
|
|
self.config = config or {}
|
|
self.sample_rate = self.config.get('sample_rate', 1000)
|
|
self.num_subcarriers = self.config.get('num_subcarriers', 56)
|
|
self.num_antennas = self.config.get('num_antennas', 3)
|
|
|
|
def process_raw_csi(self, raw_data: np.ndarray) -> np.ndarray:
|
|
"""Process raw CSI data into normalized format.
|
|
|
|
Args:
|
|
raw_data: Raw CSI data array
|
|
|
|
Returns:
|
|
Processed CSI data ready for neural network input
|
|
"""
|
|
if raw_data.size == 0:
|
|
raise ValueError("Raw CSI data cannot be empty")
|
|
|
|
# Basic processing: normalize and reshape
|
|
processed = raw_data.astype(np.float32)
|
|
|
|
# Handle NaN values by replacing with mean of non-NaN values
|
|
if np.isnan(processed).any():
|
|
nan_mask = np.isnan(processed)
|
|
non_nan_mean = np.nanmean(processed)
|
|
processed[nan_mask] = non_nan_mean
|
|
|
|
# Simple normalization
|
|
if processed.std() > 0:
|
|
processed = (processed - processed.mean()) / processed.std()
|
|
|
|
return processed |