簡體   English   中英

在編譯時或運行時在C#中創建LUT

[英]Creating an LUT in C# at compile time or run time

我覺得這是一個愚蠢的問題,但我想不出一個好方法。

我要做的是在編譯時或運行時創建一個正弦波LUT。 理想情況下是編譯時,但如果編寫起來容易得多,則運行時很好。 但是,我希望包含它的庫的所有內容都可以訪問此靜態對象(我不想通過它)。

我有一種感覺,我將要更改幅度,樣本數,周期數(在兩次編譯之間,將在程序運行時進行設置),等等,所以我不想生成正弦波在其他地方並對值進行硬編碼。

我希望它是靜態的,因為我不想每次需要時都必須重新創建正弦波。 我遇到的問題是我沒有構造函數來對其進行初始化,而且我不確定如何使它一次運行而不將其傳遞給對象或跨幾個不同的庫。

我知道這必須可行並且可能非常容易,但是我只是不確定在哪里看。 最重要的是,它也可能只是一個編程風格的問題,因此任何建議都將受到歡迎。

謝謝

  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);

目前尚不清楚您希望此波做什么。 您是要在任何特定時間獲取價值,還是要整體上做某件事?

除了使用正確的值(基於頻率和時間)調用Math.Sin然后將其乘以幅度外,您還有什么需要做的嗎? 您是否已經嘗試過,發現每次需要時都太慢了?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM