fread matlab,matlab 打开bin文件 并转换成为txt文件,送上所有积分
fread matlab,matlab 打开bin文件 并转换成为txt文件,送上所有积分详细介绍
本文目录一览: matlab 中关于fread函数的用法
fread函数在MATLAB中的功能:fread函数可从文件中读取二进制数据
用法:
A = fread(fid, count)
A = fread(fid, count, precision)
其中fid为指针所指文件中的当前位置,count指读取的数据个数, precision表示以什么格式的数据类型读取数据。
扩展资料:
fread函数在PHP中:
(PHP 4, PHP 5)
fread:读取文件(可安全用于二进制文件)
stringfread( int handle, int length )
fread()从文件指针handle读取最多 length 个字节。 该函数在读取完 length 个字节数,或到达 EOF 的时候,或(对于网络流)当一个包可用时就会停止读取文件,视乎先碰到哪种情况。
在区分二进制文件和文本文件的系统上(如 Windows)打开文件时,fopen() 函数的 mode 参数要加上 'b'。
当从网络流或者管道读取时,例如在读取从远程文件或popen()以及proc_open()的返回时,读取会在一个包可用之后停止。这意味着应该如下例所示将数据收集起来合并成大块。
如果只是想将一个文件的内容读入到一个字符串中,用file_get_contents(),它的性能比上面的代码好得多。
参考资料:百度百科-fread函数
matlab 的fread函数中“skip”参数的作用是什么?
[A,count] = fread(fid,size,precision,skip) 该语句利用Fread函数,从指定文件中读取二进制数据并写入矩阵A。\x0d\x0aCount参数用于返回成功读入的元素数量,为可选参数。输入参数中,\x0d\x0afid是用fopen打开文件时返回的文件标识;\x0d\x0asize用于指定读入数据的元素数量,该参数可选,如果不指定则将文件的全部数据读入;\x0d\x0aprecision指定读入数据的精度,该参数可选,如果不指定,其缺省值为'uchar';\x0d\x0a\x0d\x0askip也是可选参数,称作循环因子,若指定shikp值且该值不为1,则循环跳跃读取数据,即按skip指定的比例,周期性跳过一些数据,使得读取的数据具有选择性
matlab fread命令,急!
根据指定类型读取规定长度的字节,然后解析成指定类型的数字。
“fread”以二进制形式,从文件读出数据。
语法1:[a,count]=fread(fid,size,precision)
语法2:[a,count]=fread(fid,size,precision,skip)
matlab 的precision(精度)的表达式与c语言、fortran语言、是一致的。
不规定precision(精度),则字符默认为: ucher、则数值默认为双精度 。
MATLAB文件操作相关命令
5.2.4 输入输出语句
(1) 实时交互输入输出
input;keyboard
(2) 完全复制式的文件存取
*1) save
save
save '文件名' x
save '文件名' x y z
save '文件名' x y z –ascii
save '文件名' x y z –ascii –double
save '文件名' x y z –ascii –double –tabs
save '已有文件名' x y z –append
注1:save 的默认文件名是 fname.m
注2:–ascii 8字节 ascii码方式
注3:–ascii 16字节 ascii码方式
注3:–ascii –double –tabs 格式排列
注3:–append 续后存放
*2) load
load
load '文件名'
注1:load 的默认文件名是 fname.m
(3) 文件存取管理(建立与读写)
文件管理(打开、写入、读出、关闭、定位),
*1)“fopen”打开文件,赋予文件代号。
语法1:FID= FOPEN(filename,permission)
用指定的方式打开文件
FID=+N(N是正整数):表示文件打开成功,文件代号是N.
FID=-1 : 表示文件打开不成功。
FID在此次文件关闭前总是有效的。
如果以读方式打开,matlab首先搜索工作目录,其次搜索matlab的其他目录,“permission”是打开方式参数。
打开方式参数由以下字符串确定:
r 读出
w 写入(文件若不存在,自动创建)
a 后续写入(文件若不存在,自动创建)
r+ 读出和写入(文件应已存在)
w+ 重新刷新写入,(文件若不存在,自动创建)
a+ 后续写入(文件若不存在,自动创建))
w 重新写入,但不自动刷新
a 后续写入,但不自动刷新
文件的存储格式:文件打开的默认方式是:二进制。以文本方式打开,可以在方式参
数“permission”中加入“t”文件将,如“rt”,“wt+”
语法2:[fid,message]= FOPEN(filename,permission)
FID=-1 ,文件打开不成功时,返回错误信息
语法3:[fid,message]= FOPEN(filename,permission,machineformat)
permission: 用指定的方式打开文件。
machineformat: 指定读写时用的数据格式。
数据格式(machineformat)取值如下
'native' or 'n' Local machine format - the default
'ieee-le' or 'l' IEEE 浮点数( little-endian byte ordering)
'ieee-be' or 'b' IEEE 浮点数( big-endian byte ordering)
'vaxd' or 'd' VAX D 浮点数 (VAX ordering)
'vaxg' or 'g' VAX g 浮点数 (VAX ordering)
'cray' or 'c' Cray 浮点数 (big-endian byte ordering)
长型数据
'ieee-le.l64' or 'a' IEEE 浮点数(little-endian byte ordering和64 位)
long data type
'iecc-be.l64' or 's' IEEE 浮点数(big-endian byte ordering和64 位)
long data tw
语法4: [filename,permission,machineformat]=fopen(fid)。
查看打开文件的情况返回文件名、打开方式、文件格式。如果fid不存在,则返回变量。
fid=fopen('allall')
返回当前所有打开的文件。
*2)“fwrite”以二进制形式,向文件写入数据。
语法1:count=fwrite(fid,a,precision)
将矩阵a 写入fid指向的打开的文件,matlab 自动将a元值转换成precision规定的精度(见后),写成列的形式。count是返回值,写入成功,返回写入数据个数,否则返回0。
语法2:count=fwrite(fid,a,precision,skip)
skip:取正整数n ,
将矩阵a 以步长n 跳选数值写入fid指向的打开的文件,例如,a=1,2,3,4,5,6,7,8,9 ;skip=2; 则输入 _,_,3,_,_,6,_,_,9。这对非连续数据场,定长插入数据极有意义。
*3)“fread”以二进制形式,从文件读出数据。
语法1:[a,count]=fread(fid,size,precision)
语法2:[a,count]=fread(fid,size,precision,skip)
size: 不指定 :到尾返回读。
N : 读出N个数据,构成列向量。
inf : 读出fid指向的打开的文件的全部数据。
[M,N] : 读出N个数据,构成列向量,填入M*N矩阵
precision(精度)
precision(精度)规定了以浮点数、整型数、字符读出时字节数。matlab 的precision(精度)的表达式与c语言、fortran语言、是一致的。不规定precision(精度),则字符默认为: ucher、则数值默认为:双精度 。
以下precision(精度)将保证读出具有一致的体积。
MATLAB C or Fortran Descriphon(精度)
'char' 'char*l' 8 字节数,字符型
'uchar' 'unsigned char' 8 字节数
'schar' 'signed char' 8 字节数,字符型
'int8' 'integer*1' 8 字节数,整型数
'intl6' 'integer*2' 16 字节数,整型数.
'int32' 'integer*4' 32 字节数,整型数.
'int64' 'integer*8' 64 字节数,整型数
'uint8' 'integer*l' 8 字节数
'uintl6' 'integer*2' 16 字节数
'uint32' 'integer*4' 32 字节数
'uint64' 'integer*8' 64 字节数
'float32' 'real*4' 浮点数, 32 字节数
'float64' 'real*8' 浮点数, 32 字节数
以下precision(精度)将不保证读出具有一致的体积。
MATLAB C or Fortran Descriphon(精度)
'short' 'short' 16 字节数,整型数
'int' 'int' 32 字节数,整型数
'long' 'long' 32 (64) 字节数,整型数
'uShort' 'Unsigned short' 16 字节数
'uint' 'Unsigned int' 32 字节数
'ulong' 'unsigned long' 32 (64) 字节数
'float' 'float' 浮点数, 32 字节数
'double' 'double' 浮点数, 64 字节数
以下precision(精度)规定读出指定的体积n。
'bitN' N字节数,整型数 1<=N<=64
'ubitN' N字节数, 1<=N<=64
*4)从文件中有格式地读数据 fscanf
语法1:[a,count]=fscanf(fid,format,size)
根据指定的格式从fid 文件按照格式format读出数据并按size的格式放入内存。
a :读出的数据放入内存的变量名
count :返回值。0:失败、n>0:成功,n是读出数据个数。
fid :文件号
size :a的数据的格式
N : 列向量
inf : 读出文件全部数据
[M,N] : 读出数据以M*N的格式放入变量名a内
format :读出数据的格式
format是字符形式,与C语言基本相同。字符形式中有“%”与字符集(d,i,o,u,x,e,f,g,s,c,…)搭配构成。
如: %s:单字符读
%c:读space字符
例:s=fscanf(fid,'%s') 返回一个字符。
a=fscanf(fid,'%5d') 返回一个五位十进制整数。
*5)关闭文件 fclose
语法1:fclose(fid)
语法2:fclose('all')
*6)向文件写数据 printf
语法1:count=printf(fid,format,a,b,s,……)
例:
x=0:0.1:1;
y=[x;exp(x)];
fid=fopen('exp.txt','w')
fprintf(fid,'%6.2 %12.8f\n',y);
计算结果:
0.0 1.00000000
0.1 1.10517092
1.00 2.71828183
*8) 指针放到文件头:frewind
语法1:frewind(fid)
, hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">以下precision(精度)规定读出指定的体积n。
'bitN' N字节数,整型数 1<=N<=64
'ubitN' N字节数, 1<=N<=64
*4)从文件中有格式地读数据 fscanf
语法1:[a,count]=fscanf(fid,format,size)
根据指定的格式从fid 文件按照格式format读出数据并按size的格式放入内存。
a :读出的数据放入内存的变量名
count :返回值。0:失败、n>0:成功,n是读出数据个数。
fid :文件号
size :a的数据的格式
N : 列向量
inf : 读出文件全部数据
[M,N] : 读出数据以M*N的格式放入变量名a内
format :读出数据的格式
format是字符形式,与C语言基本相同。字符形式中有“%”与字符集(d,i,o,u,x,e,f,g,s,c,…)搭配构成。
如: %s:单字符读
%c:读space字符
例:s=fscanf(fid,'%s') 返回一个字符。
a=fscanf(fid,'%5d') 返回一个五位十进制整数。
*5)关闭文件 fclose
语法1:fclose(fid)
语法2:fclose('all')
*6)向文件写数据 printf
语法1:count=printf(fid,format,a,b,s,……)
例:
x=0:0.1:1;
y=[x;exp(x)];
fid=fopen('exp.txt','w')
fprintf(fid,'%6.2 %12.8f\n',y);
计算结果:
0.0 1.00000000
0.1 1.10517092
1.00 2.71828183
*8) 指针放到文件头:frewind
语法1:frewind(fid)
matlab在循环中怎么把初值替代
对于初学MATLAB的人来说,本文不适合初学者,初学者更需要去熟悉软件,熟悉各种函数,先能实现功能,再来讲究速度。建议收藏,等需要做大程序时再看。
本文是做毕业论文做仿真时遇到程序运行太慢的问题,所以对网上资料进行实践汇总。
MATLAB是一种矩阵语言
MATLAB的文档中写到:MATLAB is a matrix language, which means it is designed for vector and matrix operations. You can often speed up your M-file code by using vectorizing algorithms that take advantage of this design. Vectorization means converting for and while loops to equivalent vector or matrix operations.
翻译:MATLAB是一种矩阵语言,这意味着它是针对矢量和矩阵运算而设计的。 通常,您可以使用矢量化算法来加快M文件代码的使用,从而利用这种设计。 向量化意味着将for和while循环转换为等效的向量或矩阵运算。
Before taking the time to vectorize your code, read the section on Performance Acceleration. You may be able to speed up your program by just as much using the MATLAB JIT Accelerator instead of vectorizing。
翻译:在花时间对代码进行向量化之前,请阅读有关性能加速的部分。 您可以通过使用MATLAB JIT Accelerator而不是向量化来加快程序速度。
MATLAB是“矩阵实验室”的意思,擅长进行矩阵,向量运算,而循环是它的薄弱点。因此最简单的办法就是尽量减少循环的使用。
有问题找帮助文档。学会使用帮助文档,学会针对待解决的问题检索文档资料。查看MATLAB->Programming->Improving Performace and Memory Usage;或MATLAB->Programming Fundamentals->Performace->Techniques for Improveing Performace。
翻译:查看MATLAB->编程->提高性能和内存使用;或MATLAB->编程基础->性能->提高性能的技术。
使用函数指针
Matlab的一些函数使用函数名作用参数,常用一个变量支保存这个函数名字符串,如:func='tan';然后用这个变量作为函数的参数:fzero(func,0))。这种方法对于简单的函数调用是很好的,但是对于在循环中的重复调用就存在两个问题:
(1)在每一个循环中,Matlab需要去搜索这个函数的路径(如tan),这需要花费时间。
(2)在循环过程中,路径可能会改变。这会保证在这一次循环中,某个版本的函数(如tan)被首先调用,而下一次循环中这个版本的函数又被首先调用,最终会造成结果不一致。
解决的办法是使用文件指针(;或func=@sin),它能返回函数唯一的识别码。调用方式同上。
Matlab中的一些函数能够同时适用于实类型数据和复类型数据。如果你只使用实数据,那么采用特定的版本的,非复数据函数,那么它运行的速度将变得更快。这些函数如:reallog(), realpow(),realsqrt()。
一些技巧:
1.在必须使用多重循环时下,如果两个循环执行的次数不同,则在循环的外环执行循环次数少的,内环执行循环次数多的。这样可以显著提高速度。
2.一些有用的,可用于代替循环的函数:
any();size();find();cumsum();sum();
3.用内建函数代替循环:bsxfun, arrayfun, cellfun, spfun, structfun
bsxfun调用格式:
bsxfun(@已有定义的函数名, 数组1,数组2)
bsxfun(@( 数组1,数组2)函数体表达式,数组1,数组2)
例如
a=[1 2 3]; b=[10 ;20 ;30]; c=bsxfun(@plus,a,b); d=bsxfun(@(a,b)a.^2+b.^2,a,b)
又例如
x=0:0.5:60; y=(0:12).' ; z=bsxfun(@(x,y)besselj(y,x),x,y); surf(x,y,z); title('besselj(n,x)');
如果直接调用
z=besselj(y,x)
计算函数值必定出错。
4. 通常高级输入输出操作:load()和save()比一般的低级操作fread()和fwrite()快。
5.矩阵元素与列均值的偏差:
A = [1 2 10; 3 4 20; 9 6 15]; C = bsxfun(@minus, A, mean(A)); D = bsxfun(@rdivide, C, std(A))
在 MATLAB? R2016b 及更高版本中,您可以直接使用运算符而不是 bsxfun,因为这些运算符本身支持对具有兼容大小的数组进行隐式扩展。
(A - mean(A))./std(A)
等于上面操作
对两个数组应用按元素运算(启用隐式扩展) - MATLAB bsxfun - MathWorks 中国
6.三角函数可以使用泰勒展开式,变成乘除法。如果是变换矩阵,使用四元数,极致简化,更加简单高效。
通过定时查找占据资源多的代码
Tic和toc方法:
(1)显示的时间是运行时间“wall clock”。这个时间受你在运行你的代码时,你的计算机是否同时运行其它别的程序。
(2)你需要不断地压缩计时范围来查找你代码运行最慢的位置。
代码分析器
一个最好的方法是利用matlab 内嵌的代码分析器。在你的程序前面通过添加命令profile on;及在程序结束添加profile viewer;并运行你的程序。当程序正常运行结束时,代码分析器窗口将弹出,并显示分析结果。它包含的信息有:
Function Name :函数名;
Calls :函数被调用次数;
Total Time :执行该函数的CPU总用时,包含任何其它被它调用的函数的CPU时间。
Self Time :执行该函数的CUP总用时,不包含任何其它被它调用的函数的CUP时间。
Total Time Plot :时间用时的曲线图。
以上信息可进行各种排序和详细查看。
注意:当你完成你的代码分析后,请删除profile on和profile viewer,因为嵌入代码分析器会使用的程序运行变慢。
matlab fread 用法?fread能通过串口直接读取字符串吗?
可以通过fread读串口,比如一开始定义串口为scom,这fread(scom,n),n为要读出的数据的个数
,读出的是二进制数,转换下就OK了
matlab 的fread函数,[a,count]=fread(fid,size,precision,skip),skip参数的作用是什么?
[A,count] = fread(fid,size,precision,skip) 该语句利用Fread函数,从指定文件中读取二进制数据并写入矩阵A。
Count参数用于返回成功读入的元素数量,为可选参数。输入参数中,
fid是用fopen打开文件时返回的文件标识;
size用于指定读入数据的元素数量,该参数可选,如果不指定则将文件的全部数据读入;
precision指定读入数据的精度,该参数可选,如果不指定,其缺省值为'uchar';
skip也是可选参数,称作循环因子,若指定shikp值且该值不为1,则循环跳跃读取数据,即按skip指定的比例,周期性跳过一些数据,使得读取的数据具有选择性
Matlab 中fread的问题
原因是那个文件已经不存在了,fopen函数返回的FID为非法值-1,所以导致fread出错。
请你检查下是否把文件误删了或者改名了
不知道你的目的是什么,fread是用来读取二进制文件的,但是你的txt文件应该是ascii格式的。你指定了读取的精度是一个bit,所以他读出来的就是2个字符的16个bit加头尾8个。
如果你只是想把你写的10读出来,应该用fscanf
a=fscanf(f_id,'%2d',[1 1]);
matlab 打开bin文件 并转换成为txt文件,送上所有积分
fopen
fwrite
fclose
读取二进制文件用fread函数,其调用格式为
[A,COUNT]=fread(fid,size,'precision')
其中A是用于存放读取数据的矩阵、COUNT是返回所读取的数据元素个数、fid为文件句柄、size为可选项,若不选用则读取整个文件内容;precision用于控制所写数据的精度,
%从数据文件读取一维数据
fip=fopen('C:\binary3.bin','rb');
[dat,num]=fread(fip,[2,20],'double');
fclose(fip); %关闭文件
写数据至TXT文件用fprintf函数,其调用格式为
fprintf(fid,format,A)
fid为文件句柄,指定要写入数据的文件,format是用来控制所写数据格式的格式符,与fscanf函数相同,A是用来存放数据的矩阵或变量。
fp=fopen('c:\dat.txt','w');
fprintf(fp,'%s',dat)
fclose(fp)
以上代码只是简单演示具体还需要知道你的二进制文件的数据格式和数据种类以及以何种形式写入文本文件(比如间隔为逗号?制表符?空格?等等)
从示波器存储波形数据为bin文件,用matlab中fread读取结果却为十进制数,哪里出问题了??小白急求
有可能是你保存的bin文件就是十进制的,所以最好保证hex文件,hex文件才是二进制或者16进制的。
matlab中使用fwrite将1到10写入文本文件中,再用fread读取该文本文件中的数据,怎么写程序
写程序段
c='write
data.txt';
%文件名
fid=fopen(c,'at');
%打开以C命名的文件,文件不存在则创建
for
i=1:10
fwrite(fid,i);
%写操作
end
fclose('all');
读程序段
c='write
data.txt';
fid=fopen(c,'rt');
for
i=1:10
b(i)=fread(fid,1);
end
fclose('all');
b