FFT in Processing

Hello,
I am trying to send data from an accelerometer to the Processing through UART. It’s working. My final goal is to use the sensor data to create an FFT visual interface to visualize the vibration frequency. I have seen the “sound” library which has a FFT function. But I am not sure how to use it with the UART data.

I can create an array of 512 samples from the data received over UART. I was thinking of using that array to draw the FFT. So, in a way, the program will collect a packet of data points (512 data points) from the UART. After collecting the data, it will run the FFT function using that data, display the FFT result through processing, and update the next frame with the next set of data coming from the UART and it will continuously perform that operation.

Any suggestions on how I can do it?

Thank you.

Hi @onelectron, An interesting project but I think you won’t get much help with the question as it is. The forum works better with specific questions. “It’s working” - what’s working? What data is coming out? Where is the data now? In an array? what type? dimensions? Maybe you are asking “How do I push this data into the sound library FFT function?” I think that should be in libraries section of the forum, better chance of someone familiar seeing it.

2 Likes

Thank you @RichardDL for the suggestion. I’ll modify the question and repost it to the libraries section of the forum.

Here is the link of the new post:

Simple FFT if yo don’t need sound library


/***************************************************************
	 * fft.c
	 * Douglas L. Jones
	 * University of Illinois at Urbana-Champaign
	 * January 19, 1992
	 * http://cnx.rice.edu/content/m12016/latest/
	 *
	 *   fft: in-place radix-2 DIT DFT of a complex input
	 *
	 *   input:
	 * n: length of FFT: must be a power of two
	 * m: n = 2**m
	 *   input/output
	 * x: double array of length n with real part of data
	 * y: double array of length n with imag part of data
	 *
	 *   Permission to copy and use this program is granted
	 *   as long as this header is included.
	 ****************************************************************/
	public void fft(float[] x, float[] y)
	{
		int i,j,k,n1,n2,a;
		float c,s,e,t1,t2;


		// Bit-reverse
		j = 0;
		n2 = n/2;
		for (i=1; i < n - 1; i++) {
			n1 = n2;
			while ( j >= n1 ) {
				j = j - n1;
				n1 = n1/2;
			}
			j = j + n1;

			if (i < j) {
				t1 = x[i];
				x[i] = x[j];
				x[j] = t1;
				t1 = y[i];
				y[i] = y[j];
				y[j] = t1;
			}
		}

		// FFT
		n1 = 0;
		n2 = 1;

		for (i=0; i < m; i++) {
			n1 = n2;
			n2 = n2 + n2;
			a = 0;

			for (j=0; j < n1; j++) {
				c = cos[a];
				s = sin[a];
				a +=  1 << (m-i-1);

				for (k=j; k < n; k=k+n2) {
					t1 = c*x[k+n1] - s*y[k+n1];
					t2 = s*x[k+n1] + c*y[k+n1];
					x[k+n1] = x[k] - t1;
					y[k+n1] = y[k] - t2;
					x[k] = x[k] + t1;
					y[k] = y[k] + t2;
				}
			}
		}
	}
}

Another example here and you can find the above one also

https://raw.githubusercontent.com/demantz/RFAnalyzer/master/app/src/main/java/com/mantz_it/rfanalyzer/FFT.java