kizzasi_io/
lib.rs

1//! # kizzasi-io
2//!
3//! Physical world connectors for Kizzasi - MQTT, Audio, Video, and comprehensive sensor streams
4//! with state-of-the-art signal processing capabilities.
5//!
6//! ## Core Features
7//!
8//! ### Stream Sources
9//! - **MQTT**: IoT/industrial sensor integration with TLS, QoS, and reconnection
10//! - **Audio**: Multi-channel audio I/O via cpal (ASIO, JACK support)
11//! - **Video**: Frame capture with FFmpeg and camera input (v4l2/DirectShow/AVFoundation)
12//! - **Network**: WebSocket, TCP/UDP sockets, serial ports
13//! - **Protocols**: OSC, ZeroMQ, ROS2 (when available)
14//! - **Files**: WAV, CSV, HDF5 reading/writing
15//!
16//! ### Signal Processing
17//!
18//! #### Basic Filters
19//! - **FIR**: Sinc lowpass/highpass, moving average, differentiator
20//! - **IIR**: Butterworth lowpass/highpass, notch filters
21//!
22//! #### Advanced Adaptive Filtering
23//! - **Kalman Filter**: Optimal linear state estimation with prediction/update cycles
24//! - **Particle Filter**: Non-Gaussian/nonlinear Bayesian estimation
25//! - **LMS/NLMS**: Least Mean Squares adaptive filtering
26//! - **RLS**: Recursive Least Squares for rapid adaptation
27//!
28//! #### Cepstral Analysis
29//! - **Real Cepstrum**: Pitch detection and formant analysis
30//! - **Complex Cepstrum**: Homomorphic deconvolution
31//! - **Formant Tracking**: Speech resonance detection
32//! - **Liftering**: Quefrency domain filtering
33//! - **Cepstral Distance**: Speech quality assessment
34//!
35//! #### Time-Frequency Analysis
36//! - **Gabor Transform**: Optimal time-frequency resolution with Gaussian windows
37//! - **S-Transform**: Frequency-dependent resolution (Stockwell transform)
38//! - **Wigner-Ville**: High-resolution quadratic distribution
39//! - **Choi-Williams**: Cross-term suppression for multi-component signals
40//! - **Reassigned Spectrogram**: Enhanced resolution through energy reassignment
41//!
42//! #### Spectral Analysis
43//! - **STFT**: Short-Time Fourier Transform with multiple window functions
44//! - **Spectrograms**: Time-frequency magnitude/phase representations
45//! - **MFCC**: Mel-frequency cepstral coefficients extraction
46//! - **Power Spectrum**: Optimized FFT for power-of-2 sizes
47//!
48//! #### Wavelets
49//! - **DWT/IDWT**: Discrete Wavelet Transform (Haar, Daubechies, Symlet, Coiflet)
50//! - **SWT**: Stationary Wavelet Transform
51//! - **Denoising**: Wavelet-based noise reduction
52//!
53//! #### Resampling
54//! - **Polyphase**: Efficient integer-ratio resampling
55//! - **Linear/Cubic**: Interpolation-based resampling
56//! - **Streaming**: Real-time sinc-based resampling
57//!
58//! ### Performance Optimization
59//! - **Zero-copy buffers**: SharedSignalBuffer, ZeroCopyBuffer, BufferPool
60//! - **Lock-free queues**: Thread-safe concurrent data structures
61//! - **Ring buffers**: Real-time circular buffering with statistics
62//! - **SIMD**: Vectorized signal operations (when enabled)
63//! - **Async streams**: Tokio-based asynchronous stream processing
64//!
65//! ### Stream Processing
66//! - **Pipelines**: Composable signal transformations
67//! - **Synchronization**: Multi-stream time alignment with PLL
68//! - **Multiplexing**: Round-robin, time-ordered, weighted merging
69//! - **Adaptive buffering**: Dynamic buffer sizing
70//! - **Rate control**: Adaptive rate limiting
71//!
72//! ### Diagnostics & Monitoring
73//! - **Health monitoring**: Stream status, latency, throughput
74//! - **Signal quality**: SNR, clipping detection, crest factor
75//! - **Latency tracking**: Percentile-based latency statistics
76//! - **Buffer tracking**: Underrun/overrun detection
77//!
78//! ### Data Processing
79//! - **Compression**: RLE, Delta, DPCM, Quantization with adaptive selection
80//! - **Calibration**: Multi-point, non-linear, temperature compensation
81//! - **Batch processing**: Windowed, parallel batch operations
82//! - **Recording/Playback**: Binary, JSON, CSV stream capture
83//!
84//! ### Video Processing
85//! - **Optical Flow**: Lucas-Kanade, Dense Gradient, Block Matching
86//! - **Filters**: Gaussian/Box blur, Sobel/Laplacian edges, morphology
87//! - **Frame operations**: Format conversion, normalization, buffering
88//!
89//! ## Examples
90//!
91//! ### Basic Signal Generation and Filtering
92//! ```rust,no_run
93//! use kizzasi_io::{SineGenerator, SignalGenerator, FirFilter};
94//! use scirs2_core::ndarray::Array1;
95//!
96//! // Generate a sine wave
97//! let mut generator = SineGenerator::new(440.0, 1.0, 44100.0);
98//! let signal = generator.generate(1024);
99//!
100//! // Apply lowpass filter
101//! let mut filter = FirFilter::sinc_lowpass(0.25, 31).unwrap();
102//! let filtered = filter.process(&signal);
103//! ```
104//!
105//! ### Adaptive Filtering with Kalman Filter
106//! ```rust,no_run
107//! use kizzasi_io::KalmanFilter;
108//! use scirs2_core::ndarray::{arr1, Array2};
109//!
110//! // 1D position tracking
111//! let initial_state = arr1(&[0.0]);
112//! let initial_cov = Array2::eye(1);
113//! let transition = Array2::eye(1);
114//! let observation = Array2::eye(1);
115//! let process_noise = Array2::eye(1) * 0.01;
116//! let measurement_noise = Array2::eye(1) * 0.1;
117//!
118//! let mut kf = KalmanFilter::new(
119//!     initial_state, initial_cov, transition,
120//!     observation, process_noise, measurement_noise
121//! ).unwrap();
122//!
123//! // Update with measurement
124//! kf.predict();
125//! kf.update(&arr1(&[1.5])).unwrap();
126//! println!("State estimate: {:?}", kf.state());
127//! ```
128//!
129//! ### Time-Frequency Analysis
130//! ```rust,no_run
131//! use kizzasi_io::{GaborTransform, SineGenerator, SignalGenerator};
132//!
133//! let mut gen = SineGenerator::new(440.0, 1.0, 16000.0);
134//! let signal = gen.generate(1024);
135//!
136//! let mut gabor = GaborTransform::new(16000.0);
137//! let result = gabor.compute(&signal, 256, 128, 32.0).unwrap();
138//!
139//! println!("Time-frequency representation: {} × {} bins",
140//!          result.num_frames, result.num_bins);
141//! ```
142//!
143//! ## COOLJAPAN Ecosystem
144//!
145//! This crate uses `scirs2-core` for all array operations following KIZZASI_POLICY.md.
146
147mod adaptive;
148mod batch;
149mod calibration;
150mod compression;
151mod error;
152mod generator;
153mod health;
154mod lockfree;
155mod multiplex;
156mod pipeline;
157mod recorder;
158mod signal;
159mod stream;
160mod sync;
161mod zerocopy;
162
163#[cfg(feature = "mqtt")]
164mod mqtt;
165
166#[cfg(feature = "audio")]
167mod audio;
168
169#[cfg(feature = "websocket")]
170mod websocket;
171
172#[cfg(feature = "serial")]
173mod serial;
174
175#[cfg(feature = "file")]
176mod file;
177
178#[cfg(feature = "network")]
179mod socket;
180
181#[cfg(feature = "osc")]
182mod osc;
183
184#[cfg(feature = "zeromq")]
185mod zeromq;
186
187#[cfg(all(feature = "ros2", not(target_os = "macos")))]
188mod ros2;
189
190#[cfg(feature = "video")]
191mod video;
192
193pub use adaptive::{
194    AdaptiveBuffer, AdaptiveBufferStats, AdaptiveConfig, AdaptiveRateController, AdaptiveStrategy,
195    RateLimiter,
196};
197pub use batch::{
198    BatchAccumulator, BatchConfig, BatchProcessor, BatchStats, ParallelBatchProcessor,
199    WindowedBatchProcessor,
200};
201pub use calibration::{
202    AutoCalibrator, CalibrationCurve, CalibrationManager, CalibrationParams, MultiPointCalibrator,
203};
204pub use compression::{
205    AdaptiveCompressor, CompressedSignal, CompressionMetadata, CompressionMethod, SignalCompressor,
206};
207pub use error::{IoError, IoResult};
208pub use generator::{
209    ChirpGenerator, ImpulseGenerator, MultiToneGenerator, PinkNoiseGenerator, SawtoothGenerator,
210    SignalGenerator, SineGenerator, SquareGenerator, StepGenerator, TriangleGenerator,
211    WhiteNoiseGenerator,
212};
213pub use health::{
214    AggregateHealth, BufferLevelTracker, HealthMonitor, HealthStatus, LatencyStats, LatencyTracker,
215    SignalQuality, StreamHealth,
216};
217pub use lockfree::{LockFreeQueue, LockFreeRingBuffer, SignalQueue, UnboundedQueue};
218pub use multiplex::{
219    AsyncMultiplexer, ChannelSplitter, MultiplexConfig, MultiplexStrategy, StreamDemultiplexer,
220    StreamMultiplexer,
221};
222pub use pipeline::{
223    ClipTransform, CombineStrategy, DecimateTransform, DerivativeTransform, MovingAverageTransform,
224    NormalizeTransform, OffsetTransform, ParallelPipeline, Pipeline, ScaleTransform,
225    StreamTransform,
226};
227pub use recorder::{RecordedFrame, RecorderConfig, RecorderFormat, StreamPlayer, StreamRecorder};
228pub use signal::{
229    AdaptiveBeamformer, ArbitrarySrcResampler, CepstralDistance, ChoiWilliams, ComplexCepstrum,
230    CubicResampler, DOAEstimator, DelayAndSum, DwtMultiLevel, DwtResult, EmdConfig, EmdResult,
231    EmpiricalModeDecomposition, EnsembleEmd, FarrowResampler, FastICA, Filter, FirFilter,
232    FormantTracker, GaborResult, GaborTransform, IirFilter, IntrinsicModeFunction, KalmanFilter,
233    LinearResampler, LmsFilter, MicrophoneArray, MosPredictor, NlmsFilter, Nonlinearity,
234    ParticleFilter, PesqCalculator, PolqaCalculator, QualityMetrics, QuefrencyFilter,
235    RatioModulation, RealCepstrum, ReassignedResult, ReassignedSpectrogram, Resampler, RlsFilter,
236    STransform, STransformResult, SignalProcessor, SincStreamingResampler, SnrCalculator,
237    Spectrogram, StoiCalculator, StreamingResampler, TemporalDecorrelation, TimeVaryingResampler,
238    WaveletAnalyzer, WaveletType, WignerVille, WignerVilleResult, WindowType, MVDR, NMF, PCA,
239};
240pub use stream::{
241    AsyncMemoryStream, AsyncSignalStream, ChannelStream, MemoryStream, RingBuffer, RingBufferIter,
242    SignalRingBuffer, SignalStream, StreamConfig,
243};
244pub use sync::{
245    InterpolationMethod, PhaseLockLoop, StreamSynchronizer, SyncConfig, TimeSynchronizer,
246    Timestamp, TimestampedSample,
247};
248pub use zerocopy::{BufferPool, SharedSignalBuffer, ZeroCopyBuffer, ZeroCopyBufferMut};
249
250// Re-export scirs2-core types
251pub use scirs2_core::ndarray::Array1;
252
253#[cfg(feature = "mqtt")]
254pub use mqtt::{MqttClient, MqttConfig, MqttMessage, MqttStream, QosLevel, TlsConfig};
255
256#[cfg(feature = "audio")]
257pub use audio::{AudioBackend, AudioConfig, AudioInput, AudioOutput};
258
259#[cfg(feature = "websocket")]
260pub use websocket::{WebSocketConfig, WebSocketStream};
261
262#[cfg(feature = "serial")]
263pub use serial::{list_ports, DataBits, FlowControl, Parity, SerialConfig, SerialStream, StopBits};
264
265#[cfg(feature = "file")]
266pub use file::{CsvReader, CsvWriter, Hdf5Reader, Hdf5Writer, WavReader, WavSpec, WavWriter};
267
268#[cfg(feature = "network")]
269pub use socket::{SocketConfig, TcpClientStream, TcpServerStream, UdpSocketStream};
270
271#[cfg(feature = "osc")]
272pub use osc::{OscArg, OscMessage, OscReceiver, OscSender, OscServer};
273
274#[cfg(feature = "zeromq")]
275pub use zeromq::{ZmqConfig, ZmqMessage, ZmqPattern, ZmqStream};
276
277#[cfg(all(feature = "ros2", not(target_os = "macos")))]
278pub use ros2::{QosProfile, Ros2Config, Ros2MessageType, Ros2Stream};
279
280#[cfg(feature = "video")]
281pub use video::{
282    CameraDevice, FrameBuffer, OpticalFlow, OpticalFlowEstimator, OpticalFlowMethod, PixelFormat,
283    VideoConfig, VideoFilter, VideoFrame, VideoMetadata, VideoProcessor, VideoReader, VideoSource,
284};
285
286#[cfg(test)]
287mod tests {
288    use super::*;
289
290    #[test]
291    fn test_signal_processor() {
292        let processor = SignalProcessor::new(1024);
293        assert_eq!(processor.buffer_size(), 1024);
294    }
295}