实验二:信号的表示与运算

本文通过实例展示了如何使用Matlab进行信号表示、波形观察、平移、相乘、相加、反转、尺度变换以及一些高级运算,如复数分解和阶跃/门函数。
摘要由CSDN通过智能技术生成

1.学会利用matlab表示常用的信号,观察其波形和特性

2.学会利用matlab进行常用的平移,相乘,相加,反转,尺度变换等运算

例一:代码如下:

import numpy as np
import matplotlib.pyplot as plt

t = np.arange(0, 3, 0.01)
ft = 2 * np.exp(-1.5 * t)

plt.plot(t, ft, linewidth=2)
# 该语句是显示表格
plt.grid(True)
# 设置表格的x,y的坐标的范围
plt.axis([0, 3, 0, 2.5])

# 设置x,y的标签
plt.xlabel("t(sec)")
plt.title("单边衰减指数信号")

# 显示最后的表格
plt.show()

运行结果如下:

例二:

代码如下:

import numpy as np
import matplotlib.pyplot as plt

t = np.arange(0, 3, 0.01)
ft = 2*np.sin(2*np.pi*t+np.pi/4)

plt.plot(t, ft, linewidth=2)
# 该语句是显示表格
plt.grid(True)
# 设置表格的x,y的坐标的范围
plt.axis([0, 3, -2.5, 2.5])

# 设置x,y的标签
plt.xlabel("t(秒)")
plt.title("正弦信号")

# 显示最后的表格
plt.show()

运行结果如下:

例三:

代码如下:

import numpy as np
import matplotlib.pyplot as plt
from numpy import real, imag, angle, abs

t = np.arange(0, 3, 0.01)
ft = 2 * np.exp((-1.5 + 10j) * t)

plt.subplot(2, 2, 1)
plt.plot(t, real(ft), linewidth=2)
plt.title("实部")
plt.grid(True)
plt.axis([0, 3, -2, 2])

plt.subplot(2, 2, 2)
plt.plot(t, imag(ft), linewidth=2)
plt.title("虚部")
plt.grid(True)
plt.axis([0, 3, -2, 2])

plt.subplot(2, 2, 3)
plt.plot(t, abs(ft), linewidth=2)
plt.title("模")
plt.grid(True)
plt.axis([0, 3, 0, 2])

plt.subplot(2, 2, 4)
plt.plot(t, angle(ft, deg=True), linewidth=2)
plt.title("相角(度)")
plt.grid(True)
plt.axis([0, 3, -200, 200])

plt.show()

运行结果如下:

例四:代码如下:

import numpy as np
import matplotlib.pyplot as plt

def ucT(t):
    return (t >= 0).astype(float)

t = np.arange(-1, 5, 0.001)
ft = ucT(t)

plt.plot(t, ft, linewidth=2)
plt.grid(True)
plt.axis([-1, 5, -0.5, 1.5])
plt.title("单位阶跃信号")
plt.xlabel("t(sec)")

plt.show()

运行结果如下:

例5:在上面的例子进行修改就可以变成一个门函数

代码 如下:

import numpy as np
import matplotlib.pyplot as plt


def ucT(t):
    return (t >= 0).astype(float)


t = np.arange(-2, 2, 0.001)
ft = ucT(t+0.5)-ucT(t-0.5)

plt.plot(t, ft, linewidth=2)
plt.grid(True)
plt.axis([-1.5, 1.5, -0.5, 1.5])
plt.title('单位阶跃信号')
plt.xlabel("t(sec)")

plt.show()

运行结果如下:

例6:

信号的运算

代码如下:

import numpy as np
import matplotlib.pyplot as plt

f = 1
t = np.arange(0, 3, 0.01)
f1 = np.sin(2*np.pi*f*t)
f2 = np.sin(2*np.pi*f*t*8)

plt.subplot(2, 2, 1)
plt.plot(t, f1, linewidth=2)
plt.plot(t, f1+f2, linewidth=2)
plt.grid(True)
# 加一个辨识性的标签
plt.legend('f1', 'f1+f2')
plt.title('f1+f2')
plt.xlabel('t')
plt.axis([0, 3, -2, 2])


