@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
133 lines • 6.15 kB
TypeScript
import type { isValidFloat32Array, ProcessInput, ScanSegment, SpectrumConfig, SpectrumData, SpectrumOutputData, TimestampedFloat32Array } from './types';
export default class SpectrumAnalyzer {
protected config: Required<Omit<SpectrumConfig, 'segments' | 'bandwidthConfig' | 'onSpectrumUpdate'>>;
private segments;
protected antennaFactorData: Float32Array;
protected antennaFactorSwitch: boolean;
protected realData: TimestampedFloat32Array;
protected maxData: isValidFloat32Array;
protected minData: isValidFloat32Array;
protected avgData: isValidFloat32Array;
protected waterfallData: TimestampedFloat32Array[];
protected srcIndexCache: Uint32Array;
protected realOutputData: Float32Array;
protected waterfallOutputData: TimestampedFloat32Array[];
protected scanProgress: number;
protected lastIndex: number;
protected processTimes: number;
protected lastProcessTime: number;
private readonly onSpectrumUpdate?;
constructor(config: Partial<SpectrumConfig>);
/**
* 处理输入数据,包括验证、拼接、统计、采样等操作。
* @param {ProcessInput} input - 输入数据,包含数据、时间戳、分段偏移和偏移量。
*/
process({ data, timestamp, segmentOffset, offset, }: 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 {TimestampedFloat32Array[]} data - 瀑布图数据数组。
*/
setWaterfallData(newWaterfallData: TimestampedFloat32Array[]): void;
/**
* 设置实时值数据,用于从外部导入已缓存的实时值数据。
* @param {TimestampedFloat32Array} data - 实时值数据。
*/
setRealData(data: TimestampedFloat32Array): void;
/**
* 设置最大值数据,用于从外部导入已缓存的最大值数据。
* @param {Float32Array} data - 最大值数据。
*/
setMaxData(data: Float32Array): void;
/**
* 重置频谱分析器的状态,包括数据和进度。
*/
reset(): void;
/**
* 获取当前频谱分析器的缓存数据。
* @returns {Readonly<SpectrumOutputData>} - 包含实时数据、最大值、最小值、平均值、瀑布图数据和处理次数的对象。
*/
getData(): Readonly<SpectrumOutputData>;
/**
* 获取频谱分析器的性能指标,包括处理时间、数据点数、瀑布图帧数、初始化状态和内存使用情况。
* @returns {Readonly<Record<string, number | boolean>>} - 包含性能指标的对象。
*/
getPerformanceMetrics(): Readonly<Record<string, number | boolean>>;
/**
* 更新采样范围,并重新输出数据。
* @param {number} start - 采样范围的起始位置。
* @param {number} end - 采样范围的结束位置。
* @returns {Uint32Array} - 输出值对应的原始数据索引数组。
*/
updateSamplingRange(start: number, end: number): Uint32Array;
/**
* 对数据进行重采样,生成频谱输出数据。
* @returns {Readonly<SpectrumOutputData>} - 包含重采样后的实时数据、最大值、最小值和平均值的对象。
*/
protected resampleDataSeries(): Readonly<SpectrumOutputData>;
/**
* 对瀑布图输出数据进行重采样。
*/
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 isAllValid;
/**
* 通知频谱数据更新,调用回调函数。
* @param {SpectrumOutputData} processedData - 处理后的频谱数据。
*/
private notifySpectrumUpdate;
/**
* 计算当前频谱分析器的内存使用情况。
* @returns {number} - 内存使用量(字节)。
*/
private calculateMemoryUsage;
/**
* 获取输出数据,根据配置的输出范围截取数据。
* @param {TimestampedFloat32Array} [data] - 可选的输入数据,默认为实时数据。
* @returns {Readonly<TimestampedFloat32Array>} - 输出数据。
*/
private getOutputData;
/**
* 获取所有原始数据,包括实时数据、最大值、最小值、平均值和瀑布图数据。
* 注意:返回的是原始数据的引用,修改这些数据会直接影响分析器内部状态。
*/
getAllRawData(): Readonly<SpectrumData>;
}
//# sourceMappingURL=index.d.ts.map