【发布时间】:2015-06-08 23:21:41
【问题描述】:
我真的很难从数组中找到加权和。 我有一个名为频率 [28] 的数组(一维大小 28)和一个名为 peak[28] 的相同大小的相同索引数组。数组总是有一个值或零。我想要实现的是遍历数组,从频率和幅度数组中检索两个值,同时忽略零。另外,我并不是要求整个数组的加权平均值。
我觉得我说得不够清楚。
比如说
frequency[n] = [0,0,0, a,b, 0,0,0, c,d,e, 0,0, f]
peak[n] = [0,0,0, z,y, 0,0,0, x,w,v, 0,0, u]
因此,我想忽略前三个箱,因为它们为零,并找到与 (z,y) 配对的 (a,b) 的加权平均值,然后忽略接下来的三个箱,然后再次找到 (c,d, e) 与 (x,w,v) 等配对。
请注意,我在数组中的值(大小是固定的)不是固定的。值可能出现的索引总是变化的。
我附上了检索数组的代码的 sn-p。 任何建议或指导都会有很大帮助!
// peak search
threshold = 0;
for (ctr=0; ctr<n1; ctr++)
{
peak[ctr] = 0; // initialise arrays
freq_bin[ctr] =0;
frequency[ctr] = 0;
// magnitude calculation from fft output
fft_mag[ctr] = 10*(sqrt((fft_output[ctr].r * fft_output[ctr].r) + (fft_output[ctr].i * fft_output[ctr].i)))/(n);
threshold = 12;
if (fft_mag[ctr] >= threshold) // extract fft magnitudes only above threshold
{
peak[ctr] = fft_mag[ctr]; // store magnitude above threshold into peak array
freq_bin[ctr] = ctr; // location of each magnitude above threshold
frequency[ctr] = (freq_bin[ctr]*(10989/n)); // frequency calculation from magnitude location
}
}
我很抱歉没有评论代码。
-
peak[ctr]包含 fft 输出的峰值幅度 -
frequency[ctr]包含相应 fft 峰值幅度的频率值。
我有多个来自 fft 的峰值,输出数组如下所示;
peak[28] = [0 0 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 14 0 0 0 29 74 45 0 0 0 0]
frequency[28] = [0 0 0 0 0 0 0 0 0 0 462 0 0 0 0 0 0 714 0 0 0 924 966 1008 0 0 0 0]
因此,我需要计算:
- 平均 1 = (14x462)/14 = 462 Hz
- 平均 2 = (14x714)/14 = 714 Hz
- 平均 3 = (29x924 + 74x966 + 45x1008)/(29+74+45) = 938.8 Hz
【问题讨论】:
-
您能描述一下您的程序做错了什么吗?包括样本输入、预期输出和实际输出。编译和重现问题的实际程序也将帮助您获得答案。
-
正如我在学校和尼克凯夫那里学到的:“零也是一个数字”(或一个值)。
-
你真的需要解释一下
peak、freq_bin、fft_mag和fft_output数组的用途;您在问题中只提到了两个数组。我怀疑你需要两个数组索引。一是“输入”索引;你可以继续叫它ctr,它会保持不变。另一个可以叫out;您将其设置为零,并且仅当您在if语句主体中为peak[out]、freq_bin[out]和frequency[out]分配非零值时才递增它,在末尾添加out++以递增out当你有一个选择的价值。在循环之后,您将拥有包含值的元素 [0..out)。 -
我刚刚详细阐述了这个问题。对不起,如果我让你感到困惑,我也很困惑。
-
请研究如何创建一个 MCVE (How to create a Minimal, Complete, and Verifiable Example?) 或 SSCCE (Short, Self-Contained, Correct Example) — 两个名称和链接用于相同的基本思想。您仍然有未记录的变量(
n、n1、fft_output、fft_mag、freq_bin等等),虽然我们可以对它们的含义做出有根据的猜测,但我们不应该这样做不得不猜测。也没有关于类型的文档。将threshold设置为循环外部的0和内部的12似乎很奇怪。等等。
标签: c arrays algorithm average