常用技巧
- 折叠
- ctrl = 折叠代码
- shift ctrl =展开代码
- 缩进整理 ctrl i(==全选+ctrl i==)
- 跳转到第几行 ctrl g
- F5运行,F10 debug,shift+F5 退出Debug模式
- doc 取代help,直接跳出文档(由于外网,网络可能不稳定)
提醒
- 注意,MATLAB所有序号都是==从1开始==
- MATLAB中 ==Class Array== 的思想随处不在
- 例如对于
a = 54
,使用whos
命令可以看到,MATLAB认为这是一个Size 1×1 8 Bytes的double array,==而非一个简单的double变量==。 - 再例如,
str1 ="string"
,是一个Size 1×1的,150 Bytes的Class为String的Array变量。也就是说,你完全可以直接str1(2) = “string2”,这种操作被理解为在str1
这个string array变量中增加了一个元素。 - 同样的,
char = 'char'
是定义了一个Size 1×4的,Bytes为8的 Class 为 char的Array变量。
- 例如对于
- 使用
%%
%
来区分不同Block的代码是一种好方法
数据类型
- double
- single(单精度)
- logical
- int8(1B 8bit)
- int16
- int32
- int64
- uint8
- char(‘’)
- string(“”)
- NaN(Not a Number)
- Inf(无穷):有正负之分
- cell
- struct
- function_handle
常用
矩阵操作
flipud(M)
: 翻转矩阵,从下面往上反转fliplr
:左右翻转flip([])
: 翻转向量,矩阵的话和ud一样repmat(A, 2, 3)
:横向重复两次,纵向3次repelem(A, 2, 3)
:repeat element 原来矩阵每个元素都2×3,重新组成新的max(A)
:每列中最大的元素diff()
: 每次相邻两个元素之间做差prod()
:返回数组乘积cumsum()
:返回前n个元素的和cumprod()
cummin()
cummax()
linspace(x1,x2,n)
:产生n个x1到x2的数据,间隔(x2-x1)/(n-1)logspace(x1,x2,n)
: 产生n个$$10^{x1}$$到x2的数据
增删改查
find(logical_vector, k, 'first')
:首k个true值any(logical_vector)
all(logical_vector)
绘图
线颜色
- b : blue
- g : green
- r : red
- c : cyan 青蓝色
- m : magenta 品红色
- y : yellow
- k :black
- w :white
线样式
--
段虚线:
点虚线-.
段点虚线- marker
*-.
*为markero
.
x
s
square 方块d
菱形v
^
<
>
p
五角形h
六角形
close all
关闭所有的figureclf
清空当前画布 clear current figure- 还有
cla
,清空坐标区
- 还有
subplot(row, col, n_th)
grid on
网格legend()
图例xlabel('')
ylabel('')
title('')
- 如果要LaTeX显示,需要在后面的
'Interpreter'
设置为'latex'
- 例如
1
title(['Predictive signal $\hat{d}(n)$ and orignal signal $d(n)$ with p=',num2str(p)],'Interpreter','latex');
- 例如
- 如果要LaTeX显示,需要在后面的
plot
修饰color+marker+line_shape
, e.g.'ro-.'
LineWidth
默认为1MarkerEdgeColor
Marker边缘的颜色MakerFaceColor
Marker里面的颜色
axis([x1 x2 y1 y2])
设置坐标轴范围
字符和字符串
strlength("string")
: 字符串长度- string 类型可以通过
{}
的方式提取出char类型结果,例如可以通过string{1}(2)
提取出第一个string中的第二个char input('Some suggestion string:','s')
输入的是char类型Upper
,全部大写strcmp(str1, str2, num)
,前num位的字符是否相同strfind(text, pattern)
找text中pattern 的位置strsplit(text, pattern)
split 字符串
元胞数组
{48, "uui", 1:4:9}
- 访问使用{index} {1,2}
结构体
S = struct('field1',VALUES1,'field2',VALUES2,...)
保存加载
save testfile.dat mydata -ascii
save 文件名 变量名load file_name.dat
可变长输入输出
- varargin{1}: variable argument input, cell 类型,存储输入参数
- nargin 输入参数个数
- varargout 输出参数
- nargout 输出个数
本地函数和嵌套函数
- 本地函数,单个m文件中定义的函数,作用域为整个m文件
- 嵌套函数(可以使用所有外层函数定义的量)
函数句柄
- function_handle,为一个单独的数据类型
- 使用 func_han = @(argm1, argm2) argm1*argm2; 即可定义手柄
- func2str(func_hndl);得到函数名字
- 相关函数
qammod
1 | ModDataTX = qammod(BinData, MOD, 'InputType', 'bit', 'PlotConstellation',true); |
注意 matlab中 vector’ 如果是vector复数向量,就算的直接是共轭转置,这个被坑过,如果想只转置可以用 vector.’
berfading
估计fading时的性能,参数是SNR,调制方式,调制模,复用参数
1 | EbNo = 8:2:20; % Eb/N0 |
随机数
rng('shuffle')
来使用当前时间作为随机数种子
rand
0-1 随机数
randi
伪随机整数
X = randi([imin,imax],size_1,size_2)
X = randi(imax,sz1,…,szN)
1 | randi([min max], row_number, col_number); |
randn
randn生成正态分布随机数
X = randn(n) 返回由正态分布的随机数组成的 n×n 矩阵。
X = randn(sz1,…,szN) 返回由随机数组成的 sz1×…×szN 数组,其中 sz1,…,szN 指示每个维度的大小。例如:randn(3,4) 返回一个 3×4 的矩阵。
X = randn(sz) 返回由随机数组成的数组,其中大小向量 sz 定义 size(X)。例如:randn([3 4]) 返回一个 3×4 的矩阵。