Question about utilizing FFT, convolution and LTI systems
4 views (last 30 days)
Show older comments
Hello all, I have a solution from an equation that is considered linear time invariant, such that i(t)*h(t)=o(t) where i,h,o, are the input, impulse response, and output respectively. If you take these to fourier domain, then you can get H(w)=o(w)/i(w), where H(w) is the frequency response. What I am trying to do is obtain h(t) and take the convolution of h(t) and i(t) to obtain o(t). Here are my steps.
step 1: i_t=data1 o_t=data2
step 2: iw=fft(iw) ow=fft(ow)
step 3: Hw=ow./iw
step 4: ht=ifft(Hw)
step 5: ot_new=conv(i_t,ht)
when i compare the new output to the original output they do not match. I tried using conv(i_t,ht,'same') but that also does not give me anything good. I know that my system satisfies the linear time invariant conditions. Am I doing something wrong? I've also tried playing around with the fft shift and ifftshift with no luck. Thanks!
0 Comments
Accepted Answer
Honglei Chen
on 6 Feb 2017
The FFT corresponds to the circular convolution rather than the linear convolution. I would do the following
N = numel(o_t);
ot_compare = ot_new(1:N);
ot_compare(1:N-1) = ot_compare(1:N-1)+ot_new(N+1:end);
Then you can see ot_compare and o_t are the same.
HTH
More Answers (0)
See Also
Categories
Find more on Fourier Analysis and Filtering in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!