MATLAB指令

本文详细介绍MATLAB的安装步骤,提供数据获取、保存及处理方法,包括读取txt、csv文件,数据加载与绘图技巧。涵盖路径管理、调试方法、画图操作及常见错误解决,适合初学者及进阶用户。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

matlab207的安装:

安装方法:https://blog.youkuaiyun.com/gisboygogogo/article/details/76793803

当时复制了此文件就可以打开安装的matlab,没有任何错误提示框弹出。

 

当一个工程文件中的文件过多,移植程序时,先看清楚程序中调用的路径是否能对上,对上后再运行程序

路径:

1、选择工程文件所在的目录(不同.m文件放在同一目录下)

2、关于路径的问题,好像只能将.m文件放在一个文件夹中,在文件夹中再放文件夹(调用函数)总是提示某个函数找不到

全部放在一个文件夹中,就没有问题了

 

数据获取方法:

1、load直接加载txt文本数据

用fopen函数不能读出数据,只能打开文件,取出数据必须用load函数。若不能打开指定文件,fopen函数返回-1

2、加速度数据

取第一列时间数据和x轴加速度数据

3、读取csv格式的数据,直接使用csvread函数

filename='/Users/Steven Xiao/Desktop/wifi感知/X4M03开发板/datum.csv';
aa = csvread(filename);
plot(aa(1,:))

4、保存变量

csvwrite('total_wave.csv',total_wave);,第一个参数是文件名和文件格式,第二个参数是变量矩阵,保存在运行路径下

 

下标索引必须为正整数

matlab下标索引必须为正整数类型或逻辑类型。取范围时只能从正数开始取

 

数据保存

1,将所需变量保到txt文本中

filename='F:\指夹、手环、Biopac实验数据(志愿者)\E4数据\李志成_1532571159_A01671\BVP.csv';%2018/7/26 10:12:39
bvp=load(filename);

bvp1=bvp(19200:23040);
fop=fopen('2_25.txt','w');
for i=1:(length(bvp1))
    a=bvp1(i,1);

    fprintf(fop,'%g ',bvp1(i,1));
    fprintf(fop,'\n');

end
fclose(fop);

①虽然结果中不是一行行显示,但是已经进行了换行处理

②fclose(fop);必须在end后

 

基本操作

1、close all % 可以一次关闭所有figure

 

调试方法:

断点直接使用鼠标打在语句的最前面

(2) 执行:F5。

(3) 单步执行:F10。

(4) step in:F11。

(5) step out:Shift+F11

 

时间戳(单位为秒)转化为时间方法:

1、直接使用在线工具转化http://tool.chinaz.com/Tools/unixtime.aspx

同样把时间转化为时间戳

 

常见错误:

1、关于找不到.m文件的提示

在一个.m文件中调用另一个.m文件时,直接用.m的文件名作为函数,不用.m中的函数名function后面的内容。所以函数名最好和.m文件的名称一样

main中的函数名不能写成ideal_bandpassing,否则ctr+D时就会出现下面错误

 

 

画图:

https://blog.youkuaiyun.com/jiangnankid/article/details/22690165

1、

①画茎状图

M=4;                         %原离散信号有4点
n=[0:1:M-1];                 %原信号是1行4列的矩阵
xn=[1 1 1 1];                %构建原始信号 
subplot(3,1,1);
stem(n,xn);                  %画图
title('原始信号');

 

画柱状图

