1.用C语言产生均匀分布的随机数

(1)功能

产生(a,b)区间上均匀分布的随机数

(2)函数简介

均匀分布函数的概率密度函数为
f(x)={1b−a,a≤x≤b0,其它f(x)=\begin{cases} \frac{1}{b-a} ,a\leq x\leq b\\ 0,其它 \end{cases} f(x)={b−a1​,a≤x≤b0,其它​
通常用U(a,b)表示,

均匀分布的均值为
a+b2\frac{a+b}{2} 2a+b​
方差为
(a−b)212\frac{(a-b)^2}{12} 12(a−b)2​
产生均匀分布的随机数的方法:

混合同余法


f(x)={Xi=(aXi−1+c)(modM)yi=XiMf(x)=\begin{cases}X_i =(aX_{i-1}+c) (mod M)\\ y_i =\frac{X_i}{M}\end{cases} f(x)={Xi​=(aXi−1​+c)(modM)yi​=MXi​​​

采用混合同余法,

产生(0,1)区间上的随机数y_i,通常选取a=2045,c=1,M=2^20;任意给定一个初始值X_(i-1),即可得到一个随机数,
zi=a+(b−a)yiz_i=a+(b-a)y_i zi​=a+(b−a)yi​
产生(a,b)区间上的随机数z_i。使用指针变量*s,使得每次产生的随机数都不一样,只要改变循环的次数,就可以得到任意多个0~1随机数

(3)实现代码

子函数程序(产生随机数)

//a为给定区间的下限 b为给定区间的上限 seed 指针变量,*seed为随机数的种子
double uniform(a,b,seed)
double a,b;
long int *seed;
{double t;
*seed=2045*(*seed+1);
*seed=*seed-(*seed/1048576)*1048576;
t=(*seed)/1048576.0;
t=a+(b-a)*t;
return(t);
}

例:产生50个0到1之间均匀分布的随机数

实现代码

#include "stdio.h"
#include "uniform.c"
main()
{double a,b,x;int i,j;
long int s;
double uniform(double,double,long int *);
a=0.0;
b=1.0;
s=24681;
for(i=0;i<50;i++) //产生50个0到1的随机数{x=uniform(a,b,&s);printf("%d\t%13.7f",i,x);printf("\n");}
}

将产生的数据通过重定向的方法存入一个新的文本文件,并通过读取文本文件画出这些随机数

%编译生成可执行文件uniform1.exe
tcc uniform1.c
%通过重定向的方法另存数据
uniform1.exe > uniform1.txt

%画图
gnuplot
%作出满足均匀分布的随机数的线状图
plot [0:49] [0:1] "uniform1.txt"u 1:2 w l

运行结果

(4)与MATLAB作图对比

MATLAB作图实现代码

%产生一个长度为50的随机信号,该信号在区间[0,1]上均匀分布
clf;
y=rand(1,50);    %在[0,1]上用随机函数rand()产生
plot(y);

运行结果

2.用C语言产生一个调幅波的波形

参考链接:https://blog.csdn.net/shaoyubin999/article/details/82740689

波形数据(时间长度为1秒),并通过gnuplot作出2个被调信号周期上的波形图。

设信号采样率为8000Hz,载波频率为1000Hz,被调信号为100Hz。调制度为0.5,表达式为:
s(t)=(1+0.5cos(2π100t))cos(2π1000t)
s(t)=(1+0.5cos⁡(2π100t))cos⁡(2π1000t)

尝试用最简C代码产生和实现,将1秒内的波形数据(共8000行,每行一个点,分采样时间、采样数值两列,列以制表符TAB隔开。将波形数据直接打印输出到屏幕上。2个周期的被调信号长度为1/50秒,合160采样点。

第一步 产生波形数据

//amdata.c  --第1行:说明文件名
//用于计算AM调幅波数据1秒
#include<stdio.h>
#include<math.h>
#define pi 3.14159265
int main()
{double s,t;int i;      //循环变量for (i=0; i<8000; i++){t=i/8000.0;s=(1+0.5*cos(2*pi*100*t))*cos(2*pi*800*t);//信号的表达式printf("%e\t%e\n",t,s);}
}

第二步:用gnuplot画出数据波形

第一种方法:

先对amdata.c编辑生成amdata.exe,然后调用

画出其点状图

实现代码(在.c文件所在的路径下操作)

tcc amdate.cgnuplotplot [0:(1/50.0)] [-2:2] "<amdata.exe" u 1:2 w p

其中,[0:(1/50.0)]定义了横坐标的范围,[-2:2]是纵坐标的显示范围,u 1:2表示使用数据文件的1,2列数据,w p表示使用点作图。

运行结果

画出其线状图

实现代码

plot [0:(1/50.0)] [-2:2] "<amdata.exe" u 1:2 w l

其中,[0:(1/50.0)]定义了横坐标的范围,[-2:2]是纵坐标的显示范围,u 1:2表示使用数据文件的1,2列数据,w l表示使用折线作图。

运行结果

第二种方法:

通过重定向的方法生成数据文件,然后调用数据文件作图

实现代码

amdata.exe > amdata.txtgnuplotplot [0:(1/50.0)] [-2:2] "amdata.txt" u 1:2 w l

运行结果

C语言进阶——使用C语言与gnuplot结合画一些波形相关推荐

  1. 【C语言进阶】C语言程序设计:动态通讯录(顺序表实现)

    目录 动态通讯录的实现 一.实验的目的和意义 二.实验内容描述 三.功能描述 四.数据结构 1.三大模块 2.结构设计 3.动态开辟 4.文件操作 5.主要函数 五.流程图及模块算法 1.Contac ...

  2. 【C语言进阶】C语言实现通讯录

    目录 一.引言 二.如何实现通讯录 1.通讯录要求 2.创建主菜单 3.初步设置主函数 4.创建通讯录 5.初始化通讯录 6.case 1(增加联系人) 7.case 5(显示通讯录中的信息) 8.c ...

  3. c语言进阶.pdf,C语言程序设计进阶:文件.pdf

    格式化输⼊输出 格式化的输⼊输出 • printf • %[flags][width][.prec][hlL]type • scanf • %[flag]type %[flags][width][.prec ...

  4. 最新C语言进阶实战(完整)

    C语言进阶视频 C语言进阶视频 C语言进阶视频 下载地址:百度网盘

  5. ggplot2箱式图两两比较_R语言进阶笔记2 | 长数据与ggplot2

    1. 长数据是什么鬼? 之前介绍了如何将多个性状的箱线图放在一个图上,比如learnasreml包中的fm数据,它有h1~h5五年的株高数据,想对它进行作图. 「数据预览:」 > library ...

  6. C语言进阶深度学习目录表

    学习交流加(可免费帮忙下载CSDN资源): 个人微信(进微信群加): LyyCoder 学习交流资源分享qq群1(已满): 962535112 学习交流资源分享qq群2(已满): 780902027 ...

  7. 【C语言进阶深度学习记录】三十八 C/C++语言中的函数声明与函数定义

    文章目录 1 函数的声明和定义 1.1 代码分析 2 总结 1 函数的声明和定义 声明的意义在于告诉编译器程序单元的存在.只是告诉编译器它存在但是不在声明这里定义,有可能在当前文件中的其他地方或者其他 ...

  8. 【C语言进阶深度学习记录】三十五 程序中的堆、栈以及静态存储区(数据区)

    学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 在我之前学习底层的知识的时候,也写过相关的内容.可以对比的学习:[软 ...

  9. 【C语言进阶深度学习记录】二十六 C语言中的字符串与字符数组的详细分析

    之前有一篇文章是学习了字符和字符串的,可以与之结合学习:[C语言进阶深度学习记录]十二 C语言中的:字符和字符串 文章目录 1 字符串的概念 1.1 字符串与字符数组 1.2 字符数组与字符串代码分析 ...

最新文章

  1. [C++程序语言设计笔记一]面向对象编程抽象,继承,重写基本介绍
  2. 系统优化怎么做-SQL优化
  3. 利用生物视觉机制提高神经网络的对抗鲁棒性 | NeurIPS 2020
  4. filezilla 设置filezilla使用明文密码_详解WordPress使用FTP上传主题和插件
  5. mysql怎么删除唯一索引_mysql删除唯一索引
  6. 个人微信订阅号自定义菜单空白
  7. Windows 服务(附服务开发辅助工具)
  8. oracle错误代码12516,ORA-12516错误解决
  9. IDEA创建工程时 报错 Initialization failed for 'https://start.spring.io'
  10. 全面质量管理体系方案
  11. 移动通信发展史及原理学习
  12. 【Axure PR原型模板】微信公众小程序手机移动端高保真交互原型
  13. confluence 制作流程图_Sketch制作交互流程图,哪种工具最高效?
  14. 浅谈cookie中的SameSite属性
  15. 第十七章、程序管理与 SELinux 初探
  16. 趣店PHP面经_趣店2018秋招笔试题目
  17. oracle 12c 关闭,oracle 12c的启动与关闭
  18. WZOI-261疯狂吃鸡腿2
  19. 如何得到满意的好答案
  20. Yolov3,v4,v5区别

热门文章

  1. 错误代码:1120当前Hsql数据库已被另一线程锁定
  2. MySql优化神器 Explain工具介绍
  3. 解决 GitHub 拉取代码网速慢的问题
  4. Idea在debug时打上断点没有用 Skipped breakpoint at ... because it happened inside debugger evaluation
  5. 虎牙改名字服务器升级维护中,王一博“虎牙直播”被占id,无奈改了名字,新名字却被吐槽...
  6. 【ICPC 2021网络赛2】The 2021 ICPC Asia Regionals Online Contest (II)签到题5题
  7. 2020 年百度之星·程序设计大赛 - 初赛一 GPA DFS深搜
  8. C++奥赛一本通贪心题解
  9. NYOJ324 - 猴子吃桃问题
  10. linux ssh客户端_Linux终端连接Linux服务器