matlab作图时,在循环中改变标题以及线型标注

学习笔记,共同进步。

适用场景

在某些情况下使用matlab作图时,我们希望多次改变某个或者某些参数并观察其对整体图形的影响,这时候循环就是一个不错的选择,避免了整体代码的冗杂。
特别的,当作图前我们所写的代码比较复杂其我们所要改变的参数不能有效利用syms函数去表达时,循环作图就显得尤为迫切。

clc
clear
% 滤波器指标
wp=0.2*pi;
ws=0.3*pi;
ap=1;
ar=15;
T=0.1;% T=0.1 0.2 0.3 0.35 采样时间
[N,wc]=buttord(wp,ws,ap,ar,"s");
[Z,P,K]=buttap(N);
z=Z*wc;p=P*wc;k=K*wc^N;
B=k*real(poly(z));
A=real(poly(p));
w=0:pi/200:2*pi;% 设定频率
[b,a]=impinvar(B,A,1/T);% 计算系统函数系数
Ha=freqs(B,A,w/T);% 模拟响应
H=freqz(b,a,w/T);% 数字响应
plot(w/pi,abs(H),w/pi,abs(Ha))
title('采样频率T=0.1')
xlabel('频率f/\it{Hz}')
ylabel('幅值')

上图代码中,我们用脉冲响应不变法设计巴特沃斯滤波器。同时,我们希望控制T以实现不同采样频率对滤波器频率响应的影响,且要求在一张图上画出滤波器的模拟响应和数字响应。
因此,我们自然想到运用一个循环把四个T值时的图全画出来。

困难

  1. 由于impinvar函数的输入参数要求,我们没办法用syms将T先定义为变量最后再进行赋值。
  2. 对每个图作不同的线型标注

解决

clc
clear
% 滤波器指标
wp=0.2*pi;
ws=0.3*pi;
ap=1;
ar=15;
t=[0.1 0.2 0.3 0.35];% t储存采样时间
[N,wc]=buttord(wp,ws,ap,ar,"s");
[Z,P,K]=buttap(N);
z=Z*wc;p=P*wc;k=K*wc^N;
B=k*real(poly(z));
A=real(poly(p));
w=0:pi/200:2*pi;% 设定频率范围
cel={'--','+-','*-','o'};% 线型和标注符号
for i=1:4 % 循环以满足不同采样时间的对比
    T=t(i); % 采样时间T=0.1 0.2 0.3 0.35
    [b,a]=impinvar(B,A,1/T);% 计算系统函数系数
    Ha=freqs(B,A,w/T);% 模拟响应
    H=freqz(b,a,w/T);% 数字响应
    subplot(2,2,i)
    cell_line=cel(i);
    char_line=char(cell_line);
    plot(w/pi,abs(H),w/pi,abs(Ha),char_line)
    title(['采样频率T=',num2str(t(i))])
    xlabel('频率f/\it{Hz}')
    ylabel('幅值')
end

说明

  1. 用 t 储存 T 的不同取值;cel 是元胞数组,储存线型标志

  2. cell_line=cel(i); char_line=char(cell_line);保证线型标志类型为 char

  3. title(['采样频率T=',num2str(t(i))]) 随循环改变图的标题

感谢观看,有问题请指正,谢谢!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值