pub struct NeuromorphicProcessor { /* private fields */ }Expand description
Neuromorphic processor for general spatial computations
This processor implements event-driven neuromorphic computing paradigms for spatial data processing. It supports memristive crossbar arrays for in-memory computation and temporal coding schemes for efficient information processing.
§Features
- Event-driven processing pipeline
- Memristive crossbar arrays for in-memory computation
- Temporal and rate-based coding schemes
- Spike timing dynamics and correlation detection
- Configurable processing parameters
§Example
use scirs2_core::ndarray::Array2;
use scirs2_spatial::neuromorphic::algorithms::NeuromorphicProcessor;
let points = Array2::from_shape_vec((3, 2), vec![
0.0, 0.0, 1.0, 1.0, 2.0, 2.0
]).unwrap();
let mut processor = NeuromorphicProcessor::new()
.with_memristive_crossbar(true)
.with_temporal_coding(true)
.with_crossbar_size(64, 64);
// Encode spatial data as neuromorphic events
let events = processor.encode_spatial_events(&points.view()).unwrap();
// Process events through neuromorphic pipeline
let processed_events = processor.process_events(&events).unwrap();Implementations§
Source§impl NeuromorphicProcessor
impl NeuromorphicProcessor
Sourcepub fn with_memristive_crossbar(self, enabled: bool) -> Self
pub fn with_memristive_crossbar(self, enabled: bool) -> Self
Enable memristive crossbar arrays
When enabled, events are processed through a memristive crossbar array that provides in-memory computation capabilities.
§Arguments
enabled- Whether to enable memristive crossbar processing
Sourcepub fn with_temporal_coding(self, enabled: bool) -> Self
pub fn with_temporal_coding(self, enabled: bool) -> Self
Enable temporal coding
When enabled, spatial coordinates are encoded using spike timing rather than spike rates.
§Arguments
enabled- Whether to enable temporal coding
Sourcepub fn with_crossbar_size(self, rows: usize, cols: usize) -> Self
pub fn with_crossbar_size(self, rows: usize, cols: usize) -> Self
Configure crossbar size
Sets the dimensions of the memristive crossbar array used for in-memory computation.
§Arguments
rows- Number of rows in crossbar arraycols- Number of columns in crossbar array
Sourcepub fn with_processing_params(
self,
max_pipeline_length: usize,
crossbar_threshold: f64,
learning_rate: f64,
) -> Self
pub fn with_processing_params( self, max_pipeline_length: usize, crossbar_threshold: f64, learning_rate: f64, ) -> Self
Configure processing parameters
§Arguments
max_pipeline_length- Maximum length of event pipelinecrossbar_threshold- Threshold for crossbar spike generationlearning_rate- Learning rate for memristive adaptation
Sourcepub fn encode_spatial_events(
&self,
points: &ArrayView2<'_, f64>,
) -> SpatialResult<Vec<SpikeEvent>>
pub fn encode_spatial_events( &self, points: &ArrayView2<'_, f64>, ) -> SpatialResult<Vec<SpikeEvent>>
Encode spatial data as neuromorphic events
Converts spatial data points into spike events using either temporal coding (spike timing) or rate coding (spike frequency) depending on the processor configuration.
§Arguments
points- Input spatial points (n_points × n_dims)
§Returns
Vector of spike events representing the spatial data
Sourcepub fn process_events(
&mut self,
events: &[SpikeEvent],
) -> SpatialResult<Vec<SpikeEvent>>
pub fn process_events( &mut self, events: &[SpikeEvent], ) -> SpatialResult<Vec<SpikeEvent>>
Sourcepub fn get_crossbar_statistics(&self) -> HashMap<String, f64>
pub fn get_crossbar_statistics(&self) -> HashMap<String, f64>
Get crossbar statistics
Returns statistics about the current state of the memristive crossbar array and event processing pipeline.
§Returns
HashMap containing various statistics about the processor state
Sourcepub fn crossbar_size(&self) -> (usize, usize)
pub fn crossbar_size(&self) -> (usize, usize)
Get crossbar size
Sourcepub fn is_memristive_enabled(&self) -> bool
pub fn is_memristive_enabled(&self) -> bool
Check if memristive crossbar is enabled
Sourcepub fn is_temporal_coding_enabled(&self) -> bool
pub fn is_temporal_coding_enabled(&self) -> bool
Check if temporal coding is enabled
Sourcepub fn crossbar_threshold(&self) -> f64
pub fn crossbar_threshold(&self) -> f64
Get current crossbar threshold
Sourcepub fn learning_rate(&self) -> f64
pub fn learning_rate(&self) -> f64
Get memristive learning rate
Sourcepub fn pipeline_length(&self) -> usize
pub fn pipeline_length(&self) -> usize
Get number of events in pipeline
Sourcepub fn clear_pipeline(&mut self)
pub fn clear_pipeline(&mut self)
Clear event pipeline
Sourcepub fn reset_crossbar(&mut self)
pub fn reset_crossbar(&mut self)
Reset crossbar to initial state
Sourcepub fn conductance_matrix(&self) -> &Array2<f64>
pub fn conductance_matrix(&self) -> &Array2<f64>
Get conductance matrix (for analysis)
Sourcepub fn set_conductance(
&mut self,
row: usize,
col: usize,
value: f64,
) -> SpatialResult<()>
pub fn set_conductance( &mut self, row: usize, col: usize, value: f64, ) -> SpatialResult<()>
Set specific conductance value
Trait Implementations§
Source§impl Clone for NeuromorphicProcessor
impl Clone for NeuromorphicProcessor
Source§fn clone(&self) -> NeuromorphicProcessor
fn clone(&self) -> NeuromorphicProcessor
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for NeuromorphicProcessor
impl Debug for NeuromorphicProcessor
Auto Trait Implementations§
impl Freeze for NeuromorphicProcessor
impl RefUnwindSafe for NeuromorphicProcessor
impl Send for NeuromorphicProcessor
impl Sync for NeuromorphicProcessor
impl Unpin for NeuromorphicProcessor
impl UnwindSafe for NeuromorphicProcessor
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.