conv from conv function and ifft
이전 댓글 표시
I am trying to find the conv for a specific impulse and signal. Now when I try to use the conv function I ge the answer I need. But when I try to find fft for the impulse and then fft for the signal then .* both fft then ifft the answer I get a different answer. I tried many times any idea why?
Thanks in advance.
답변 (1개)
Matt J
2021년 1월 2일
0 개 추천
Most likely a zero-padding problem.
댓글 수: 9
Omar Abulayla
2021년 1월 2일
편집: Image Analyst
2021년 1월 2일
Matt J
2021년 1월 2일
N=(l1+l2-1);
Omar Abulayla
2021년 1월 2일
Matt J
2021년 1월 2일
The length has to be l1+l2-1 because that is the expected length of the output with conv().
Omar Abulayla
2021년 1월 2일
The error has nothing to do with the code you've shown, or my proposed modification:
x=rand(1,3); h=rand(1,5);
l1=length(x); l2=length(h);
N=l1+l2-1;
xpad=[x zeros(1,N-l1)];
hpad=[h zeros(1,N-l2)];
ccirc = ifft(fft(xpad).*fft(hpad))
Image Analyst
2021년 1월 2일
This works fine, so what did you do?
fprintf('Beginning to run %s.m ...\n', mfilename);
% Make random signal.
signalLength = 32;
x = rand(1, signalLength);
% Make impulse function:
h = zeros(1, signalLength);
h(signalLength/2) = 1;
% Pad the signal and kernel.
l1=length(x)
l2=length(h)
N = max(l1,l2)
xpad=[x, zeros(1,N-l1)];
hpad=[h, zeros(1,N-l2)];
ccirc = ifft(fft(xpad).*fft(hpad));
fprintf('Done running %s.m.\n', mfilename);
Matt J
2021년 1월 2일
Looks fine. No error messages.
Please post your code in code wells, so that it can be more easily read, copied, and run.
Aside from that, why are we talking about your early version that doesn't incorporate my modification? I've already told you that that version had insufficient zero-padding for that to work.
카테고리
도움말 센터 및 File Exchange에서 Transforms에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!