C语言波形实现三角波和正弦波
Posted XXX_UUU_XXX
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言波形实现三角波和正弦波相关的知识,希望对你有一定的参考价值。
方波
方波波形类似高低电平,所以设置合适的延时时间和高低电平值即可实现方波。
正弦波
#include "math.h"
#define PI 3.141592653
float WaveMin = 1.0f; // 波形最小峰值
float WaveMax = 5.0f; // 波形最大峰值
float Amplitude = 1.0f; // 幅值
float PeriodSin = 100.0f; // 正弦波周期
float Horizontal = 0.0f; // 水平位移
float Vertical = 0.0f; // 垂直位移
// y = A * sin( w * x + h ) + v
// = A * sin( 2 * PI / T * x + h ) + v
float sin_wave( void )
static float TimeCnt = 0;
Amplitude = ( ( WaveMin + WaveMax ) / 2.0f - WaveMin );
Vertical = ( WaveMin + WaveMax ) / 2.0f;
float SinData = Amplitude * sin( 2 * PI / Period * TimeCnt + Horizontal ) + Vertical;
TimeCnt++;
return SinData;
三角波
#define False 0
#define True 1
float WaveMin = 1.0f; // 波形最小峰值
float WaveMax = 5.0f; // 波形最大峰值
float Step = 10.0f; // 每周期递增步长
float PeriodTriangle = 100.0f; // 三角波周期
float WaveStart = 1.0f; // 波形开始值
float WaveStop = 5.0f; // 波形结束值
float WaveCurrent = 0.0f; // 当前波形值
float triangle_wave( void )
static uint16_t TimeCnt = 0;
static uint8_t flag = False;
// 波形递增
if( WaveCurrent < WaveStart && flag == False )
if( ++TimeCnt < PeriodTriangle )
WaveCurrent = WaveStart;
else
TimeCnt = 0;
WaveCurrent += Step;
WaveStart = WaveCurrent;
// 波形递减
else
flag = True;
if( ++TimeCnt < PeriodTriangle )
WaveCurrent = WaveStop;
else
TimeCnt = 0;
WaveCurrent -= Step;
WaveStop = WaveCurrent;
if( WaveCurrent < WaveMin )
flag = False;
WaveStart = WaveMax;
WaveStop = WaveMin;
return WaveCurrent;
以上是关于C语言波形实现三角波和正弦波的主要内容,如果未能解决你的问题,请参考以下文章