Skip to main content

FftConvolution

Struct FftConvolution 

Source
pub struct FftConvolution { /* private fields */ }
Expand description

GPU-accelerated FFT-based 1D linear convolution.

Internally uses two Fft1d dispatches (forward FFT of signal and kernel, then inverse FFT of the pointwise product). Complex multiplication is done on the CPU because the buffer is small relative to the GPU dispatch overhead.

§Construction

use std::sync::Arc;
use oxigdal_gpu::convolution_fft::FftConvolution;
use oxigdal_gpu::GpuContext;

let ctx = Arc::new(GpuContext::new().await?);
let conv = FftConvolution::new(Arc::clone(&ctx));

Implementations§

Source§

impl FftConvolution

Source

pub fn new(ctx: Arc<GpuContext>) -> Self

Create a new FftConvolution bound to the given GPU context.

Source

pub fn convolve(&self, signal: &[f32], kernel: &[f32]) -> GpuResult<Vec<f32>>

Compute the linear 1D convolution of signal with kernel.

Output length: signal.len() + kernel.len() - 1.

Both sequences are zero-padded to fft_size = (output_len).next_power_of_two(). Forward FFTs of each padded sequence are computed on the GPU, complex multiplication is performed on the CPU, and then the inverse FFT is computed on the GPU. Only the first output_len samples of the IFFT result are returned (the remainder is circular aliasing that vanishes because of the zero-padding).

§Errors
Source

pub fn correlate(&self, signal: &[f32], kernel: &[f32]) -> GpuResult<Vec<f32>>

Compute the linear 1D cross-correlation of signal with kernel.

Cross-correlation is equivalent to convolution with a time-reversed kernel. This method reverses kernel and delegates to Self::convolve.

Output length: signal.len() + kernel.len() - 1 (same as convolution).

§Errors

Propagates any error from Self::convolve.

Source

pub fn convolve_batch( &self, signals: &[Vec<f32>], kernel: &[f32], ) -> GpuResult<Vec<Vec<f32>>>

Apply the same kernel to each signal in signals.

This is a sequential loop over Self::convolve. A future optimisation could share the forward-FFT of the kernel across all signals; for now each signal gets an independent GPU dispatch.

Returns a Vec<Vec<f32>> with one result per input signal, in the same order.

§Errors

Returns the first error encountered (processing stops on error).

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more