Я пытаюсь проверить теорему свертки в MATLAB. У меня есть сигнал под названием sine_big_T
. Тогда у меня есть фильтр с именем W
. W
и sine_big_T
имеют одинаковую длину.
Теорема о свертке говорит, что fft(sine_big_T.*W)
должно быть таким же, как свертка fft(sine_big_T)
с fft(W)
.
Я совершенно запутался в этой теореме. fft(sine_big_T.*W)
даст мне массив с длиной length(sine_big_T)
. Однако conv(fft(sine_big_T), fft(W))
дает мне массив с длиной length(sine_big_T) + length(W) - 2
. Я пробовал комменд conv(fft(sine_big_T), fft(W), 'same')
, но результат все еще сильно отличается от fft(sine_big_T.*W)
.
T = 128;
big_T = 8*T;
small_T = T/8;
sine_big_T = zeros(1,129);
sine_small_T = zeros(1,129);
W = zeros(1,129);
for i = 0:T
sine_big_T(1, i+1) = sin(2*pi/big_T*i);
W(1, i + 1) = 1 - cos(2*pi/T * i);
end
figure
plot(1:129,fft(sine_big_T.*W));
I_fft = fft(sine_big_T);
W_fft = fft(W);
test = conv(I_fft, W_fft,'same');
figure
plot(1:length(I_fft), test)
Из теоремы два графика должны выглядеть одинаково. Но результат даже не близко. Я думаю, что я использую conv
не правильно. Как правильно проверить теорему?