w=0:0.02:5; h=impulse(num,den,t); plot(w,angle(H)); 然后显示数组索引必须为正整数或逻辑值。 出错 Untitled5 (第 21 行) plot(w,angle(H));
时间: 2023-11-19 20:05:00 浏览: 33
在这段代码中,变量h被定义为impulse函数的输出,而变量H则未定义。因此,您需要将变量h替换为H,即:
```
w = 0:0.02:5;
H = impulse(num, den, t);
plot(w, angle(H));
```
请注意,如果变量num、den和t未被定义或被定义但不正确,代码也会出现错误。在运行代码之前,请确保这些变量已经被正确定义并赋值。
相关问题
clear all; t=0:0.1:12; kesi=0.9; % 改变值,即求不同的曲线 num=[1]; den=[1 2*kesi 1]; y=impulse(num,den,t); plot(t,y) hold on
这段代码使用了MATLAB语言,它的作用是画出一个阻尼比为0.9的二阶系统的阶跃响应曲线。
首先,使用`clear all`清空MATLAB工作空间中的所有变量和函数。然后,定义时间变量`t`,从0到12,步长为0.1,表示时间的范围和精度。定义阻尼比变量`kesi`为0.9,表示二阶系统的阻尼比为0.9。
接下来,定义分子多项式`num=[1]`,表示一阶系统的分子为1。定义分母多项式`den=[1 2*kesi 1]`,表示二阶系统的分母为$s^2+2\zeta\omega_ns+\omega_n^2$,其中$\zeta$为阻尼比,$\omega_n$为自然频率。代入数值后得到分母为$s^2+1.8s+1$。
使用`impulse(num,den,t)`函数计算出二阶系统的阶跃响应,即输入单位阶跃信号后系统的输出响应。将计算结果保存在变量`y`中。
最后,使用`plot(t,y)`函数将`y`关于`t`的曲线画出,并使用`hold on`函数保持画布以便在同一张图中画出多条曲线。
数组索引必须为正整数或逻辑值。 出错 Untitled5 (第 21 行) plot(w,angle(H));
这个错误提示通常表示在plot函数中,输入的第二个参数是错误的类型。
在您的代码中,变量H是通过impulse函数计算得到的,它是一个时域下的冲击响应。如果要绘制它的相位谱,应该先将它转换为频域下的传递函数,然后再计算相位谱。
下面是一个示例代码,可以用来绘制传递函数的幅频和相频特性:
```
w = 0:0.02:5;
s = tf('s');
H = (num/den)*exp(-s*t);
mag = abs(H);
phase = angle(H);
subplot(2,1,1);
semilogx(w, 20*log10(mag));
xlabel('Frequency (rad/s)');
ylabel('Magnitude (dB)');
title('Bode Plot');
grid on;
subplot(2,1,2);
semilogx(w, phase);
xlabel('Frequency (rad/s)');
ylabel('Phase (deg)');
grid on;
```
在这个代码中,我们首先使用tf函数创建了一个连续时间域的传递函数s,然后将num和den作为其参数,得到一个传递函数H。接着我们通过exp函数将其转换为时域下的冲击响应。
最后,我们使用semilogx函数分别绘制了传递函数的幅频和相频特性。请注意,我们在幅频特性的绘制中使用了20*log10函数来将幅值转换为分贝单位。