- #1
arcticMouse
- 1
- 0
I would like to find a useful function to predict the output based on the input. I'm trying to figure out how to get the transfer function given actual input and output data.
What I've tried is getting a transfer function using Fourier transforms. I'm attemping to do a fft on both the input and the output and dividing the output over the input and using fft of the absolute value to get the transfer function. The problem is it doesn't allow me to predict the output very well, though it does give me something that looks like a sum of exponential which is what I expect. Do I need to subtract an offset or apply gain and an offset? (y = mx + b sort of thing). I think I'm missing some key concept that I don't know how to describe.
Here's a simple sketch of what I'm trying to do.
http://i.imgur.com/4eo1x.png
Here's some pseudo code of what I've tried. I don't have MATLAB or anything fancy to do this for me, I'm trying to write it for an arduino project.
input_fft = fft(input);
output_fft = fft(output);
tf_fd = output_fft / input_fft;
tf = fft(abs(tf_fd));
Just a point in the right direction would be great! Maybe I'm going about this all wrong.
What I've tried is getting a transfer function using Fourier transforms. I'm attemping to do a fft on both the input and the output and dividing the output over the input and using fft of the absolute value to get the transfer function. The problem is it doesn't allow me to predict the output very well, though it does give me something that looks like a sum of exponential which is what I expect. Do I need to subtract an offset or apply gain and an offset? (y = mx + b sort of thing). I think I'm missing some key concept that I don't know how to describe.
Here's a simple sketch of what I'm trying to do.
http://i.imgur.com/4eo1x.png
Here's some pseudo code of what I've tried. I don't have MATLAB or anything fancy to do this for me, I'm trying to write it for an arduino project.
input_fft = fft(input);
output_fft = fft(output);
tf_fd = output_fft / input_fft;
tf = fft(abs(tf_fd));
Just a point in the right direction would be great! Maybe I'm going about this all wrong.