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.
- Host: GitHub
- URL: https://github.com/guofei9987/signal-transforms
- Owner: guofei9987
- License: mit
- Created: 2024-10-16T12:03:58.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-01-08T09:18:57.000Z (over 1 year ago)
- Last Synced: 2025-09-13T17:37:02.825Z (9 months ago)
- Topics: dct
- Language: Rust
- Homepage:
- Size: 31.3 KB
- Stars: 3
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
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)
[](https://crates.io/crates/signal-transforms)
[](https://github.com/guofei9987/signal-transforms/actions)
[](https://docs.rs/signal-transforms)
[](https://github.com/guofei9987/signal-transforms/blob/master/LICENSE)
[](https://github.com/guofei9987/signal-transforms)
[](https://github.com/guofei9987/signal-transforms/fork)

[](https://crates.io/crates/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).