C语言及gnuplot任意波形产生及作图-以三角波为例

2023-11-22 20:32

本文主要是介绍C语言及gnuplot任意波形产生及作图-以三角波为例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

以三角波为例。首先编制计算周期三角波的C函数。要求:三角波参数与正弦函数相似,标准周期为 2 π 2\pi 2π,占空比 p p p(上升时间比周期)表示三角波上升下降段的比例, p = 0.5 p=0.5 p=0.5为上升下降对称的。在 [ 0 , 2 π × p ] [0, 2\pi \times p] [0,2π×p]上为上升沿,在 2 π × p , 2 π 2\pi \times p, 2\pi 2π×p,2π区间为下降沿。

公式:

上升沿: y = 2 p t − 1 y=\frac{2}{p}t-1 y=p2t1

下降沿: y = − 2 2 π − p t + 2 π + p 2 π − p y=-\frac{2}{2\pi -p}t+\frac{2\pi +p}{2\pi -p} y=2πp2t+2πp2π+p

只要写出在一个周期内的任意的函数表达式即可产生对应的波形。

三角波函数及测试代码:

//mytrianglewav.c
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define PI 3.14159265double trianglewav(t,p)
double t,p;
{//三角波函数,p:0到1占空比//trianglewav(t,p)的周期为2pi//返回值在-1到+1间double y;//将t归化于0到2pi区间if(t>=0)t=(t/(2*PI)-(int)(t/(2*PI)))*2*PI;elset=2*PI+(t/(2*PI)-(int)(t/(2*PI)))*2*PI;//检查占空比参数范围是否合法if(p<0 | p>1){printf("fun trianglewav error: p<0 or p>1\n");exit(0);}p=p*2*PI;//当p为0或2*pi时的近似处理p=(p-2*PI==0)?2*PI-1e-10:p;p=(p==0)?1e-10:p;if(t<p){y=2*t/p-1;//计算上升沿}else{y=-2*t/(2*PI-p)+(2*PI+p)/(2*PI-p);//下降沿}return y;
}main(int argc, char *argv[])
{double y,t,p=0.5,f=1;int i;if(argc==3){f=atof(argv[1]);p=atof(argv[2]);}for(i=0; i<2*8000; i++){t=-1+1.0/8000*i;y=trianglewav(2*PI*f*t,p);printf("%f\t%f\n",t,y);}
}

编译执行(产生20Hz,占比0.5的三角波)

这里演示如何直接在gnuplot命令窗中执行编译并作图。(用“!”加gcc编译命令即可。)

gnuplot> !gcc mytrianglewav.c
gnuplot> plot  [-0.1:0.1] [-2:2] "<a.exe 20 0.5"  w lp pt 6 lc 3
gnuplot>

结果:

在这里插入图片描述

gnuplot> plot  [-0.1:0.1] [-2:2] "<a.exe 20 1"  w lp pt 6 lc 3

在这里插入图片描述

gnuplot> plot  [-0.1:0.1] [-2:2] "<a.exe 20 0"  w lp pt 6 lc 3

在这里插入图片描述

 gnuplot> plot  [-0.1:0.1] [-2:2] "<a.exe 10 0.2"  w lp pt 6 lc 3

在这里插入图片描述

这篇关于C语言及gnuplot任意波形产生及作图-以三角波为例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/412744

相关文章

GO语言短变量声明的实现示例

《GO语言短变量声明的实现示例》在Go语言中,短变量声明是一种简洁的变量声明方式,使用:=运算符,可以自动推断变量类型,下面就来具体介绍一下如何使用,感兴趣的可以了解一下... 目录基本语法功能特点与var的区别适用场景注意事项基本语法variableName := value功能特点1、自动类型推

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作

Go语言使用Gin处理路由参数和查询参数

《Go语言使用Gin处理路由参数和查询参数》在WebAPI开发中,处理路由参数(PathParameter)和查询参数(QueryParameter)是非常常见的需求,下面我们就来看看Go语言... 目录一、路由参数 vs 查询参数二、Gin 获取路由参数和查询参数三、示例代码四、运行与测试1. 测试编程路

java -jar example.jar 产生的日志输出到指定文件的方法

《java-jarexample.jar产生的日志输出到指定文件的方法》这篇文章给大家介绍java-jarexample.jar产生的日志输出到指定文件的方法,本文给大家介绍的非常详细,对大家的... 目录怎么让 Java -jar example.jar 产生的日志输出到指定文件一、方法1:使用重定向1、

Go语言使用net/http构建一个RESTful API的示例代码

《Go语言使用net/http构建一个RESTfulAPI的示例代码》Go的标准库net/http提供了构建Web服务所需的强大功能,虽然众多第三方框架(如Gin、Echo)已经封装了很多功能,但... 目录引言一、什么是 RESTful API?二、实战目标:用户信息管理 API三、代码实现1. 用户数据

Go语言网络故障诊断与调试技巧

《Go语言网络故障诊断与调试技巧》在分布式系统和微服务架构的浪潮中,网络编程成为系统性能和可靠性的核心支柱,从高并发的API服务到实时通信应用,网络的稳定性直接影响用户体验,本文面向熟悉Go基本语法和... 目录1. 引言2. Go 语言网络编程的优势与特色2.1 简洁高效的标准库2.2 强大的并发模型2.

Go语言使用sync.Mutex实现资源加锁

《Go语言使用sync.Mutex实现资源加锁》数据共享是一把双刃剑,Go语言为我们提供了sync.Mutex,一种最基础也是最常用的加锁方式,用于保证在任意时刻只有一个goroutine能访问共享... 目录一、什么是 Mutex二、为什么需要加锁三、实战案例:并发安全的计数器1. 未加锁示例(存在竞态)

C语言自定义类型之联合和枚举解读

《C语言自定义类型之联合和枚举解读》联合体共享内存,大小由最大成员决定,遵循对齐规则;枚举类型列举可能值,提升可读性和类型安全性,两者在C语言中用于优化内存和程序效率... 目录一、联合体1.1 联合体类型的声明1.2 联合体的特点1.2.1 特点11.2.2 特点21.2.3 特点31.3 联合体的大小1

Go语言使用select监听多个channel的示例详解

《Go语言使用select监听多个channel的示例详解》本文将聚焦Go并发中的一个强力工具,select,这篇文章将通过实际案例学习如何优雅地监听多个Channel,实现多任务处理、超时控制和非阻... 目录一、前言:为什么要使用select二、实战目标三、案例代码:监听两个任务结果和超时四、运行示例五