Hi all,
I have a lot of trouble understanding how the correlation/convolution functions are used.
I have looked at the Information from the Manual but the description - involving finite functions - is far too abstract (and I've been used to abstractness as a physicist).
Can someone help me carry out a simple correlation analysis on two trivial vectors, say
v1 =(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
v2 = (1.01, 1.99, 3.01, 3.99, 5.01, 5.99, 7.01, 7.99, 9.01, 9.99)
(which should be approximatively 1) just to get me going?
Concretely: what should be my input, what will my output look like (and, ideally, why...)?
Here's what I have :
#define XSHAPE 10
#define YSHAPE 10
#define ZSHAPE (XSHAPE-1)+(YSHAPE-1)+1
int test6()
{
VSLCorrTaskPtr task; // declare the task
MKL_INT mode, xshape, yshape, zshape; //declare some variables
static double x[XSHAPE], y[YSHAPE], z[ZSHAPE]; //declare the input and output arrays
MKL_INT xstride = 1, ystride = 1, zstride = 1; //declare the "increment"
int status, ok, i;
xshape = XSHAPE; //length of vector
yshape = YSHAPE;
zshape = ZSHAPE;
for (i = 0; i<xshape; i++) // initialize the input vectors.
x[i] = i+1;
for (i = 0; i<yshape; i++)
y[i] = i+1 + 0.01*pow(-1,i);
ok = 1; // a priori success.
printf("EXAMPLE executing a correlation task\n");
mode = VSL_CORR_MODE_AUTO; //set mode
vsldCorrNewTask1D(&task, mode, xshape, yshape, zshape); //create task with, as an argument: reference to task object, mode, vectors lengths.
status = vsldCorrExec1D(task, x, xstride, y, ystride, z, zstride); // initialize status with task, vectors and respective increments. Execute task, fill vector z.
if (status != VSL_STATUS_OK) { // problem with the initialization of the status. // conversion from "status type" to int?
printf("ERROR: bad status: %d\n", status);
ok = 0; // boolean of success
}
for (i = 0; i < yshape; i++)
{
std::cout << y[i] << std::endl;
}
printf("EXAMPLE %s\n", ok ? "PASSED" : "FAILED");
return !ok;}
Thanks in advance!
Jérôme