matlab207的安装:
安装方法:https://blog.csdn.net/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.csdn.net/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,前面直接加上*号