我正在尝试使用C来实现本维基百科文章中提到的第一个自相关公式 - https://en.wikipedia.org/wiki/Autocorrelation#Properties
我确切地知道我需要用数学术语做什么,但试图将其作为一个迭代过程来实现是非常棘手的。
最终我将使用从CSV文件导入的振幅值到数组中来确定音符的音高,但是现在我使用测试数组:
int sig[] = { 0, 2, 6, 14, 25, 13, 11, 10, 5, 1 };
int N = sizeof(sig) / sizeof(sig[0]);
我现在需要像这样计算输出数组:
(sig[0] * sig[N-1])
(sig[0] * sig[N-2]) + (sig[1] * sig[N-1])
(sig[0] * sig[N-3]) + (sig[1] * sig[N-2]) + (sig[2] * sig[N-1])
依旧......
我尝试使用for循环实现此功能,但我不确定如何每次都添加新值。 sig [0]总是乘以sig [Nx],每次添加一个新的迭代时增加1,然后这个新的迭代将保留,并且乘以的sig [Nx]也将开始减少由1。
我知道诸如
之类的东西int n=0;
int m=0;
int a[N];
for(m = 0; m = N-1; m++)
for(n = N-m; n = 0; n--)
a[N] = a[N-1] + sig[m] * sig[n-1];
不会工作,因为这只会将之前的计算添加到新计算中,当实际发生的是两个值相乘时,每次都会改变
有没有人有任何建议?我的主要问题是它并不是真正的迭代,因为每次迭代之间没有类似的值。
答案 0 :(得分:0)
也许是这样的:
int i, j
int a[N];
for (i = 0; i <= N-1; i++) {
a[i] = 0;
for (j = 0; j <= i; j++) {
a[i] = a[i] + sig[j] * sig[N-i+j-1];
}
}
与我的问题相比: