为什么 Octave conv() 给出的结果不同于两个信号的手动卷积?
Why is the Octave conv() giving result different from manual convolution of two signals?
我正在尝试在 Octave 中编写自己的代码以实现两个离散信号的卷积。但是,当我将输出与内置 conv()
函数进行比较时,结果有所不同。我究竟做错了什么?这是我的代码:
clc; clear; close all;
[h, fs] = audioread('sound_h.wav');
h = h(1:10000,1);
[x, fs] = audioread('sound_x.wav');
x = x(1:50000,1);
subplot(4, 1, 1)
plot(x);
title("x[n]");
subplot(4, 1, 2)
plot(h);
title("h[n]");
flip_h = fliplr(h);
len_h = length(h);
len_x = length(x);
padded_x = [zeros(len_h-1,1);x;zeros(len_h-1,1)];
y = zeros(len_x+len_h-1,1);
for i = 1:length(y)
y(i) = sum(padded_x(i:i+len_h-1).*flip_h);
endfor
subplot(4, 1, 3)
plot(y);
title("y[n]");
subplot(4, 1, 4)
plot(conv(h, x));
title("y[n] using conv()");
剧情如下:
行
flip_h = fliplr(h);
什么都不做,因为
h = h(1:10000,1);
是一个列向量。在这种情况下,您需要使用 flipud
。
我正在尝试在 Octave 中编写自己的代码以实现两个离散信号的卷积。但是,当我将输出与内置 conv()
函数进行比较时,结果有所不同。我究竟做错了什么?这是我的代码:
clc; clear; close all;
[h, fs] = audioread('sound_h.wav');
h = h(1:10000,1);
[x, fs] = audioread('sound_x.wav');
x = x(1:50000,1);
subplot(4, 1, 1)
plot(x);
title("x[n]");
subplot(4, 1, 2)
plot(h);
title("h[n]");
flip_h = fliplr(h);
len_h = length(h);
len_x = length(x);
padded_x = [zeros(len_h-1,1);x;zeros(len_h-1,1)];
y = zeros(len_x+len_h-1,1);
for i = 1:length(y)
y(i) = sum(padded_x(i:i+len_h-1).*flip_h);
endfor
subplot(4, 1, 3)
plot(y);
title("y[n]");
subplot(4, 1, 4)
plot(conv(h, x));
title("y[n] using conv()");
剧情如下:
行
flip_h = fliplr(h);
什么都不做,因为
h = h(1:10000,1);
是一个列向量。在这种情况下,您需要使用 flipud
。