An open API service indexing awesome lists of open source software.

https://github.com/guofei9987/signal-transforms

A comprehensive Rust library for discrete and wavelet transforms, including DCT, and more.
https://github.com/guofei9987/signal-transforms

dct

Last synced: 8 months ago
JSON representation

A comprehensive Rust library for discrete and wavelet transforms, including DCT, and more.

Awesome Lists containing this project

README

          

# signal-transforms

- Documentation: [https://docs.rs/signal-transforms/](https://docs.rs/signal-transforms/)
- Source code: [https://github.com/guofei9987/signal-transforms](https://github.com/guofei9987/signal-transforms)

[![Crates.io](https://img.shields.io/crates/v/signal-transforms)](https://crates.io/crates/signal-transforms)
[![Build Status](https://github.com/guofei9987/signal-transforms/actions/workflows/rust.yml/badge.svg)](https://github.com/guofei9987/signal-transforms/actions)
[![Docs.rs](https://docs.rs/signal-transforms/badge.svg)](https://docs.rs/signal-transforms)
[![License](https://img.shields.io/crates/l/signal-transforms)](https://github.com/guofei9987/signal-transforms/blob/master/LICENSE)
[![GitHub stars](https://img.shields.io/github/stars/guofei9987/signal-transforms.svg?style=social&label=Star)](https://github.com/guofei9987/signal-transforms)
[![Forks](https://img.shields.io/github/forks/guofei9987/signal-transforms.svg?style=social&label=Fork)](https://github.com/guofei9987/signal-transforms/fork)
![Rust](https://img.shields.io/badge/Rust-1.60+-orange.svg)
[![Crates.io Downloads](https://img.shields.io/crates/d/signal-transforms)](https://crates.io/crates/signal-transforms)
[![GitHub Discussions](https://img.shields.io/github/discussions/guofei9987/signal-transforms)](https://github.com/guofei9987/signal-transforms/discussions)

**signal-transforms** is a Rust library dedicated to implementing various signal transformation algorithms, including:

- Discrete Cosine Transform (DCT)
- Inverse Discrete Cosine Transform (IDCT)
- Two-Dimensional Discrete Cosine Transform (DCT2)
- Inverse Two-Dimensional Discrete Cosine Transform (IDCT2)
- Future plans to support more signal processing algorithms

## Installation

Add the following dependency to your `Cargo.toml` file:

```toml
[dependencies]
signal-transforms = "0.1.3"
```

# How To Use

## Discrete Cosine Transform (DCT)

### One-Dimensional DCT

```rust
fn example_dct_1d() {
use nalgebra::DMatrix;
use signal_transforms::dct::Dct;

// Create a new DCT instance with size 4
let dct = Dct::new(4);

// Define a vector of sample data
let vec1 = vec![52.0, 55.0, 61.0, 66.0];
let vec1 = DMatrix::from_vec(1, 4, vec1);

// Perform the 1D DCT
let dct_res = dct.dct_1d(&vec1);

println!("DCT result = {}", dct_res);

// Perform the inverse 1D DCT
let idct_res = dct.idct_1d(&dct_res);

println!("Inverse DCT result = {}", idct_res);
}
```

### Two-Dimensional DCT

```rust
fn example_dct_2d() {
use nalgebra::DMatrix;
use signal_transforms::dct::Dct2D;

// Define a 4x4 matrix of sample data
let matrix = vec![
52.0, 55.0, 61.0, 66.0,
70.0, 61.0, 64.0, 73.0,
63.0, 59.0, 55.0, 90.0,
67.0, 61.0, 68.0, 104.0,
];

let matrix = DMatrix::from_row_slice(4, 4, &matrix);

// Create a new 2D DCT instance with dimensions 4x4
let dct = Dct2D::new(4, 4);

// Perform the 2D DCT
let dct_res = dct.dct_2d(&matrix);

println!("DCT result = {}", dct_res);

// Perform the inverse 2D DCT
let idct_res = dct.idct_2d(&dct_res);
println!("Inverse DCT result = {}", idct_res);
}
```

### `Dct4x4` is 20x faster than `Dct2D`

```rust
#[test]
fn example_dct_4x4() {
use nalgebra::Matrix4;
use signal_transforms::dct::Dct4x4;
let matrix = Matrix4::new(
52.0, 55.0, 61.0, 66.0,
70.0, 61.0, 64.0, 73.0,
63.0, 59.0, 55.0, 90.0,
67.0, 61.0, 68.0, 104.0,
);

let dct = Dct4x4::new();

let dct_res = dct.dct_2d(&matrix);

println!("dct result = {}", dct_res);

let idct_res = dct.idct_2d(&dct_res);
println!("idct result = {}", idct_res);
}
```

## Tests and Benchmark

### Tests

```shell
cargo test
```

Or:

```shell
cargo test --all-features
```

### Benchmark

```bash
cargo bench
```

The result is in `./target/criterion`

## Future Enhancements

- Support for additional signal processing algorithms.
- Optimization for performance and memory usage.
- Comprehensive documentation and examples for advanced use cases.

## Contributing

Contributions are welcome! Please feel free to submit issues and pull requests.

## License

This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.

---

For more information, visit the [official documentation](https://github.com/your-repo/signal-transforms).