SignalsAndSystems-Preparation

SignalsAndSystems-Preparation

标签: SignalsAndSystems


概述

  信号与系统这门课程的实现大多是在Matlab环境下完成的,由于python相比Matlab而言较轻量,并且个人而言比较喜欢python,因此打算用python进行信号与系统这门课程的学习,第一次先用python做一些简单的实验。

基础概念

  首先熟悉一下用来表示连续时间信号的基本信号。

单位阶跃信号

  忽略t=0处的值,函数定义如下:
                      math1

单位冲激信号

  首先定义面积为1的矩形脉冲信号:
                    math1
  在矩形脉冲信号的基础上定义单位冲激信号:
                          math1
  具有筛选性质,用来筛选有用信号。

斜变信号

  其定义是在单位阶跃信号的基础上定义的,函数定义如下:
                            math1

代码实现

  由于是最基本的信号,所以代码移植到python上也比较简单。
  单位阶跃信号如下:

1
2
3
4
5
6
7
8
9
def ustep(t,ad):
n = len(t)
y = np.zeros(n)
for i in range(0,n-1):
if t[i] >= -ad:
y[i] = 0
else :
y[i] = 1
return y

  参数t为时间,参数ad为正时为超前系数,为负时为延迟系数。
  斜变信号如下:

1
2
3
4
5
6
7
8
9
def ramp(t,m,ad):
n = len(t)
y = np.zeros(n)
for i in range(0,n-1):
if t[i] > -ad:
y[i] = 0
else:
y[i] = m*(t[i] +ad)
return y

  参数t为时间支撑,参数m为斜变函数的斜率,参数ad意义与上同。
  之后我们利用单位阶跃信号和斜变信号组成一个稍微复杂一点的信号

1
2
3
4
x1 = np.arange(-6,6)
y1 = ramp(x1,3,3) + ramp(x1,-6,1) +ramp(x1,3,0) - 3*ustep(x1,-3)
plt.plot(x1,y1)
plt.show()

  输出如下:
photo1
  在此基础上再做一个简单的时移

1
2
3
4
5
6
7
x1 = np.arange(-6,6)
x2 = x1 - 2
y1 = ramp(x1,3,3) + ramp(x1,-6,1) +ramp(x1,3,0) - 3*ustep(x1,-3)
y2 = ramp(x2,3,3) + ramp(x2,-6,1) +ramp(x2,3,0) - 3*ustep(x2,-3)
plt.plot(x1,y1)
plt.plot(x1,y2)
plt.show()

  输出如下:
photo2

小结

  今天将Matlab代码部分移植到到python上,由于代码本身比较简单,所以移植也比较容易,目前感觉还是用python方便一些。