gpt4 book ai didi

c - 使用C实现强力自相关方法

转载 作者:行者123 更新时间:2023-11-30 16:51:20 25 4
gpt4 key购买 nike

我正在尝试使用 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[N-x],每次增加一个新的迭代就加1,然后这个新的迭代会保留下来,相乘的sig[N-x]也会开始减少增加 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com