Почему свертка с помощью умножения в частотной области дает неожиданные результаты MATLAB?
Я пытаюсь свести прямоугольный импульс с самим собой, взяв преобразование Фурье, возведя его в квадрат и затем взяв обратное преобразование Фурье. Я понимаю, что есть функция conv(), но я бы предпочел делать это в частотной области для будущих, более сложных задач. Моя проблема в том, что, когда я делаю это, он не производит треугольную функцию, как ожидалось. Код, который я использую ниже:
clc
clear all
x=-5:.01:5;
y=rectangularPulse(x);
Y=fft(y);
H=Y.^2;
h=ifft(H);
plot(x,h)
1 ответ
Вам нужен Zeropad для того, чтобы свертка была линейной. В настоящее время вы выполняете круговую свертку. Попробуйте что-то вроде этого:
y = ones(100,1);
N = length(y);
Nfft = 2*length(y) - 1;
Y=fft(y,Nfft);
H=Y.^2;
h=ifft(H);
plot(h);