在编译时或运行时在C#中创建LUT

时间:2010-03-04 20:53:31

标签: c# static coding-style runtime compilation

我觉得这是一个愚蠢的问题,但我想不出一个好方法。

我想要做的是在编译时或运行时创建一个正弦波LUT。理想情况下编译时间,但如果编码更容易,则运行时间很好。但是,我希望包含其库的所有东西都可以访问这个静态对象(我不想传递它)。

我有一种感觉,我将改变振幅,样本数量,循环次数(在编译之间,它将在程序运行后设置)等,所以我不希望有在其他地方生成正弦波并对值进行硬编码。

我希望它是静态的,因为我不想每次需要时都重新创建正弦波。我遇到的问题是我没有构造函数来初始化它,我不知道如何让它运行一次而不将它传递给对象或几个不同的库。

我知道这一定是可能的,而且可能非常简单,但我不确定在哪里看。最重要的是,它可能只是一个编程风格的问题,所以任何建议都会受到欢迎。

由于

2 个答案:

答案 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然后将其乘以幅度之外,还有什么需要做的吗?您是否已经尝试过,并且发现如果您每次需要时都这样做太慢了?