color_set=[0.8660 0.9236 0.8957 0.9116];
%bar的颜色索引
color_background=['c' 'm' 'y' 'k' 'r' 'g' 'b'];
%对figure的标题、横坐标、纵坐标的标注进行设置
hold on
%title('Tiltle Name');
ylabel('sVRI');
ax = gca;
ax.XTick = [1 2 3 4];
ax.XTickLabels = {'Rest','Hard Task','Relax','Esay Task'};
%对不同的数据所对应的bar进行不同颜色条的设计
color_bar=bar(1,0.8660);
set(color_bar,'FaceColor',color_background(1));%选择‘c’这个颜色
color_bar=bar(2,0.9236);
set(color_bar,'FaceColor',color_background(2));%选择‘m’这个颜色
color_bar=bar(3,0.8957);
set(color_bar,'FaceColor',color_background(3));%选择‘y’这个颜色
color_bar=bar(4,0.9116);
set(color_bar,'FaceColor',color_background(4));%选择‘y’这个颜色
axis([-inf,inf,0.7,1.0]) 
%画柱状图
data = [0.8660 ,0.9236 ,0.8957,0.9116];
b = bar(data);
color_background=['c' 'm' 'y' 'k' 'r' 'g' 'b'];
ch = get(b,'children');
set(gca,'XTickLabel',{'Rest','Hard Task','Relax','Esay Task'})
set(ch,'FaceVertexCData',[0 0 1;0 1 1;1 1 1;1 0 1;])
ylabel('sVRI');
axis([-inf,inf,0.7,1.0]) 

在柱状图上加高度

color_set11=[0.8660];
color_set1=num2cell(color_set11);

color_bar=bar(1,0.8660);
set(color_bar,'FaceColor',color_background(1));%选择‘c’这个颜色
text(1-0.1,0.8660+0.018,color_set1);

多条曲线加上标注

figure
plot(f02)

hold on
plot(s01)

hold on
plot(t12)
legend('0-2','0-1','1-2')

一个legend即可

 

②曲线加粗

plot(x,y,'Linewidth',3),可以将x,y直接换成矩阵数据

③曲线颜色plot(横轴,纵轴,‘形状颜色’),形状和颜色连在一起

如‘*r’表示离散的*点,所有点之间没有连接起来

‘-*r’表示将所有*用直线连接起来

*/○的大小:plot(breathfreq,'-ko','markersize',4)

b 蓝 . 
c 青 。 圈
g 绿 × ×标记
k 黑 - 实线
m 紫红 * 星号
r 红 : 点线
w 白 -. 点划线
y 黄 -- 虚线

 

④figure也可以传入参数,figure('visible','off'),只是不画出来,但是实际画图的时候会占用figure

 

2、横轴点数转化为时间轴

