我觉得这是一个愚蠢的问题,但我想不出一个好方法。
我想要做的是在编译时或运行时创建一个正弦波LUT。理想情况下编译时间,但如果编码更容易,则运行时间很好。但是,我希望包含其库的所有东西都可以访问这个静态对象(我不想传递它)。
我有一种感觉,我将改变振幅,样本数量,循环次数(在编译之间,它将在程序运行后设置)等,所以我不希望有在其他地方生成正弦波并对值进行硬编码。
我希望它是静态的,因为我不想每次需要时都重新创建正弦波。我遇到的问题是我没有构造函数来初始化它,我不知道如何让它运行一次而不将它传递给对象或几个不同的库。
我知道这一定是可能的,而且可能非常简单,但我不确定在哪里看。最重要的是,它可能只是一个编程风格的问题,所以任何建议都会受到欢迎。
由于
答案 0 :(得分:1)
public static class Sines {
private static double[] lut;
static Sines() {
lut = new double[2048];
for (int ix = 0; ix < lut.Length; ++ix)
lut[ix] = Math.Sin(Math.PI * 2 * ix / lut.Length);
}
public static double Lookup(int index) {
return lut[index];
}
}
用法:
double value = Sines.Lookup(1024);
答案 1 :(得分:0)
目前还不完全清楚你想要这个浪潮做什么。您是否想要获得任何特定时间的价值,或者您希望波浪作为一个整体做什么?
除了使用正确的值(基于频率和时间)调用Math.Sin
然后将其乘以幅度之外,还有什么需要做的吗?您是否已经尝试过,并且发现如果您每次需要时都这样做太慢了?