实验三:系统的时域分析

实验知识:
1.零状态响应概念:忽略系统的初始状态,只由外部激励作用于系统而产生的输出响应
2.冲激响应:冲激响应是指激励为单位冲激函数δ(t)时,系统的零状态响应
3.阶跃响应概念:阶跃响应是指输入量发生阶跃变化时动态系统的输出阶跃响应
1 实验目的
1 )学会利用 MATLAB 求解连续系统的零状态响应、冲激响应和阶跃响应;
2 )学会利用 MATLAB 求解离散系统的单位取样响应;
3 )学会利用 MATLAB 求解离散系统的卷积和。
2 实验原理及实例分析
先看例1:求连续系统的0状态响应
代码如下:
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal

# 阶跃函数
def uCT(t):
    return (t >= 0).astype(float)


t = np.arange(0, 5, 0.01)
sys = signal.TransferFunction([6], [1, 5, 6])  # 用传输函数形式表示系统

f = 10 * np.sin(2 * np.pi * t) * uCT(t)  # 输入信号/激励
t, y, _ = signal.lsim(sys, f, t)  # 对输入信号模拟仿真

plt.plot(t, y, linewidth=2)
plt.grid(True)
plt.xlabel('t(sec)')
plt.title('yzs(t)')

# 对取样间隔为0.5时系统响应进行仿真
t0 = np.arange(0, 5, 0.5)
f0 = 10 * np.sin(2 * np.pi * t0) * uCT(t0)  # 输入信号/激励
t0, y0, _ = signal.lsim(sys, f0, t0)  # 对输入信号模拟仿真

plt.plot(t0, y0, linewidth=2)
plt.show()

效果如下:

代码如下:

import numpy as np
import matplotlib.pyplot as plt
from scipy import signal

t = np.arange(0, 5, 0.01)
sys = signal.TransferFunction([1, 16], [1, 2, 32])

# 就是你懂的吧输出与输入的信号的系数分成两组来完成
t, h = signal.impulse(sys, T=t)  # 计算系统的冲激响应
t, g = signal.step(sys, T=t)  # 计算系统的阶跃响应

plt.subplot(2, 1, 1)
plt.plot(t, h, linewidth=2)
plt.grid(True)
plt.xlabel('t(sec)')
plt.title('h(t)')

plt.subplot(2, 1, 2)
plt.plot(t, g, linewidth=2)
plt.grid(True)
plt.xlabel('t(sec)')
plt.title('g(t)')

plt.tight_layout()# 调整子图的布局,避免重叠
plt.show()

运行结果如下:

离散系统的响应

代码如下:

import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import lfilter

# 差分方程的系数
a = [3, -4, 2]
b = [1, 2]
# arrange函数是左闭右开的所以为了30可以取到应该是31
n = np.arange(0, 31)

# 输入激励信号
x = (1/2) ** n
y = lfilter(b, a, x)

plt.stem(n, y)
plt.grid(True)
plt.xlabel('n')
plt.title('y(n)')
plt.show()

代码的运行结果如下:

离散系统的单位抽样响应

import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import dimpulse

# 差分方程的系数
a = [3, -4, 2]
b = [1, 2]
# arrange函数是左闭右开的所以为了30可以取到应该是31
n = np.arange(0, 1000)

# 输入激励信号
x = (1/2) ** n
n, h = dimpulse((b, a, 100))

plt.stem(n, h[0])
plt.grid(True)
plt.xlabel('n')
plt.title('y(n)')
plt.show()

我的代码的精确度比实验书上的精确度更加的高

运行结果可以很清晰的看出来但是迭代 的次数很多,后面的几个点都很模糊

离散卷积和计算:

代码如下:

import numpy as np
import matplotlib.pyplot as plt


# 手搓阶跃函数好累
def uct(t):
    return (t >= 0).astype(float)


nx = np.arange(-1, 5)
nh = np.arange(-2, 10)

# 激励
x = uct(nx) - uct(nx - 4)
# 单位阶跃响应
h = 0.8 ** nh * (uct(nh) - uct(nh - 8))

# 卷积计算,在matlab里面直接就是conv函数进行卷积就行了
y = np.convolve(x, h)
ny = np.arange(min(nx) + min(nh), max(nx) + max(nh) + 1)

plt.subplot(3, 1, 1)
plt.stem(nx, x)
plt.grid(True)
plt.title("x(n)")
plt.xlabel("n")

plt.subplot(3, 1, 2)
plt.stem(nh, h)
plt.grid(True)
plt.title("h(n)")
plt.xlabel("n")

plt.subplot(3, 1, 3)
plt.stem(ny, y[:len(ny)])
plt.grid(True)
plt.title("y(n)")
plt.xlabel("n")

plt.tight_layout()
plt.show()

代码的运行结果如下:

思考题:

代码如下:

import numpy as np
import matplotlib.pyplot as plt
from scipy import signal

t = np.arange(0, 5, 0.01)
sys = signal.TransferFunction([1], [1, 2, 2])

# 就是你懂的吧输出与输入的信号的系数分成两组来完成
t, h = signal.impulse(sys, T=t)  # 计算系统的冲激响应
t, g = signal.step(sys, T=t)  # 计算系统的阶跃响应

plt.subplot(2, 1, 1)
plt.plot(t, h, linewidth=2)
plt.grid(True)
plt.xlabel('t(sec)')
plt.title('h(t)')

plt.subplot(2, 1, 2)
plt.plot(t, g, linewidth=2)
plt.grid(True)
plt.xlabel('t(sec)')
plt.title('g(t)')

plt.tight_layout()# 调整子图的布局,避免重叠
plt.show()

运行结果如下:

手算过程就不写了很简单

2.这个第二题我真是服了,有什么关系不就是挨个卷积吗

3.

代码如下:

import numpy as np
import matplotlib.pyplot as plt
from scipy import signal

b = [1]
a = [1, 2, 1]

t, h = signal.impulse((b, a))


plt.subplot(3, 1, 1)
plt.stem(t, h)
plt.title('单位冲激响应')

# Define input signal
f = (1/4) * np.ones(16)

y2 = np.convolve(h, f, mode='full')
plt.subplot(3, 1, 3)
plt.stem(y2[:len(t)])
plt.title('零状态响应')

t_step, y_step = signal.step((b, a))
plt.figure()
plt.stem(t_step, y_step)
plt.title('单位阶跃响应')
plt.xlabel('t')
plt.ylabel('y(t)')

plt.tight_layout()
plt.show()

运行结果如下:

产生差异的原因可能是数值取值的不当

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值