使用matlab生成正弦波、三角波、方波
作者:互联网
生成余弦波数据(该示例中展示了如何输出十六进制数据到文件中)
N = 100 ; y = zeros(N , 1) ;%生成100行*1列的矩阵 y_integer = zeros(N , 1) ;%生成100行*1列的矩阵 y_hex = zeros(N , 1) ;%生成100行*1列的矩阵,十六进制 for i = 1:1:N %循环1~100,累加1 x = i ; %y(i,1) = ceil( 127*sin(x*2*pi/N) ) ;%ceil为四舍五入函数,输出范围为-127~127的正弦波数据 y(i,1) = ceil( 127*cos(x*2*pi/N) ) ;%ceil为四舍五入函数,输出范围为-127~127的余弦波数据 end plot(y);%画图预览 fid = fopen('cos_100point.coe','wt'); %创建一个名为cos_100point.coe的文件 %- COE 文件前置格式 fprintf( fid, 'MEMORY_INITIALIZATION_RADIX = 16;\n'); fprintf( fid, 'MEMORY_INITIALIZATION_VECTOR =\n'); %- 写数据 for i = 1:1:N if (y(i,1)<0) y_integer(i,1)=y(i,1)+256;%负数用补码表示 else y_integer(i,1)=y(i,1);%正数的补码为原码 end y_hex= dec2hex(y_integer);%因为dec2hex只能转换正数,因此先将y取补码 if(i == N) %最后一个点时,标点为分号,其余时候为逗号 fprintf(fid,'%c%c;',y_hex(i,1),y_hex(i,2)); %输出16进制数据 % fprintf(fid,'%d,\n',y(i,1)); %输出10进制数据 else fprintf(fid,'%c%c,\n',y_hex(i,1),y_hex(i,2)); %输出16进制数据 % fprintf(fid,'%d,\n',y(i,1)); %输出10进制数据 end end fclose(fid);%关闭文件
上述matlab代需要重点关注的是:
1、按照需求,模拟生成正弦波数据,利用率sin函数和cos函数。
2、将负数通过转换,变为正数,操作方式为加上256(2的N次方,N为数据位宽)
3、使用DEC2HEX将补码数据转换为十六进制字符
4、使用fprintf函数,利用两个%c,将十六进制字符写入文件中。实现了十六进制数据的转换。
依据正弦波的matlab代码编写方法,照葫芦画瓢,可以得到三角波数据和方波数据。
三、生成三角波数据
%% triangle wave data write in coe file N = 100 ; y = zeros(N , 1) ;%生成100行1列的矩阵 for i = 1:1:N if(i <= 50) %从0递增到49 y(i,1) = i-1 ; else %从49递减到0 y(i,1) = 100 - i; end end plot(y);%绘图预览 fid = fopen('triangle_100point.coe','wt'); %COE文件格式 fprintf( fid, 'MEMORY_INITIALIZATION_RADIX = 10;\n'); fprintf( fid, 'MEMORY_INITIALIZATION_VECTOR =\n'); %输出十进制数据,保存至文件 for i = 1:1:N if(i == N) fprintf(fid,'%d;',y(i,1)); %最后一个点时,标点为分号,其余时候为逗号 else fprintf(fid,'%d,\n',y(i,1)); end end fclose(fid);%关闭文件
生成方波数据
N = 100 ;%100个点的数据 y = zeros(N , 1) ;%生成100行1列的矩阵 for i = 1:1:N if(i <= 50) %输出50个点的高电平,50个点的低电平 y(i,1) = 255 ; else y(i,1) = 0 ; end end plot(y); fid = fopen('rectangle_100point.coe','wt'); %创建文件rectangle_100point.coe %COE文件格式 fprintf( fid, 'MEMORY_INITIALIZATION_RADIX = 10;\n'); fprintf( fid, 'MEMORY_INITIALIZATION_VECTOR =\n'); %保存文件数据至COE文件中 for i = 1:1:N if(i == N) fprintf(fid,'%d;',y(i,1)); %最后一个点时,标点为分号,其余时候为逗号 else fprintf(fid,'%d,\n',y(i,1)); end end fclose(fid);%关闭文件
标签:十六进制,方波,正弦波,生成,zeros,matlab,127,100,数据 来源: https://www.cnblogs.com/54programer/p/16627823.html