You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Math.NET Numerics实现模拟电网频率信号的正弦波合成问询

使用Math.NET Numerics合成电网频率模拟信号生成器

核心思路拆解

电网模拟信号的核心是基波+谐波+噪声:以50Hz/60Hz为基频,叠加少量奇次谐波(电网常见干扰),最后加入随机噪声模拟真实波动。Math.NET的Generate.Sinusoidal可以生成单频正弦序列,我们只需要把多个分量叠加即可。

分步实现代码

1. 先定义关键配置参数

把可调整的参数集中定义,方便后续修改适配不同场景:

using MathNet.Numerics;
using MathNet.Numerics.Distributions;

// 采样与信号核心参数
const double SamplingRate = 1000; // 采样率(Hz),决定信号分辨率
const double FundamentalFreq = 50; // 电网基频,可改为60Hz
const double NoiseLevel = 0.05; // 噪声幅度,值越大噪声越明显

// 谐波配置:键=谐波次数,值=相对于基波的幅度比例
var HarmonicSettings = new Dictionary<int, double>
{
    {3, 0.1},  // 3次谐波,幅度为基波的10%
    {5, 0.05}, // 5次谐波,幅度为基波的5%
    {7, 0.03}  // 7次谐波,幅度为基波的3%
};

2. 生成单个正弦分量

用Generate.Sinusoidal封装基波和谐波的生成逻辑,保证所有分量的采样步长一致:

// 生成基波序列:幅度1,频率为电网基频
IEnumerable<double> GenerateFundamentalWave()
{
    return Generate.Sinusoidal(SamplingRate, FundamentalFreq, 1.0, 0.0);
}

// 生成指定次数的谐波序列
IEnumerable<double> GenerateHarmonicWave(int harmonicOrder, double amplitudeRatio)
{
    double harmonicFreq = FundamentalFreq * harmonicOrder;
    return Generate.Sinusoidal(SamplingRate, harmonicFreq, amplitudeRatio, 0.0);
}

3. 叠加所有分量并添加噪声

用Zip方法把多个正弦序列的对应采样点相加,再叠加高斯噪声模拟真实波动:

IEnumerable<double> GenerateGridSignal()
{
    // 收集所有需要叠加的信号分量
    var signalComponents = new List<IEnumerable<double>> { GenerateFundamentalWave() };
    foreach (var (order, ampRatio) in HarmonicSettings)
    {
        signalComponents.Add(GenerateHarmonicWave(order, ampRatio));
    }

    // 叠加所有分量:把每个采样点的各分量值相加
    var combinedSignal = signalComponents.Aggregate((prev, next) => 
        prev.Zip(next, (a, b) => a + b));

    // 添加高斯噪声:均值0,标准差为设定的噪声幅度
    var noiseDist = new Normal(0, NoiseLevel);
    return combinedSignal.Select(sample => sample + noiseDist.Sample());
}

4. 调用生成器获取信号

直接迭代生成器即可获取流式的模拟信号,按需取采样点:

// 生成前1000个采样点示例
var simulatedGridSignal = GenerateGridSignal().Take(1000).ToList();

// 可用于后续分析、可视化或数据导出

额外优化提示

  • Generate.Sinusoidal生成的是无限序列,适合流式处理,无需一次性生成全部数据。
  • 谐波的次数和幅度可根据实际电网场景调整,比如工业环境可增加更多高次谐波。
  • 噪声类型可替换:如果需要更贴近真实电网的脉冲噪声,可混合Uniform分布或自定义噪声逻辑。
  • 后续要实现频率偏移时,只需在生成正弦波时动态调整频率参数(比如用缓慢变化的数值代替固定的FundamentalFreq)。

内容的提问来源于stack exchange,提问作者Andrew Matthews

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 21:55:12