首页 > 编程学习 > 使用matlab生成正弦波、三角波、方波

使用matlab生成正弦波、三角波、方波

发布时间:2022/8/26 15:59:35

生成余弦波数据(该示例中展示了如何输出十六进制数据到文件中)

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);%关闭文件

  

 

Copyright © 2010-2022 mfbz.cn 版权所有 |关于我们| 联系方式|豫ICP备15888888号