C語言實現信號打包成二進制文件並在Matlab中讀取並畫圖(VS版)
前些天老師佈置了一道作業:在main.cpp裏面生成了兩個信號s1和s2,將這兩個信號的數據用二進制形式寫到文件signal.dat裏面,然後用Matlab從該文件中讀取信號的數據,將兩信號畫在一張圖中
main.cpp
include<'vector.h'>
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); //寫入信號s1
fwrite(s2, sizeof(s2), 1, fp); //寫入信號s2
fclose(fp); //關閉數據流,防止數據丟失