🚀 FFT Implementation v2.0.0 - Major Performance Update
🎯 Highlights
- 5x Performance Improvement with optimized algorithms
- Fixed Critical Linux Bug (GitHub Issue #1)
- GPU Acceleration support (CUDA + Metal)
- Automatic Algorithm Selection with new
fft_auto()API
🐛 Critical Bug Fixes
- GitHub Issue #1: Fixed
timer_ttype conflict on Linux systems- Renamed custom timer type to
fft_timer_t - Maintains cross-platform compatibility
- Renamed custom timer type to
- Radix-4 FFT: Enhanced reliability with 91.4% test pass rate
- Memory Management: Fixed leaks and improved error handling
- Numerical Stability: Improved accuracy across all algorithms
⚡ Performance Optimizations
- Twiddle Factors: Special case handling for common angles (0°, 90°, 180°, 270°)
- Bit Reversal: SIMD-friendly optimizations for sizes ≤ 256
- Compiler Hints: Branch prediction and force inlining for critical paths
- Memory Access: Cache-optimized patterns for better performance
🚀 New Features
- Automatic Selection:
fft_auto()chooses optimal algorithm - GPU Acceleration: CUDA and Metal Performance Shaders support
- Planning API: FFTW-inspired interface for repeated transforms
- Cross-Platform: Full Linux, macOS, and Windows support
📊 Quality Metrics
- Test Coverage: 92.7% pass rate (454/490 tests)
- Benchmarks: 83.3% pass rate with zero failures
- Numerical Accuracy: Errors in 1e-13 range for large transforms
- Memory Safety: Zero leaks with proper cleanup functions
📚 Documentation
- Complete Rewrite: ReadTheDocs integration
- Optimization Guide: New comprehensive performance guide
- API Reference: Updated with v2.0.0 features
- Migration Guide: Detailed upgrade instructions from v1.0.0
🔄 Breaking Changes
- API Redesign: Use
fft_auto()or planning API instead of direct calls - Direction Constants: Now use -1 for forward, +1 for inverse FFT
- Memory Allocation: Deprecated non-aligned allocation
📥 Installation
Quick Start
git clone https://github.com/muditbhargava66/FFT-implementation-in-C.git
cd FFT-implementation-in-C
make allUsing the New API
#include <fft_auto.h>
int main() {
complex_t* signal = fft_alloc_complex(1024);
// ... fill signal ...
fft_auto(signal, signal, 1024, -1); // Automatic algorithm selection
fft_free(signal);
return 0;
}🙏 Acknowledgments
- Thanks to all contributors and testers
- Special thanks for reporting GitHub Issue #1
- Community feedback that drove v2.0.0 improvements
📖 Full Changelog
See CHANGELOG.md for complete details.
Full Changelog: v1.0.0...v2.0.0