Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[RFC]: provide APIs for computing Fast Fourier Transforms #82

Closed
6 tasks done
liberocks opened this issue Apr 2, 2024 · 0 comments
Closed
6 tasks done

[RFC]: provide APIs for computing Fast Fourier Transforms #82

liberocks opened this issue Apr 2, 2024 · 0 comments
Labels
2024 2024 GSoC proposal. rfc Project proposal.

Comments

@liberocks
Copy link

Full name

Tirtadwipa Manunggal

University status

No

University name

No response

University program

No response

Expected graduation

No response

Short biography

Before I started my current job, I studied Physics Engineering. I focused on signal processing and machine learning. Now, I work as a full-stack engineer at a Health Tech startup in Cyprus. My job involves creating new features for different parts of our technology, like the backend, frontend, and mobile apps. I use languages like TypeScript, Python, and Dart every day to make sure our products work well and help people in the healthcare field.

Timezone

Asia/Jakarta (UTC+7)

Contact details

email:tirtadwipa.manunggal@gmail.com,github:liberocks

Platform

Mac

Editor

My go-to code editor is VSCode. It's widely used and comes with a bunch of plugins that make coding easier and quicker for me.

Programming experience

Coming from a non-Computer Science background, my programming journey began in the realm of Physics, where I applied my skills to tasks such as signal processing, solving ODEs/PDEs, and designing filters. Utilizing languages like C/C++ and Matlab, I navigated through various academic challenges. However, upon entering the software industry after graduation, I felt disoriented, having never worked within a professional development team.

This confusion sparked a realization: I needed to relearn programming from an industry perspective. It was a process that reshaped my approach to programming and laid the foundation for my current expertise.

I vividly recall my first project: researching noise filtering algorithms. This project was particularly rewarding as it allowed me to blend my academic knowledge with industry demands. The culmination of my efforts resulted in a tangible product. I was immensely proud when the work was published in a local journal (https://doi.org/10.26418/jlk.v1i1.2), marking a significant milestone in my professional journey.

JavaScript experience

My journey into web programming began long before React became popular, when I started using JavaScript to build web pages. JavaScript served as my entry point into the world of web development due to its low entry barrier, allowing me to start coding relatively quickly. One of the aspects I appreciate most about JavaScript is its array functions like map, reduce, and filter. Coming from a background where C was my first programming language, which required lengthy iterations for arrays, these functions were a game-changer. They not only helped me cut down on code length but also made it cleaner and more concise. However, despite its advantages, there are certain aspects of JavaScript that I find challenging. One such aspect is its ambiguous Falsy-Truthy value comparison. This ambiguity often leads to bugs that are difficult to detect, adding complexity to the debugging process.

Node.js experience

Transitioning to Node.js marked the next chapter in my programming journey after working extensively with JavaScript. It was through Node.js that I first encountered npm, the package manager, which revolutionized my approach to programming. Unlike my experience with C/C++, where package management was less structured, npm introduced me to a systematic way of managing libraries. npm opened my eyes to the vast ecosystem of open-source libraries, generously provided by the community. I started to appreciate the open source community for providing vas libraries that not only expanded my toolkit but also enriched my programming experience. In Node.js, my focus primarily revolved around building APIs using NestJS and web applications with React.

C/Fortran experience

C/C++ was the very first programming language I learned, and it set the stage for my entire programming journey. I was introduced to it back in college while studying a particular subject. I even worked on projects involving microcontrollers and Arduino, putting my C/C++ skills to good use. In my first job, C/C++ remained an essential part of my toolkit. We developed APIs for our speech-to-text AI worker using 0MQ. This setup enabled us to handle large volumes of data traffic with remarkable speed and efficiency, showcasing the power and versatility of C/C++ in real-world applications.

Interest in stdlib

Working with the stdlibjs feels like home to me because of my prior experience with Matlab during my degree. Just like Matlab, the stdlibjs provides a wide range of functions and tools that for math/numeric operations.

What I particularly love about stdlibjs is its ndarray and plotting functionality. These features were not typically associated with JavaScript environments; they were more commonly found in languages like Python or R. However, with stdlibjs, I now have access to these powerful tools within the JavaScript ecosystem. This expanded toolkit allows me to work with data and visualization in new and exciting ways.

Version control

Yes

Contributions to stdlib

Open pull request:

Merged pull request:

Goals

The goal of this idea is to expose a set of Fast Fourier Transform (FFT) interfaces similar to those available in NumPy and as documented in the Data APIs Array API specification. Similar to stdlib's BLAS interfaces, we may want to allow switching out the FFT backend.

One potential reference implementation which could form the basis of this idea is pocketfft, as done in NumPy:

https://github.com/mreineck/pocketfft
https://gitlab.mpcdf.mpg.de/mtr/pocketfft

Why this project?

The primary motivation behind introducing FFT operations on stdlib ndarrays is to enhance the toolkit available to stdlib users. This addition aligns with my experience in signal processing, where I have worked extensively with Fourier Transform. By incorporating FFT functionality into stdlib, users gain access to a broader range of tools for working with data. This not only enriches their capabilities but also opens the door to exploring various topics in data processing, particularly in signal processing.

Qualifications

With several years of experience in signal processing under my belt, I've gained expertise in utilizing FFT for various purposes, such as extracting signal features and understanding its inner workings. My proficiency in both C and JavaScript positions me well to contribute to the development of FFT functionality in stdlibjs. Drawing upon my extensive background in signal processing, I am equipped with the knowledge and skills necessary to design and implement robust FFT features within stdlibjs.

Prior art

Upon reviewing the GitHub issue (#3), it appears that FFT functionality has yet to be implemented in stdlibjs. However, the existing groundwork for ndarray operations lays a solid foundation that can facilitate the implementation of FFT.

Commitment

Given my prior experience balancing side projects alongside my full-time job, I typically allocate 20-24 hours per week to part-time work. As I am currently without a side project, I am able to commit the same amount of time to the Google Summer of Code program. This equates to approximately 360 hours over the course of the program, comfortably fitting within the 350-hour category project duration.

Schedule

Assuming a 12 week schedule,

Community Bonding Period:

  • Get familiar with ndarray operations
  • Discuss with the mentors on how the code should be structured and other execution steps
  • Get the development environment ready

Week 1, 2, 3:

  • Assess if I have all the ndarray operation function that I need to implement the FFT
  • Start writing missing supporting functions if any.

Week 4, 5, 6, 7:

  • Write the main functionality of FFT in C
  • Start writing test function

Week 8 & 9:

  • Start writing benchmark function
  • Improve the FFT performance if applicable

Week 10 & 11:

  • Start document the code and the examples
  • I will use the weeks as buffer to work on feedbacks and spilled over tasks

Week 12 (final week):

  • Finishing up the project

Related issues

#3

Checklist

  • I have read and understood the Code of Conduct.
  • I have read and understood the application materials found in this repository.
  • I understand that plagiarism will not be tolerated, and I have authored this application in my own words.
  • I have read and understood the patch requirement which is necessary for my application to be considered for acceptance.
  • The issue name begins with [RFC]: and succinctly describes your proposal.
  • I understand that, in order to apply to be a GSoC contributor, I must submit my final application to https://summerofcode.withgoogle.com/ before the submission deadline.
@liberocks liberocks added 2024 2024 GSoC proposal. rfc Project proposal. labels Apr 2, 2024
@kgryte kgryte closed this as completed Apr 30, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
2024 2024 GSoC proposal. rfc Project proposal.
Projects
None yet
Development

No branches or pull requests

2 participants