目录
前言
在学习工作中,信手记录一些matlab代码编写的小技巧,以备查阅,也用以共勉。
1. 代码换行编写
在行末,在英文状态下,加入输入: …
filtobj = designfilt('lowpassfir', 'FilterOrder', filterOrder, ...
'PassbandFrequency', passBandFreq, ...
'StopbandFrequency', stopBandFreq, 'DesignMethod', ...
'ls');
这通常用于当前行代码太长,不方便阅读的时候;或者是在数据/参数设置的时候,为了格式规整,以方便阅读的时候。
2. Char[]和数值连接
title(strcat('dout\_us magnitude response ', num2str(i)));
这里注意,画图时用的title()命令中,若要正常显示“_”需要在前面加上”\”,否则会将”_”后面的字符作为下标显示;如下图所示,第1张图为不加”\”时的效果,第2张图为加”\” 时的效果。
原因解析:matlab缺省地以Latex的方式进行解释(在Latex排版中,“_”表示下标,参见Latex公式编辑小贴士(动态更新中)_chenxy_bwave的专栏-优快云博客)。除了用文中所说的加前置“\”来取消Latex解释,还可以用以下方式: lgd = legend; set(lgd, 'Interpreter', 'none'); 即通过名令来告诉matlab不要进行‘过度’解释啊。
3. 将命令行窗口输出的信息打印到文件
diary('sim_txlpf_log.dat');
diary on;
fprintf(1, "data_type = %d : awgn\n", data_type);
disp('hello');
diary off;
这里,同时顺便介绍了两种命令行窗口输出的方法fprintf和disp。
上图中,输出文件用了相对路径的方式,相对路径下输出文件将在当前工作目录下生成:
diary('sim_txlpf_log.txt');
也可以使用绝对路径的方式:
diary('D:\sim_txlpf_log.txt');
4. 如何判断一个数为复数
用if (~isreal(x)) 来判断,示例代码如下:
5. 获取一个数的bit位
使用bitget(),示例代码如下:
sig_bw = [1,2,4,8];
for i = 1:4
sig_bw_bit = bitget(sig_bw(i), 4:-1:1); % 正序
fprintf(1, "sig_bw = %d = 4'b%4s, sig_bw_bit[3:0] = %d %d %d %d\n", ...
sig_bw(i), dec2bin(sig_bw(i)), sig_bw_bit(1), sig_bw_bit(2), sig_bw_bit(3), sig_bw_bit(4));
sig_bw_bit = bitget(sig_bw(i), 1:1:4); % 逆序
fprintf(1, "sig_bw = %d = 4'b%4s, sig_bw_bit[3:0] = %d %d %d %d\n", ...
sig_bw(i), dec2bin(sig_bw(i)), sig_bw_bit(1), sig_bw_bit(2), sig_bw_bit(3), sig_bw_bit(4));
end
运行结果如下:
6. 断言
assert(cond) throws an error if cond is false.
代码示例:
a = 1;
b = 1;
assert(a == b);
assert(a ~= b);