ThreatSourceLibaray/ThreatSource/src/Utils/LaserCode.cs

137 lines
4.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

namespace ThreatSource.Utils
{
/// <summary>
/// 激光编码类型枚举,定义支持的不同编码类型
/// </summary>
/// <remarks>
/// 包含多种常见的激光编码类型:
/// - PRF脉冲重复频率编码
/// - PPM脉冲位置调制
/// - PWM脉冲宽度调制
/// - PseudoRandom伪随机编码
/// - Frequency频率编码
/// - Phase相位编码
/// </remarks>
public enum LaserCodeType
{
/// <summary>
/// 无编码
/// </summary>
None = 0,
/// <summary>
/// 脉冲重复频率编码
/// </summary>
/// <remarks>
/// 最常用的激光编码方式
/// NATO标准使用的编码方式
/// 通常使用4位数字编码1111-1788
/// </remarks>
PRF = 1,
/// <summary>
/// 脉冲位置调制
/// </summary>
/// <remarks>
/// 通过改变脉冲在时间窗口中的位置来编码信息
/// 抗干扰能力较强
/// </remarks>
PPM = 2,
/// <summary>
/// 脉冲宽度调制
/// </summary>
/// <remarks>
/// 通过改变脉冲宽度来编码信息
/// 实现简单,抗干扰能力一般
/// </remarks>
PWM = 3,
/// <summary>
/// 伪随机编码
/// </summary>
/// <remarks>
/// 使用伪随机序列对激光信号进行调制
/// 抗干扰能力极强
/// </remarks>
PseudoRandom = 4,
/// <summary>
/// 频率编码
/// </summary>
/// <remarks>
/// 使用不同频率的激光进行编码
/// 可以同时使用多个频率
/// </remarks>
Frequency = 5,
/// <summary>
/// 相位编码
/// </summary>
/// <remarks>
/// 通过调制激光信号的相位来编码信息
/// 编码容量大,抗干扰能力强
/// </remarks>
Phase = 6
}
/// <summary>
/// 激光编码类,用于表示激光信号的编码信息
/// </summary>
/// <remarks>
/// 提供了激光编码的基本属性和方法:
/// - 编码类型
/// - 编码值
/// - 附加参数
/// - 编码匹配判断
/// 用于实现激光信号的编码和解码功能
/// </remarks>
public class LaserCode
{
/// <summary>
/// 获取或设置编码类型
/// </summary>
/// <remarks>
/// 指定使用的编码方案
/// 默认为None无编码
/// </remarks>
public LaserCodeType CodeType { get; set; } = LaserCodeType.None;
/// <summary>
/// 获取或设置编码值
/// </summary>
/// <remarks>
/// 对于不同类型的编码,解释方式不同
/// 对于PRF编码表示1111-1788范围内的编码值
/// </remarks>
public int CodeValue { get; set; }
/// <summary>
/// 获取或设置附加参数
/// </summary>
/// <remarks>
/// 用于存储特定编码类型的额外信息
/// 如PPM编码的脉冲位置模式、PWM编码的脉冲宽度等
/// </remarks>
public Dictionary<string, object> Parameters { get; set; } = new Dictionary<string, object>();
/// <summary>
/// 判断当前编码是否与指定编码匹配
/// </summary>
/// <param name="other">要比较的编码</param>
/// <returns>如果匹配返回true否则返回false</returns>
/// <remarks>
/// 匹配规则:
/// - 编码类型必须相同
/// - 编码值必须相同
/// 不考虑附加参数的匹配
/// </remarks>
public bool Matches(LaserCode? other)
{
if (other == null)
return false;
return CodeType == other.CodeType && CodeValue == other.CodeValue;
}
}
}