Python信号分析 | 信号运算

    xiaoxiao2022-07-05  185

    1、连续信号的相加与相乘 在MATLAB和Python中,连续信号的相加、相减和相乘都是用符号“+”“-”“*”实现的。 Python代码如下:

    """ 连续信号相加和相乘 """ import numpy as np import matplotlib.pyplot as plt t = np.linspace(0,2,200) f1 = np.exp(-3*t) f2 = np.sin(4*np.pi*t) plt.subplot(221) plt.ylim(-1,2) plt.title(u'f1') plt.plot(t,f1) plt.subplot(222) plt.title(u'f2') plt.plot(t,f2) plt.subplot(223) plt.title(u'f3=f1+f2') plt.plot(t,f1+f2) plt.subplot(224) plt.title(u'f4=f1*f2') plt.plot(t,f1*f2) plt.show()

    运行结果: 2、序列的相加与相乘 在MATLAB和Python中,序列的相加和相乘运算不能通过符号运算来实现,必须通过向量表示的方法来实现。且参加运算的两个序列向量要有相同的维数。 Python代码如下:

    """ 序列的相加和相乘 """ import numpy as np import matplotlib.pyplot as plt n1=np.arange(-2,3) f1=[2,0,0,1,6] n2=np.arange(0,6) f2=[1,2,4,5,7,8] n=np.arange(np.min([np.min(n1),np.min(n2)]),np.max([np.max(n1),np.max(n2)])+1) s1=np.zeros(np.size(n),np.int) s2=np.zeros(np.size(n),np.int) ln=list(n) s1[ln.index(n1[0]):ln.index(n1[0])+np.size(n1)]=f1 s2[ln.index(n2[0]):ln.index(n2[0])+np.size(n2)]=f2 x=s1+s2 y=s1*s2 plt.subplot(221) plt.title(u'f1') plt.stem(n1,f1) plt.subplot(222) plt.title(u'f2') plt.stem(n2,f2) plt.subplot(223) plt.title(u'f3=f1+f2') plt.stem(n,x) plt.subplot(224) plt.title(u'f4=f1*f2') plt.stem(n,y) plt.show()

    运行结果: 3、序列的差分与部分和 在MATLAB中,用diff函数计算序列相邻元素的差分,用sum函数实现部分和。 Python与之类似。 Python代码如下:

    """ 序列的差分与部分和 """ import numpy as np n=np.arange(0,10) f=[1,2,3,4,5,6,7,8,9,10] fn=np.diff(f) print('fn=',fn) y=np.sum(f) print('y=',y)

    运行结果: fn= [1 1 1 1 1 1 1 1 1] y= 55

    4、连续信号的微积分 (1)在MATLAB中, 微分:y=diff(ft) 不定积分:y=int(ft) 定积分:quad(‘function_name’,a,b) 其中为被积函数名,a与b为指定积分区间。 (2)在Python中, 微分:diff函数 积分:integrate函数 Python代码如下:

    """ 连续信号的微积分 """ from sympy import * x = symbols('x') y=diff(exp(-3*x),x) h=integrate(exp(-3*x),x) plot(y,xlim=[-1,1],ylim=[-10,0.1],ylabel='',title='微分') plot(h,xlim=[-2,1],ylim=[-10,0.1],ylabel='',title='积分')

    运行结果:

    5、离散信号的卷积和 在MATLAB中用conv函数来求离散信号的卷积和,调用格式为: y=conv(f1,f2) 在Python中用convolve函数来求解离散信号卷积和,调用格式为: convolve(a,v,mode=’ ') mode默认为“full”,该项可以省略。 Python代码如下:

    """ 离散信号的卷积和 """ import numpy as np import matplotlib.pyplot as plt n1=np.arange(0,4) x1=[1,2,4,5] n2=np.arange(0,3) x2=[1,2,1] n=np.arange(0,np.size(n1)+np.size(n2)-1) f=np.convolve(x1,x2) plt.stem(n,f) plt.show()

    运行结果:

    6、连续信号的卷积和 MATLAB中应用conv函数近似计算信号的卷积积分,Python中用convolve函数近似计算。 Python代码如下:

    """ 连续信号的卷积积分 """ import numpy as np import matplotlib.pyplot as plt def unit(t): r=np.where(t>0.0,1.0,0.0) return r def fconv(f1,f2,t1,t2): d=0.01 f=np.convolve(f1,f2) f=f*d ts=t1[0]+t2[0] l=np.size(f1)+np.size(f2)-1 t=np.linspace(ts,ts+l*d,l) return t,f t1=np.linspace(-1,3,400) f1=unit(t1)-unit(t1-2) t2=t1 f2=np.exp(-3*t2)*unit(t2) [t,f]=fconv(f1,f2,t1,t2) print(np.max(f)) plt.subplot(221) plt.title(u'f1') plt.plot(t1,f1) plt.subplot(222) plt.title(u'f2') plt.plot(t2,f2) plt.subplot(212) plt.title(u'卷积') plt.plot(t,f) plt.show()

    运行结果:

    最新回复(0)