C语言实现信号打包成二进制文件并在Matlab中读取并画图(VS版)
来源:互联网 发布:中华民族伟大复兴 知乎 编辑:程序博客网 时间:2024/05/22 00:11
C语言实现信号打包成二进制文件并在Matlab中读取并画图(VS版)
前些天老师布置了一道作业:在main.cpp里面生成了两个信号s1和s2,将这两个信号的数据用二进制形式写到文件signal.dat里面,然后用Matlab从该文件中读取信号的数据,将两信号画在一张图中
main.cpp
#include< vector >
using namespace std;
int main()
{
int N = 100;double t;vector<double> s1(N), s2(N); //定义两个大小为100的向量数组for(int i = 0; i < N; i ++) { t = i * 0.1; s1[i] = t * t - 2 * t; s2[i] = - t * t + 2 * t;}system("pause");
}
老师已经在main.cpp中用向量定义了两个数组s1,s2用于储存信号,接下来要做的工作就是把两个数组写入二进制文件中。首先先学习一下两个重要函数:
fread函数和fwrite函数
1.函数功能
用来读写一个数据块。
2.一般调用形式
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
3.说明
(1)buffer:是一个指针,对fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址。
(2)size:要读写的字节数;
(3)count:要进行读写多少个size字节的数据项;
(4)fp:文件型指针。
FILE *fp = NULL;errno_t err;const char *filename1 = "signal.dat"; //定义二进制存放处err = fopen_s(&fp,filename1, "wb"); //使用fopen_s()函数以wb形式打开文件if (fp == NULL){ printf("无法打开文件!"); return 0;}fwrite(s1, sizeof(s1), 1, fp); //写入信号s1fwrite(s2, sizeof(s2), 1, fp); //写入信号s2fclose(fp); //关闭数据流,防止数据丢失
此次需要主要的地方是在VS编辑器中fopen()函数是不安全的,编辑器不提倡使用,而是改用更加安全的fopen_s()函数。在定义二进制文件地址时可以是一个没有该文件的地址,在运行程序时将自动生成。最后需要关闭数据流fp。下面附上fopen_s()函数第三个参数定义:
r 打开只读文件,该文件必须存在。
r+ 打开可读写的文件,该文件必须存在。
rb+ 读写打开一个二进制文件,只允许读写数据。
rt+ 读写打开一个文本文件,允许读和写。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
wb 只写打开或新建一个二进制文件;只允许写数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。
wt+ 读写打开或着建立一个文本文件;允许读写。
at+ 读写打开一个文本文件,允许读或在文本末追加数据。
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
在完成上述操作后,信号写入二进制文件就已经完成。接下来是Matlab读取二进制文件了。
首先使用fopen(‘文件地址’,’读取模式’);打开二进制文件,使用fread()函数读取该文件,下面为函数介绍
fread函数可以读取二进制文件的数据,并将数据存入矩阵。其调用格式为:
[A,COUNT]=fread(fid,size,precision)
说明:其中A是用于存放读取数据的矩阵、COUNT是返回所读取的数据元素个数、fid为文件句柄、size为可选项,若不选用则读取整个文件内容;若选用则它的值可以是下列值:N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)。precision用于控制所写数据的精度,其形式与fwrite函数相同。
下面为Matlab代码:
fip=fopen(‘文件地址’,’读取模式’);
[Array_2D,num]=fread(fip,[100,2],’double’);%inf表示读取文件中的所有数据,[M,N]表示将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中
fclose(fip);
plot(Array_2D);
下面为最终效果图
第一次写博客,望包涵,谢谢支持!
阅读全文
1 0
- C语言实现信号打包成二进制文件并在Matlab中读取并画图(VS版)
- 在matlab中读取二进制文件
- iOS画图 在控件中画图,并实现清理
- matlab写入二进制文件与C语言读取二进制文件
- c#+oracle实现读取图片并显示在picturebox中
- MATLAB脚本中画图并自动保存
- (控制)把SIMULINK转成C语言并在VS中调用
- C语言二进制文件读取
- C语言读取二进制文件
- C & MATLAB语言实现信号的DFT
- C语言实现myql中存取二进制文件
- 从磁盘读取二进制文件并打印成汉字
- C语言 二进制文件的读取
- C语言二进制文件读取解析
- 在Linux中编译汇编文件并生成bin二进制文件
- 本地读取excel并打包成zip
- 如何把位图读入内存中并显示?实现从打包文件中读取bmp文件并显示!
- 二进制文件的读取并保存为文本文件
- Flutter实战一Flutter聊天应用(二十一)
- Spring学习系列 : 错误记录(三) MyBatis日期读取
- 数据并发的问题
- SpringBoot写一个通用的返回类
- python字符串方法
- C语言实现信号打包成二进制文件并在Matlab中读取并画图(VS版)
- 一码归一码
- MySQL5.7: 半同步复制(Semisynchronous Replication)配置
- 类与对象
- C++/C++11中<functional>的使用
- 文章标题
- POJ-3723 Conscription
- JS技术(3)---节点增删
- js实现贪吃蛇小游戏