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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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代码编写方法,照葫芦画瓢,可以得到三角波数据和方波数据。
三、生成三角波数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
%% 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);%关闭文件

  

生成方波数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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);%关闭文件

  

 

posted @   xiaoberber  阅读(3613)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示