plt.subplot(2, 2, 2)
plt.plot(t, f1, linewidth=2)
plt.plot( t, f1*f2,linewidth=2)
plt.grid(True)
# 加一个辨识性的标签
plt.legend('f1', 'f1*f2')
plt.title('f1*f2')
plt.xlabel('t')
plt.axis([0, 3, -2, 2])

plt.show()

运行结果如下:

例7:

代码如下:

import numpy as np
import matplotlib.pyplot as plt


def ucT(t):
    return (t >= 0).astype(float)


def f(t):
    return ucT(t + 2) - ucT(t) + (-t + 1) * (ucT(t) - ucT(t - 1))


t = np.arange(-2, 4, 0.001)
ft1 = f(t - 2)
ft2 = f(3 * t)
ft3 = f(-t)
ft4 = f(-3 * t - 2)

plt.subplot(2, 2, 1)
plt.plot(t, ft1, linewidth=2)
plt.xlabel("t")
plt.title('f(t-2)')
plt.grid(True)
plt.axis([-2, 4, -0.5, 2])

plt.subplot(2, 2, 2)
plt.plot(t, ft2, linewidth=2)
plt.xlabel("t")
plt.title('f(3*t)')
plt.grid(True)
plt.axis([-2, 4, -0.5, 2])

plt.subplot(2, 2, 3)
plt.plot(t, ft3, linewidth=2)
plt.xlabel("t")
plt.title('f(-t)')
plt.grid(True)
plt.axis([-2, 4, -0.5, 2])

plt.subplot(2, 2, 4)
plt.plot(t, ft4, linewidth=2)
plt.xlabel("t")
plt.title('f(-3*t-2)')
plt.grid(True)
plt.axis([-2, 4, -0.5, 2])

plt.show()

运行结果如下:

思考题:

为了避免麻烦,全部画在一张图里

代码如下:

import numpy as np
import matplotlib.pyplot as plt


def ucT(t):
    return (t >= 0).astype(float)
# 这个是实现阶跃函数,bool转变为float

t = np.arange(-2, 6, 0.01)  # 调整时间范围和步长
f1 = (2 - np.exp(-2 * t)) * ucT(t)
f2 = np.cos((np.pi * t) / 2) * (ucT(t) - ucT(t - 4))
f3 = np.exp(t) * np.cos(t) * ucT(t)

plt.subplot(2, 2, 1)
plt.plot(t, f1, linewidth=2)
plt.title("f1(t)")
plt.xlabel("t")
plt.grid(True)
plt.axis([-2, 6, -0.5, 2])  

plt.subplot(2, 2, 2)
plt.plot(t, f2, linewidth=2)
plt.title("f2(t)")
plt.xlabel("t")
plt.grid(True)
plt.axis([-2, 6, -1.5, 1.5])  

plt.subplot(2, 2, 3)
plt.plot(t, f3, linewidth=2)
plt.title("f3(t)")
plt.xlabel("t")
plt.grid(True)
plt.axis([-2, 6, -1, 2])

plt.show()

运行结果如下:

下一道题:

首先要创建f(t)函数:

def f(t):
    return 2 * ucT(t) - ucT(t - 1) - ucT(t - 2)

测试效果如下:

完整代码如下:

import numpy as np
import matplotlib.pyplot as plt


def ucT(t):
    return (t >= 0).astype(float)


def f(t):
    return 2 * ucT(t) - ucT(t - 1) - ucT(t - 2)


t = np.arange(-2, 6, 0.001)
f1t = f(-t)
f2t = f(t-2)
f3t = f(0.5*t+1)

plt.subplot(2, 2, 1)
plt.plot(t, f1t, linewidth=2)
plt.title("f1(t)")
plt.xlabel("t")
plt.grid(True)
plt.axis([-2, 6, -1, 3])

plt.subplot(2, 2, 2)
plt.plot(t, f2t, linewidth=2)
plt.title("f2(t)")
plt.xlabel("t")
plt.grid(True)
plt.axis([-2, 6, -1, 3])

plt.subplot(2, 2, 3)
plt.plot(t, f3t, linewidth=2)
plt.title("f3(t)")
plt.xlabel("t")
plt.grid(True)
plt.axis([-2, 6, -1, 3])

plt.show()

测试效果如下:

如有错误请指出,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值