我有一个很大的采样波形,我想记录它的压缩版本以通过以较低速率重新采样(平均)来进行诊断。较低的汇率将始终是原始汇率的偶数除数。 例如:通过平均8个样本块将32K波形压缩为4K波形。
有没有一种简单的方法可以使用Linq / IEnumerable
答案 0 :(得分:1)
不是很纯正的Linq,但这可以做到:
int divisor = 2;
int index = 0;
var cutSamples = samples
.GroupBy(s => index++ / divisor)
.Select(g => g.Average());
在性能方面,Linq不是您的朋友,因此速度会更快:
public static double[] CutSamples(double[] samples, int divisor)
{
var reducedSamples = new double[samples.Length / divisor];
int reducedIndex = 0;
for (int i = 0; i < samples.Length; i += divisor)
{
double sum = 0;
int count = 0;
for (int j = 0; j < divisor && (i + j) < samples.Length; j++)
{
sum += samples[i + j];
count++;
}
reducedSamples[reducedIndex++] = sum / count;
}
return reducedSamples;
}