範例工具和原始程式碼
隨附的 IR 轉換工具可協助您將時域中的脈衝回應轉換為頻域,此工具已更新為支援縮減機制。您可以傳遞命令列參數來指定品質 (介於 0.0 到 99.9 之間,其中 0.0 表示將保留脈衝回應 99.9% 的能量,而 99.9 表示將保留 99.99% 的功率),以將工具設定為產生此表格。啟用此功能後,XDSP 將不會處理脈衝回應中功率極低的樣本 (零到接近零的值),以提高處理速度。 設定和寫入縮減表格的程式碼位於 main.cpp 檔案中一個名為 ImpulseResponseReduction 的類別中,而寫入縮減表格的函式是 ImpulseResponseReduction::SetReductionBlock。只要縮減表格的格式符合下列規格,您就可以自訂此程式碼以符合您的需求,讓您可以指定要為每個脈衝回應區塊處理多少個樣本。縮減表格格式
脈衝回應縮減機制的運作基礎,是在頻域脈衝回應緩衝區的結尾加入縮減區塊。縮減區塊的大小為一個脈衝回應區塊,開頭是等於 0xFFFFACE1 的 4 位元組簽章,後面接著最多 15 個 4 位元組結構的項目。區塊的其餘部分應以 0 填滿。 4 位元組結構包含兩個 16 位元不帶正負號的值:截止頻率和區塊索引。 範例如下:
當 XDSP 處理這類縮減區塊時,會發生下列情況:
- 硬體會處理完整的脈衝回應區塊,直到區塊 8 為止 (亦即前 8 個區塊,因為區塊索引從 0 開始)。
- 從區塊 8 到區塊 86,硬體只會處理每個區塊的前 384 個樣本,並捨棄其餘的樣本,因為這些樣本被認為對輸出的影響非常小。
- 從區塊 86 到區塊 102,硬體只會處理每個區塊的前 128 個樣本,並捨棄其餘的樣本。
- 從區塊 102 到區塊 159,硬體只會處理每個區塊的前 16 個樣本,並捨棄其餘的樣本。由於此範例中的脈衝回應只有 158 個區塊,因此這代表表格中最後一個有效的項目。
- 只有在下一個項目的區塊索引大於目前項目時,硬體才會將其視為有效;因此,表格的其餘部分會以最後一個有效項目填入,以表示這些項目無效且應被忽略。
注意事項
實作自訂演算法以產生有效的脈衝縮減表格時,有幾個事項需要注意:- 區塊索引的值必須至少為 8;換句話說,絕對不能縮減脈衝回應的前 8 個區塊。
- 截止頻率必須是 16 的倍數,且必須至少為 16。
- 截止頻率不得超過區塊大小;否則會是無效的項目。
- 脈衝回應縮減區塊的大小必須為一個完整的脈衝回應區塊。表格之後的空間預期會以 0 填滿。
- 搭配縮減機制使用立體聲脈衝回應時,每個聲道的結尾都預期會有一個縮減區塊。
- 在 XDspActivationParameters 中指定 impulseResponseLengthInFloats 參數時,請記得考量脈衝回應縮減區塊的額外空間。
