--- source_files: - Common/DTS.Common/Classes/DSP/ScalerAttribute.cs - Common/DTS.Common/Classes/DSP/DASRestriction.cs - Common/DTS.Common/Classes/DSP/DSPFilterRestriction.cs - Common/DTS.Common/Classes/DSP/IStreamingFilterProfile.cs - Common/DTS.Common/Classes/DSP/StreamingFilterConverter.cs - Common/DTS.Common/Classes/DSP/DSPFilterConverter.cs - Common/DTS.Common/Classes/DSP/StreamingFilterProfile.cs - Common/DTS.Common/Classes/DSP/DSPFilterCollection.cs - Common/DTS.Common/Classes/DSP/StreamingFilterProfileCollection.cs - Common/DTS.Common/Classes/DSP/DSPFilterType.cs generated_at: "2026-04-17T15:32:03.691764+00:00" model: "zai-org/GLM-5-FP8" schema_version: 1 sha256: "dfa8a5b3110baf53" --- # DSP Module Documentation ## 1. Purpose This module provides Digital Signal Processing (DSP) filter configuration, management, and type conversion for the DTS system. It defines streaming filter profiles and DSP filter types with hardware-specific restrictions, handles calculation of filter cutoff frequencies based on sample rates, and provides property grid integration through custom type converters. The module persists filter configurations to XML files and supports legacy filter behavior for specific hardware types (SLICE6_AIR, SLICE6_AIR_BR, SLICE6_AIR_TC). --- ## 2. Public Interface ### ScalerAttribute A custom attribute for storing double values (scalers/ratios) on enum, class, struct, or field members. ```csharp [AttributeUsage(AttributeTargets.Enum | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Field, AllowMultiple = false)] public class ScalerAttribute : Attribute // Constructor public ScalerAttribute(double d) // Property public double Scaler { get; set; } ``` ### DASRestriction Restricts filter usage based on DAS (Data Acquisition System) hardware type and protocol version. ```csharp public class DASRestriction // Constructors public DASRestriction() // Defaults: DASType = "", ProtocolVersion = -1 public DASRestriction(string dasType, int protocolVersion) // Properties public string DASType { get; set; } // Hardware type string (e.g., "SLICE6_AIR"); empty = all DAS public int ProtocolVersion { get; set; } // Protocol version; <=0 means all versions ``` ### DSPFilterRestriction Identical structure to `DASRestriction`. Used for restricting which DAS can use a specific filter. ```csharp public class DSPFilterRestriction // Same constructors and properties as DASRestriction ``` ### IStreamingFilterProfile Interface defining the contract for streaming filter profiles. ```csharp public interface IStreamingFilterProfile // Properties int EnumValue { get; set; } // Byte/enum value for firmware string DisplayString { get; set; } // Display name string DescriptionString { get; set; } // Description text DASRestriction[] Restrictions { get; set; } // DAS usage restrictions double Ratio { get; set; } // Ratio of SPS to fC (if applicable) // Method double GetDSPFilterRate(double sps, string hwType) // Returns fC; NaN if not supported ``` ### StreamingFilterProfile Implementation of `IStreamingFilterProfile` for streaming filter configurations. ```csharp public class StreamingFilterProfile : IStreamingFilterProfile // Constructors public StreamingFilterProfile() public StreamingFilterProfile(StreamingFilterProfileCollection.DefaultProfiles profile, DASRestriction[] restrictions) public StreamingFilterProfile(string display, string description, int enumValue, double ratio, DASRestriction[] restrictions) // Properties (implements IStreamingFilterProfile) public double Ratio { get; set; } public string DisplayString { get; set; } public string DescriptionString { get; set; } public int EnumValue { get; set; } public DASRestriction[] Restrictions { get; set; } // Methods public override string ToString() // Returns DisplayString public static void GetProfileValues(StreamingFilterProfileCollection.DefaultProfiles profile, out string displayName, out string description, out int enumValue, out double ratio) public double GetDSPFilterRate(double sps, string hwType) ``` ### DSPFilterType Implementation of `IStreamingFilterProfile` representing a specific DSP filter type. ```csharp public class DSPFilterType : IStreamingFilterProfile // Constructors public DSPFilterType() public DSPFilterType(DSPFilterCollection.DSPFilterDefaults filter, DASRestriction[] restrictions) public DSPFilterType(int enumValue, string displayString, string descriptionString, double ratio, DASRestriction[] restrictions) // Constants public const int S6A_CAP = 20480; // SPS threshold for SLICE6_AIR fallback to AAF // Static Methods public static Tuple[] Get6PButterWorthLegacyTable() // Returns breakpoints/fC table for S6A/BR public static double GetLegacytDSPFilterRate(double sps, string hwType) public static void GetProfileValues(DSPFilterCollection.DSPFilterDefaults filter, out string displayName, out string description, out int enumValue, out double ratio) // Instance Methods public double GetDSPFilterRate(double sps, string hwType) public override string ToString() ``` ### DSPFilterCollection Thread-safe singleton collection of `DSPFilterType` objects with XML persistence. ```csharp public class DSPFilterCollection : Collection // Static Method public static DSPFilterCollection GetDSPFilterCollection() // Thread-safe singleton access // Constants public const int BUTTERWORTH = 13; public const int FIR45TAP = 14; public const int NONE = 0; // Enum public enum DSPFilterDefaults { [Display(Name ="None", Description = "Default and legacy setting for streaming")] None = 0, [Display(Name = "6th IIR Butterworth", Description = "6 - pole IIR Butterworth Low Pass")] Butterworth = 13, [Display(Name = "45-Tap FIR", Description = "finite impulse response filter with 45 taps")] FIR = 14 } // Instance Method public DSPFilterType GetFilter(string s) // Returns matching filter,