Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Forcing IFFT to start/end at 0 value

  1. Oct 2, 2013 #1
    Hi,

    I am not sure if this is the correct forum, but...

    I am working with FFTs of real signals. I have a FFT of a time signal (call it R(f)) and a frequency response (output/input) function (call it H(f)).

    The math is simple, I want to know what I need to put into my system defined by H(f) to get R(f) out. This is simple division:

    input(t) = IFFT[R(f) ./ H(f)]

    The problem arises because the IFFT often returns signals that do not begin/end at 0 - so when I apply the signal to my physical plant, there is a transient created by the instant jump from 0 to input(t=0). The FFT assumes a continuous repetition of my input(t) signal, which is why it is OK for it to output a non-zero-initial signal as it starts and ends at the same non-zero value.

    From my basic analysis, I have found that Real(sum([R(f) ./ H(f)])) must be zero.

    Any ideas on how to force the IFFT of the signal to be zero?
     
  2. jcsd
  3. Oct 3, 2013 #2

    DrClaude

    User Avatar

    Staff: Mentor

    To force a signal to zero at ##t=0##, you can do a sine transform, which corresponds to expanding the signal on sines only. You seem to be using Matlab, so check out dst and idst.

    Note also that this means that the solution you get doesn't correspond exactly to IFFT[R(f) ./ H(f)], but to some modified R(f) or H(f).
     
  4. Oct 3, 2013 #3
    Interesting, ive never used the DST.

    Perhaps I just do not understand the DST yet, but it looks like whenever I idst() my sine domain function, it returns a complex time signal. WHen using the fft, the imaginary part of the ifft() is neglegable, but using dst it is not.

    I am dealing with strictly real signals, so all my ffts are symetric, and thus all my iffts are real. Does this property not hold for the dst?

    Thanks.
     
  5. Oct 3, 2013 #4

    DrClaude

    User Avatar

    Staff: Mentor

    The output should be strictly real. I'm not sure what is going on here.
     
  6. Oct 3, 2013 #5
    could it be that my transfer function was computed using FFTs?
     
  7. Oct 3, 2013 #6
    I completed the entire system identification using DST instead of FFTs.
    Code (Text):

    H = dst(output) / dst(input) % input was a broadband random signal
    necessary_input = desired_output ./ H; % desired output is the DST of the desired output waveform
    necessary_input_time = idst(necessary_input);
     
    I do get a purely real signal when I do this, but it is not the correct input signal to my system to result in teh desired output.
     
  8. Oct 4, 2013 #7

    DrClaude

    User Avatar

    Staff: Mentor

    I don't fully understand what you are doing, but shouldn't
    Code (Text):
    H = dst(output) / dst(input)
    be
    Code (Text):
    H = dst(output) ./ dst(input)
    ?
     
  9. Oct 21, 2013 #8
    yes it was, i was not copy and pasting.

    I could not find out a solution to this problem and am seeking a more 'engineering' solution one rather than a mathematical one now. Thanks for the ideas though.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook