This is because the kernels in the paper are assumed to be symmetric. So, this constant basically multiplies each term by the number of all possible equivalent permutations of its kernels indexes. Since I am supposing that the kernels provided to the function are in the triangular form, this constant is not necessary. In fact, to convert a symmetric kernel to a triangular kernel, one simply multiplies the terms with indexes such that k1<=k2<=...<=kp by their respective S constants.

Each row p of y corresponds to the output of the p-th order homogeneous system output.

That is, the p-th row is the multidimensional convolution of the input with the kernel kp.

About the zeros in the result, this is just as expected, because your kernels are all null. To get a nonzero result, you must provide the correct kernels of your Volterra filter.

This is because the kernels in the paper are assumed to be symmetric. So, this constant basically multiplies each term by the number of all possible equivalent permutations of its kernels indexes. Since I am supposing that the kernels provided to the function are in the triangular form, this constant is not necessary. In fact, to convert a symmetric kernel to a triangular kernel, one simply multiplies the terms with indexes such that k1<=k2<=...<=kp by their respective S constants.

I have read the paper which you implemented and also I have followed your script. I am wonder about the constant ( S in the paper) which multiple by the kernel of Volterra series. I didn't notice this constant in the script.

Each row p of y corresponds to the output of the p-th order homogeneous system output.

That is, the p-th row is the multidimensional convolution of the input with the kernel kp.

About the zeros in the result, this is just as expected, because your kernels are all null. To get a nonzero result, you must provide the correct kernels of your Volterra filter.

Maher,
This is because the kernels in the paper are assumed to be symmetric. So, this constant basically multiplies each term by the number of all possible equivalent permutations of its kernels indexes. Since I am supposing that the kernels provided to the function are in the triangular form, this constant is not necessary. In fact, to convert a symmetric kernel to a triangular kernel, one simply multiplies the terms with indexes such that k1<=k2<=...<=kp by their respective S constants.

Comment only

23 Oct 2011

Fast Volterra Filtering
Fast algorithm for computing the response of a discrete Volterra model given a input sequence.

Goulart,
I have read the paper which you implemented and also I have followed your script. I am wonder about the constant ( S in the paper) which multiple by the kernel of Volterra series. I didn't notice this constant in the script.
Thanks for your effort

Comment only

12 Oct 2011

Fast Volterra Filtering
Fast algorithm for computing the response of a discrete Volterra model given a input sequence.

Goryn,
Each row p of y corresponds to the output of the p-th order homogeneous system output.
That is, the p-th row is the multidimensional convolution of the input with the kernel kp.
About the zeros in the result, this is just as expected, because your kernels are all null. To get a nonzero result, you must provide the correct kernels of your Volterra filter.

Comment only

12 Oct 2011

Fast Volterra Filtering
Fast algorithm for computing the response of a discrete Volterra model given a input sequence.

Ok. Now I use:
u = data; %1000x1 matrix
N1 = 100;
k1 = zeros(1,N1);
N2 = 100;
k2 = zeros(N2,N2);
N3 = 100;
k3 = zeros(N3,N3,N3);
kernels = {k1 k2 k3};
memories = [N1 N2 N3];
y = fastVMcell(u, kernels, memories);
Now it works! But the result 'y' is 3x1099 matrix with zeros. No filtered data in output, just three rows of zeros.

Comment only