调频三角波和锯齿波信号生成
文章目录
不依赖任何第三方库,用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
C语言生成调频三角波和锯齿波信号

最低0.47元/天 解锁文章
605

被折叠的 条评论
为什么被折叠?