①将矩阵中的横轴(数字轴)转化为对应的时间轴

    len=length(se);
    t=0.005*(1:len);%很轴分成多分
    plot(t,second_ant_csi.')%指定横轴为时间,数据中的横轴含义直接被覆盖了

注:指定横轴,纵坐标可以直接传入数据,这里的一行数据要直接转化成一列数据

②只指定某一个坐标轴的范围ylim([0 0.6])/xlim([0 0.6])

使用 axis([XMIN XMAX YMIN YMAX]) ,对于不需要设置范围的轴,使用参数-inf,inf,即正负无穷之间

>> x = 1:10;
>> y = x.^2;
>> subplot(3,1,1)
>> plot(x,y,'r')
>> subplot(3,1,2)
>> plot(x,y,'g')
>> xlim([0,15])
>> subplot(3,1,3)
>> plot(x,y,'b')
>> axis([-1,12,-inf,inf])   

必须在plot后面

 

3、多图和曲线

①怎样实现一个界面画多个图

    subplot(2,2,1);% 新建窗口 
    plot(I)             % 画出原始的波形

    e=I;
    subplot(2,2,3);                                      % 新建窗口
    s1=wden(e,'minimaxi','s','one',5,'db3');   % 选用 db3 小波对信号进行5层分解,并对细节系数选用 minimaxi 阈值模式和尺度噪声 
    plot(s1); 

直接使用subplot()函数,前两个参数确定将界面分成多少块,最后一个参数决定图画在那一块

②在一个坐标系中画多个曲线hold on...hold off

    subplot(2,2,1)
    plot(csi15_1)
    hold on 
    plot(csi15_2)
    plot(csi15_3)
    hold off 

注:

 hold on 和hold off,是相对使用的.通常是一个图上画两个曲线进行比较。

% 前者的意思是,你在当前图的轴(坐标系)中画了一幅图,再画另一幅图时,原来的图还在,与新图共存,都看得到

% 后者表达的是,你在当前图的轴(坐标系)中画了一幅图,此时,状态是hold off,则再画另一幅图时,原来的图就看不到了,在轴上绘制的是新图,原图被替换了

③给最大值点位置加上坐标线

    plot(f_PSD,plot_Pxx1);
    j = f_PSD>1 & f_PSD<2 ;         %指定频率范围求最大值和最小值
    max_psd=max(plot_Pxx1(j));                    %求出指定横轴范围内的纵轴的最大值 
    ax=axis;%获得当前坐标的范围
    hold on;%保持图像
    plot([f_PSD(find(plot_Pxx1==max_psd)),f_PSD(find(plot_Pxx1==max_psd))],[ax(3),ax(4)],'r:');%这里只是绘制了竖线

注:

1、先画出图像后再画纵横线

2、plot([ax(1),ax(2)],[maxy,maxy],'r:',[maxx,maxx],[ax(3),ax(4)],'r:');%绘制纵横线 

 

5、给每一条曲线加上注释

 

4、画等间距横轴方法

zeros(1,length(all));zeros函数直接取了1行length(all)列的0矩阵

for i=1:length(all)
       timeline(i)=all{i}.timestamp_low-all{1}.timestamp_low;

然后通过for循环依次给每个位置赋值

 

5、画三维图(30×1000的矩阵和一个1×1000的矩阵)

怎么将x作为子载波数(从0-30),y作为时间轴,z作为幅度值画出?

分为2种:画函数(连续)的三维图和画矩阵(离散)的三维图

①画三维图用surf函数,去掉曲面图上的网格用shading interp;

    surf(x,y,z)
    shading interp;

一般采用surf(X,Y,Z)命令。

注意X于Y是同维数还是不同维数,均需要采用meshgrid()函数将其变为同维数的矩阵。

 

画图坐标轴

1、上标和下标

{ \itN_{RF}}

\it:表示斜体

_:表示下标,{RF}上标的内容用{}括起来

^:表示上标

箭头所指空白处双击才会出现

 

2、关于复制波形到Word中

点击复制图形即可

 

取点:

1、取指定范围横坐标范围内的纵轴最大值

获取到横轴矩阵和纵轴矩阵 plot(f_PSD,plot_Pxx1);,均是129*1的矩阵

横轴指定范围: j = f_PSD>1 & f_PSD<2 ;        这里返回的同样是129*1的矩阵,范围内的对应的值为1,其他为0,返回矩阵中只包含0或1

求纵轴最大值: max_psd=max(plot_Pxx1(j));     将0-1矩阵传入纵轴,即可取出指定横轴范围内对应的纵轴的值

 

 

矩阵操作

1、对矩阵各列元素求和,sum(矩阵)

矩阵各行元素求和,sum(矩阵,2)

2、生成全1矩阵

sub_1=ones(1,1000);生成1×1000的全1矩阵

扩展:生成全2矩阵sub_1=ones(1,1000)*i;

 

常用函数:

1、 执行pwd指令可立刻得知您目前所在的工作目录的绝对路径名称

2、squeeze函数

就是将数据整合到二维矩阵中

3、注释

注释:Ctrl+R

取消注释:Ctrl+T5、fullfile函数

作用是利用文件各部分信息创建并合成完整文件名。

输入:f = fullfile('C:','Applications','matlab','fun.m')

得到:f =C:\Applications\matlab\fun.m

6、出现冒号,就表示此维度的全部遍历

csi(1,:,:)

7、转置:直接csi_amp=csi_amp.';

8、将每一个波形用变量表示,直接plot变量的波形

y(:,i)

9、matlab中的变量一定是不能重名的,重名会出现超过索引或者维度的错误

之前就是此处同时为y,导致错误

10、向一个矩阵中加入一行

result=[result;rqa_stat];rqa_stat为要加入的行或者列

11、在之前画图基础上修改

title之前进行处理

13、找每行/每列的最大值

[min_a,index]=min(result(:,2));先把行或者列取出,在min/max

14、if...else...格式

15、matlab中.m文件的名称不能含有中中文

不能有空格,空格直接用下划线代替

16、界面内容显示

当语句后面不加分号时,会在上图将变量值全部打印出来,加上分号不打印变量值

命令行窗口能直接对变量进行操作,如统计长度和plot

17、幂次表示方法

1e-6表示10^-6,前面直接加上*号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值