[实战]调频三角波和锯齿波信号生成(完整C代码)

C语言生成调频三角波和锯齿波信号

调频三角波和锯齿波信号生成

不依赖任何第三方库,用C语言生成调频三角波以及锯齿波信号,并使用python进行数据频谱分析,确认C语言实现的正确性。
话不多说,实战开始。

调频三角波和锯齿波信号原理

三角波信号
  • 原理:由线性上升段和线性下降段组成,形成三角形周期波形
  • 数学表达式
    ( x(t) = \begin{cases}
    \frac{2A}{T}(t - nT) & \text{上升段} \
    A - \frac{2A}{T}(t - nT - \frac{T}{2}) & \text{下降段}
    \end{cases} )
  • 特点:奇次谐波含量丰富,谐波幅度以 ( 1/n^2 ) 衰减
锯齿波信号
  • 原理:线性上升后瞬时复位(正向锯齿波)或线性下降后瞬时复位(反向锯齿波)
  • 数学表达式
    ( x(t) = 2A \left( \frac{t}{T} - \text{floor}\left(\frac{t}{T} + \frac{1}{2}\right) \right) )
  • 特点:包含所有整数次谐波,幅度以 ( 1/n ) 衰减

常见可配置参数

参数 描述 典型值
振幅 信号峰值幅度 0.1-5.0
频率 基础频率(Hz) 1-10000
采样率 采样点数/秒 44100
时长 信号持续时间(s) 0.1-10
波形类型 0=三角波, 1=锯齿波 0/1
相位偏移 波形起始相位(度) 0-360
直流偏移 信号垂直偏移量 -1.0-1.0
对称度 三角波上升/下降比 0.1-0.9
方向 锯齿波方向(0=下降,1=上升) 0/1

C语言实现 (wave_generator.c)

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

typedef struct {
   
   
    float amplitude;     // 振幅
    float frequency;     // 频率 (Hz)
    float sample_rate;   // 采样率 (Hz)
    float duration;      // 时长 (秒)
    int wave_type;       // 0=三角波, 1=锯齿波
    float phase_offset;  // 相位偏移 (度)
    float dc_offset;     // 直流偏移
    float symmetry;      // 三角波对称度 (0.1-0.9)
    int direction;       // 锯齿波方向 (0=下降,1=上升)
} WaveParams;

void generate_waveform(const char* filename, WaveParams params) {
   
   
    // 计算总采样点数
    int total_samples = (int)(params.duration * params.sample_rate);
    float* buffer = (float*)malloc(total_samples * sizeof(float));
    
    // 相位偏移转换 (度 -> 弧度)
    float phase_rad = params.phase_offset * M_PI / 180.0f;
    
    for (int i = 0; i < total_samples; i++) {
   
   
        float t = i / params.sample_rate;
        float phase = 2 * M_PI * params.frequency * t + phase_rad;
        float value;
        
        if (params.wave_type == 0) {
   
    // 三角波
            float mod_phase = fmod(phase, 2 * M_PI) / (2 * M_PI);
            if (mod_phase < params.symmetry) {
   
   
                value = 2 * mod_phase / params
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客不孤独

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值