前言在信号处理、音频合成、硬件测试等领域生成连续的正弦波是一项基础需求。本文介绍一个实用的C#正弦波生成方法支持相位连续和计数器重置功能。核心代码//正弦波点数计数器每次生成从上次结束点继续 private int _sineCount 0; /// summary /// 生成正弦波 /// /summary /// param nameamplitude幅度/param /// param namepointsPerPeriod每个周期的点数/param /// param namewaveformLength波形长度点数/param /// param namestartPhase起始相位弧度可选默认0/param /// param nameresetPoints重置点数可选达到此点数后重置_sineCount默认-1表示不重置/param /// returns正弦波数组/returns public double[] GenerateSinewave(double amplitude1, int pointsPerPeriod50, int waveformLength500, double startPhase 0, int resetPoints -1) { double[] waveform new double[waveformLength]; for (int i 0; i waveformLength; i) { // 计算当前点的相位起始相位 已运行点数对应的相位 double phase startPhase 2 * Math.PI * _sineCount / pointsPerPeriod; waveform[i] amplitude * Math.Sin(phase); _sineCount; // 检查是否需要重置计数器 if (resetPoints 0 _sineCount resetPoints) { _sineCount 0; } } return waveform; }设计亮点1. 相位连续性通过成员变量_sineCount记录全局点数确保多次调用时波形无缝衔接。第一次调用生成0~499点第二次调用从第500点开始避免相位跳变。2. 灵活的重置机制resetPoints参数控制计数器重置时机-1默认永不重置适合无限连续波形N生成N点后自动归零适合固定长度循环3. 参数化配置参数说明典型值amplitude峰值幅度1.0归一化pointsPerPeriod采样密度50高频/ 1000高精度startPhase初始相位偏移Math.PI/2余弦波使用示例var generator new SineGenerator(); // 生成两段连续的正弦波共1000点 var wave1 generator.GenerateSinewave(waveformLength: 500); var wave2 generator.GenerateSinewave(waveformLength: 500); // 无缝衔接 // 每1000点重置一次循环播放 var cyclicWave generator.GenerateSinewave( waveformLength: 2000, resetPoints: 1000);小结该实现通过简单的状态管理解决了正弦波生成的连续性与可控性问题。代码简洁高效。