@rfkit/spectrum-analyzer
Version:
A high-performance spectrum analyzer library for RF signal processing, supporting real-time spectrum analysis, waterfall display, and multi-segment frequency scanning
252 lines • 11.1 kB
TypeScript
import type { isValidFloat32Array, ProcessInput, ProcessingOptions, ScanSegment, SpectrumConfig, SpectrumOutputData, TemplateOverData, TimestampedFloat32Array } from './types';
import { ExtraDataMode } from './types';
export default class SpectrumAnalyzer {
config: Required<Omit<SpectrumConfig, 'segments' | 'bandwidthConfig' | 'onSpectrumUpdate'>>;
private segments;
antennaFactorData: Float32Array;
antennaFactorSwitch: boolean;
protected realData: TimestampedFloat32Array;
protected maxData: isValidFloat32Array;
protected minData: isValidFloat32Array;
protected avgData: isValidFloat32Array;
protected templateData: Float32Array;
protected occupancyData: Float32Array;
protected backgroundNoiseData: Float32Array;
protected waterfallData: TimestampedFloat32Array[];
srcIndexCache: Uint32Array;
protected realOutputData: Float32Array;
protected maxOutputData: Float32Array;
protected minOutputData: Float32Array;
protected avgOutputData: Float32Array;
protected templateOutputData: Float32Array;
protected occupancyOutputData: Float32Array;
protected backgroundNoiseOutputData: Float32Array;
protected waterfallOutputData: TimestampedFloat32Array[];
protected scanProgress: number;
protected lastIndex: number;
protected processTimes: number;
protected lastProcessTime: number;
protected cachedExceedingDatas: TemplateOverData[];
protected fluorescenceData: Uint32Array;
protected fluorescenceMaxCount: number;
protected fluorescenceUpdateCounter: number;
extraData: Record<string, Float32Array>;
protected extraOutputData: Record<string, Float32Array>;
private pendingDataFlags;
private hasPendingData;
private hasProcessedData;
private isProcessing;
private readonly onSpectrumUpdate?;
constructor(config: Partial<SpectrumConfig>);
/**
* 处理输入数据,包括验证、拼接、统计、采样等操作。
* @param {ProcessInput} input - 输入数据,包含数据、时间戳、分段偏移和偏移量。
*/
process({ data, timestamp, segmentOffset, offset, fluorescenceData, fluorescenceMaxCount }: ProcessInput): void;
/**
* 初始化扫描分段信息,并更新最大点数。
* @param {ScanSegment[]} segments - 扫描分段信息数组。
*/
initializeSegments(segments: ScanSegment[]): void;
/**
* 设置天线因子数据,并根据开关状态重新输出数据。
* @param {Float32Array} data - 天线因子数据,默认为根据最大点数创建的数组。
*/
setAntennaFactor(d: Float32Array | number[]): void;
/**
* 设置天线因子开关,并根据开关状态重新输出数据。
* @param {boolean} newAntennaFactorSwitch - 新的天线因子开关状态。
*/
setAntennaFactorSwitch(newAntennaFactorSwitch: boolean): void;
/**
* 动态更新处理选项
* @param {Partial<ProcessingOptions>} next - 要更新的处理选项
*
* 语义:
* - enableMetrics 从 false→true 后从后续帧开始累计;true→false 立即停止累计
* - enableFluorescence 同理
* - enablePeakStats 同理,控制峰值检测开关
*
* 注意:此方法会进行浅比较,只有值真正变化时才会更新配置和通知数据更新。
*/
updateProcessing(next: Partial<ProcessingOptions>): void;
/**
* 清空统计指标数据 (Max/Min/Avg)
* 将相关数组重置为初始值,并通知更新。
*/
clearMetricsData(): void;
/**
* 初始化 metrics 缓冲区(max/min/avg 及其输出缓存)。
* 仅负责分配内存,不负责填充初始值。
*/
private allocateMetricsBuffers;
/**
* 清空 metrics 缓冲区(max/min/avg 及其输出缓存),并重置 allValid 标记。
* 不会调整数组长度。
*/
private clearMetricsBuffers;
/**
* 设置瀑布图数据,用于从外部导入已缓存的瀑布图数据。
* @param {TimestampedFloat32Array[]} data - 瀑布图数据数组。
*/
setWaterfallData(newWaterfallData: TimestampedFloat32Array[]): void;
/**
* 设置荧光累积数据,用于传入预先计算好的荧光累积数据。
* @param {Uint32Array} fluorescenceData - 荧光累积数据
* @param {number} fluorescenceMaxCount - 荧光数据中的最大计数值
*/
setFluorescenceData(fluorescenceData: Uint32Array, fluorescenceMaxCount: number): void;
/**
* 设置实时值数据,用于从外部导入已缓存的实时值数据。
* @param {TimestampedFloat32Array} data - 实时值数据。
*/
setRealData(data: TimestampedFloat32Array): void;
/**
* 设置最大值数据,用于从外部导入已缓存的最大值数据。
* @param {Float32Array} data - 最大值数据。
*/
setMaxData(data: Float32Array): void;
/**
* 设置最小值数据,用于从外部导入已缓存的最小值数据。
* @param {Float32Array} data - 最小值数据。
*/
setMinData(data: Float32Array): void;
/**
* 设置平均值数据,用于从外部导入已缓存的平均值数据。
* @param {Float32Array} data - 平均值数据。
*/
setAvgData(data: Float32Array): void;
/**
* 设置占用度数据
* @param {Float32Array | number[]} data - 占用度数据
*/
setOccupancyData(data?: Float32Array | number[]): void;
/**
* 重置频谱分析器的状态,包括数据和进度。
*/
/**
* 设置额外数据
* @param data 数据对象
* @param mode 操作模式:ExtraDataMode.REPLACE(替换全部), ExtraDataMode.MERGE(合并), ExtraDataMode.UPDATE(更新已存在的键)
*/
setExtraData(data: Record<string, Float32Array | number[]> | null, mode?: ExtraDataMode): void;
reset(preserveProcessedFlag?: boolean): void;
/**
* 获取频谱分析器的性能指标,包括处理时间、数据点数、瀑布图帧数、初始化状态和内存使用情况。
* @returns {Readonly<Record<string, number | boolean>>} - 包含性能指标的对象。
*/
getPerformanceMetrics(): Readonly<Record<string, number | boolean>>;
/**
* 获取当前实时数据的峰值统计信息
* @returns {PeakStats | undefined} - 峰值统计信息,如果未启用峰值检测则返回 undefined
*/
getPeakStats(): import('./types').PeakStats | undefined;
/**
* 更新采样范围,并重新输出数据。
* @param {number} start - 采样范围的起始位置。
* @param {number} end - 采样范围的结束位置。
* @returns {Uint32Array} - 输出值对应的原始数据索引数组。
*/
updateSamplingRange(start: number, end: number): Uint32Array;
/**
* 设置模板数据
* @param {Float32Array | number[]} data - 模板数据
* @param {number} templateTolerance - 可选,模板超出计算的容差值
*/
setTemplateData(data?: Float32Array | number[], templateTolerance?: number): void;
/**
* 设置背景噪声数据
* @param {Float32Array | number[]} data - 背景噪声数据
*/
setBackgroundNoiseData(data?: Float32Array | number[]): void;
/**
* 统一的超出数据段计算和缓存更新方法
* @param forceFullCalculation - 是否强制进行全量计算
* @param incrementalRange - 增量计算的范围
* @returns 计算得到的超出数据段
*/
private updateTemplateOverData;
/**
* 对数据进行重采样,生成频谱输出数据。
* @returns {Partial<SpectrumOutputData>} - 包含重采样后的实时数据、最大值、最小值和平均值的对象。
*/
protected resampleDataSeries(): Partial<SpectrumOutputData>;
/**
* 处理 extraData 的重采样,生成 extraOutputData
* 利用现有的 srcIndexCache 进行高效重采样
*/
/**
* 对瀑布图输出数据进行重采样。
*/
protected resampleWaterfallOutputData(): void;
/**
* 更新瀑布图数据,包括添加新数据和移除旧数据。
* @param {TimestampedFloat32Array} data - 输入的实时数据。
* @param {TimestampedFloat32Array} outputData - 输出的实时数据。
*/
protected updateWaterfallData(data: TimestampedFloat32Array, outputData: TimestampedFloat32Array): void;
/**
* 更新最大点数,并重置。
* @param {number} maxPoints - 新的最大点数。
*/
protected updateMaxPoints(maxPoints: number): void;
/**
* 验证输入数据的索引是否在有效范围内。
* @param {Float32Array} data - 输入数据。
* @param {number} index - 数据的起始索引。
*/
protected validateInput(data: Float32Array, index: number): void;
/**
* 统计计算,处理数据点,更新统计值(最大值、最小值、平均值)。
* @param {Float32Array} data - 输入数据。
* @param {number} index - 数据的起始索引。
* @param {boolean} isOver - 数据是否处理完成。
*/
private processDataPoints;
/**
* 更新荧光谱统计数据
*/
private updateFluorescenceStats;
/**
* 设置待处理标记并更新快速检查标记
*/
private setPendingFlag;
/**
* 重采样单个数据数组(统一的重采样逻辑,避免代码重复)
*/
private resampleSingleData;
/**
* 处理待处理的数据(在 srcIndexCache 生成后)
* 用于解决数据设置和实时数据处理的时序问题
*/
private processPendingData;
/**
* 通知频谱数据更新,调用回调函数。
* @param {SpectrumOutputData} processedData - 处理后的频谱数据。
*/
private notifySpectrumUpdate;
/**
* 计算当前频谱分析器的内存使用情况。
* @returns {number} - 内存使用量(字节)。
*/
private calculateMemoryUsage;
/**
* 获取输出数据,根据配置的输出范围截取数据。
* @param {TimestampedFloat32Array} [data] - 可选的输入数据,默认为实时数据。
* @returns {Readonly<TimestampedFloat32Array>} - 输出数据。
*/
private getOutputData;
/**
* 获取指定范围的荧光谱数据。
* @param {Map<number, number>[] | undefined} data - 荧光谱数据,如果未提供则使用实例的荧光谱数据。
* @returns {Map<number, number>[] | undefined} - 输出范围内的荧光谱数据。
*/
private getFluorescenceOutputData;
/**
* 获取所有原始数据,包括实时数据、最大值、最小值、平均值、模板数据、背景噪声数据和瀑布图数据。
* 注意:返回的是输出数据(重采样后),而不是输入数据。
* 返回的 realData 长度为 outputPoints,与 peaks 的 index 范围一致。
*/
getAllRawData(): Readonly<SpectrumOutputData>;
}
//# sourceMappingURL=index.d.ts.map