Skip to contents

Computes a semi-metric based on the L2 distance of Fourier coefficients computed via Fast Fourier Transform (FFT). This is more efficient than the Fourier basis option in semimetric.basis for large nfreq.

Usage

semimetric.fourier(fdataobj, fdataref = NULL, nfreq = 5, ...)

Arguments

fdataobj

An object of class 'fdata'.

fdataref

An object of class 'fdata'. If NULL, uses fdataobj.

nfreq

Number of Fourier frequencies to use (excluding DC). Default is 5.

...

Additional arguments (ignored).

Value

A distance matrix based on Fourier coefficients.

Details

The Fourier coefficients are computed using FFT and normalized by the number of points. The distance is the L2 distance between the magnitude of the first nfreq+1 coefficients (DC + nfreq frequencies).

This function uses Rust's rustfft library for efficient FFT computation, making it faster than R's base fft for large datasets.

Examples

# Create curves with different frequency content
t <- seq(0, 1, length.out = 100)
X <- matrix(0, 10, 100)
for (i in 1:10) X[i, ] <- sin(2*pi*i*t) + rnorm(100, sd = 0.1)
fd <- fdata(X, argvals = t)

# Compute distance based on Fourier coefficients
D <- semimetric.fourier(fd, nfreq = 10)