/// <summary>
/// 生成正弦信号
/// </summary>
/// <param name="f0">frequency in Hz 模拟信号的频率, 单位Hz</param>
/// <param name="phi">initial phase 初始相位 (0-2π)</param>
/// <param name="A">amplitude 振幅</param>
/// <param name="fs"> sample rate 采样频率(个/秒)</param>
/// <param name="time">生成x秒的数据</param>
/// <returns>x秒的正弦信号</returns>
public float[] GenerateSinData(float f0, float phi, float A, int fs, int time)
{
float ffs = (float)fs;
int N = fs * time;
float T = 1 / ffs; //T是 采样周期, 两个样本之间的间隔时长
var nn = new float[N]; // Math.arange(N); // [0,1,..., N-1]
for (int i = 0; i < nn.Length; i++)
{
nn[i] = (float)(A * Math.Sin(2 * f0 * Math.PI * i * T + phi));
}
return nn;
}
弧度制可能不方便使用, 再加上一个角度制的.
/// <summary>
/// 生成正弦信号(角度360度制)
/// </summary>
/// <param name="f0">frequency in Hz 模拟频率, 单位Hz</param>
/// <param name="phi">initial phase 初始相位(360角度制)</param>
/// <param name="A">amplitude 振幅</param>
/// <param name="fs"> sample rate 采样频率(个/秒)</param>
/// <param name="time">生成的样本时长</param>
/// <returns>时间长度为time的正弦信号</returns>
public float[] GenerateSinData360(float f0, float a360, float A, int fs, int time)
{
var 弧度 = a360 * Math.PI / 180;
float ffs = (float)fs;
int N = fs * time;
float T = 1 / ffs; //采样频率,也称为采样速度或者采样率,定义了单位时间内从连续信号中提取并组成离散信号的采样个数
var nn = new float[N]; // Math.arange(N); // [0,1,..., N-1]
for (int i = 0; i < nn.Length; i++)
{
nn[i] = (float)(A * Math.Sin(2 * f0 * Math.PI * i * T + 弧度));
}
return nn;
}