我正在尝试使用C来实现在此Wikipedia文章中看到的第一个自相关公式-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];
将不起作用,因为当实际发生的是两个值相乘的值每次都不断变化时,这只会将先前的计算添加到新的计算中
有没有人有什么建议?我的主要问题是,它实际上不是一个“迭代”,因为每次迭代之间都没有相似的值。
最佳答案
也许是这样的:
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];
}
}
与我的问题相比:
将循环条件从分配更改为条件,并固定开始/结束值
将输出数组的初始化添加为0
固定输出数组分配以匹配示例公式
关于c - 用C实现暴力自相关方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41809661/