当前位置: 首页 > news >正文

数字信号处理Python示例(7)生成复数指数函数

文章目录

  • 前言
  • 一、复指数函数的定义
  • 二、复指数函数的应用
  • 三、生成复指数函数的Python代码
  • 四、仿真结果及分析
  • 写在后面的话


前言

前面提到过指数函数有两种类型:实指数函数和复指数函数。在前面的示例中也介绍了实指数函数,这篇文件给出复指数函数的Python代码与仿真,并对仿真结果进行了详细的分析。


一、复指数函数的定义

复指数函数是指以复数为指数的指数函数,通常表示为 ez,其中 z 是一个复数,可以写作 z = x + yi,其中 x 和 y 是实数,i 是虚数单位,满足i2 = -1。

根据欧拉公式,复指数函数可以定义为:
ez = e(x+yi) = ex *eyi = ex *(cos(y) + sin(y)*i)
这里, e^x 是实数指数函数,而 cos(y) + sin(y)*i是复数的三角形式。

二、复指数函数的应用

复指数函数在信号处理、量子物理、电子工程等领域有广泛的应用,特别是在描述周期性现象和波动时。例如,在信号处理中,复指数函数扮演着基础和核心的角色,常用于表示正交正弦波和余弦波的和信号,简化了信号的数学表示和处理,是理解和应用DSP概念的关键工具。

三、生成复指数函数的Python代码

生成两个复数指数信号 x_1(t) = e^(jΩt) 和 x_2(t) = e^(-jΩt)。这里信号的频率固定为 f = 5 Hz。信号生成后,提取两个信号的幅度和相位。

import numpy as np
import matplotlib.pyplot as plt# 设定参数
f = 5  # 频率为5 Hz
omega = 2 * np.pi * f  # 角频率 ω = 2πf
t = np.linspace(0, 1, 1000)  # 生成时间向量,从01秒,共1000个点# 生成两个复数指数信号
x_1 = np.exp(1j * omega * t)  # x_1(t) = e^(jΩt)
x_2 = np.exp(-1j * omega * t)  # x_2(t) = e^(-jΩt)# 提取信号的幅度和相位
amplitude_x_1 = np.abs(x_1)  # x_1的幅度
phase_x_1 = np.angle(x_1)  # x_1的相位amplitude_x_2 = np.abs(x_2)  # x_2的幅度
phase_x_2 = np.angle(x_2)  # x_2的相位# 绘制幅度和相位
plt.figure(figsize=(12, 6))# 绘制x_1的波形、振幅和相位
plt.subplot(3, 2, 1)
plt.plot(t, x_1)
plt.title("x_1的波形")
plt.xlabel("时间 (s)")
plt.ylabel("幅度")plt.subplot(3, 2, 3)
plt.plot(t, amplitude_x_1)
plt.title("x_1的振幅")
plt.xlabel("时间 (s)")
plt.ylabel("振幅")plt.subplot(3, 2, 5)
plt.plot(t, phase_x_1)
plt.title("x_1的相位")
plt.xlabel("时间 (s)")
plt.ylabel("相位 (rad)")# 绘制x_2的波形、振幅和相位
plt.subplot(3, 2, 2)
plt.plot(t, x_2)
plt.title("x_2的波形")
plt.xlabel("时间 (s)")
plt.ylabel("幅度")plt.subplot(3, 2, 4)
plt.plot(t, amplitude_x_2)
plt.title("x_2的振幅")
plt.xlabel("时间 (s)")
plt.ylabel("振幅")plt.subplot(3, 2, 6)
plt.plot(t, phase_x_2)
plt.title("x_2的相位")
plt.xlabel("时间 (s)")
plt.ylabel("相位 (rad)")# 使用tight_layout自动调整子图参数,避免标签之间的重叠
plt.tight_layout()  
# 在所有子图上添加网格线
plt.grid(True)
# 显示绘制的图像
plt.show()

四、仿真结果及分析

以下是执行代码后画图的结果。

在这里插入图片描述

图中展示了两个复数指数信号 x1(t) 和x2(t)的波形、振幅和相位随时间的变化。具体来说:

(1)波形。子图一和二分别展示了x1(t) 和 x2 (t)的波形,包括实部和虚部。可以看出,这两个复指数信号是正弦和余弦波的组合。

(2)振幅。子图三和四分别展示了x1(t) 和x2(t) 的振幅随时间的变化。对于x1(t) 和x2(t),幅度始终为1。这是因为复数指数信号x1(t) = e^(jΩt) 的幅度由 x1(t) 的模 = cos^2(Ωt) + sin^2(Ωt) = 1 给出。同样,信号 x2(t) = e^(-jΩt) 的幅度由 x2(t) 的模 = cos^2(Ωt) + sin^2(Ωt) = 1 给出。因此,无论时间 t如何变化,这两个信号的幅度都是一条水平线。

(3)相位。子图五和六分别展示了x1(t) 和x2(t) 的相位随时间的变化。x1(t) 的相位随时间线性增加,从0开始,最大值接近2π,然后又回到0,呈周期变化。这表明信号在单位圆上顺时针旋转。x2(t) 的相位随时间线性减少,从0开始,最小值接近−2π,然后又回到0,呈周期变化。这表明信号在单位圆上逆时针旋转。

这两个信号是彼此的共轭信号,具有相同的幅度但相位相差π。在实际应用中,这样的信号常用于描述正反两个方向的波动或振动,例如在电磁波的传播中。


写在后面的话

这是《数字信号处理python示例》系列文章的第7篇。整个系列将使用python语言示例说明数字信号处理的基本原理与工程应用。给出的所有Python程序将努力做到简单且具有说明性。在数字信号处理的理论方面,将尽量避免数学上的推导与证明,而注重其物理意义阐述和工程应用的介绍。

感谢您的阅读!




http://www.mrgr.cn/news/67363.html

相关文章:

  • 【spring】Cookie和Session的设置与获取(@CookieValue()和@SessionAttribute())
  • 使用docker安装zlmediakit服务(zlm)
  • 代码随想录第二十二天
  • RabbitMQ应用问题
  • oracle insert忽略主键冲突,忽略重复记录
  • MySql中索引为什么用B+树,他有什么特点?时间复杂度是多少?能存多少数据?是不是只能三层?他与B-树有什么不同?还有其它的树你是是否知道?
  • Python | Leetcode Python题解之第543题二叉树的直径
  • 提高区块链网络TPS七步曲
  • 【知识科普】使用 OpenSSL为特定域名生成自签名证书
  • Python 详细实现无损压缩之 DEFLATE 算法
  • VS2013安装报错“windows程序兼容性模式已打开,请将其关闭 ”解决方案
  • Python | Leetcode Python题解之第542题01矩阵
  • wps怎么算出一行1和0两种数值中连续数值1的个数,出现0后不再计算?
  • Python练习9
  • 快速部署和体验内置开源 LLM 大模型
  • UE5.4 PCG基础节点
  • 【Linux 29】传输层协议 - UDP
  • Linux 使用及常用命令详解
  • 【Linux-进程间通信】消息队列
  • LLMs之Leaderboard:Chatbot Arena的简介、使用方法、案例应用之详细攻略
  • SIwave:释放 TDR(时域反射计)向导的强大功能
  • C++ | Leetcode C++题解之第543题二叉树的直径
  • 【1个月速成Java】基于Android平台开发个人记账app学习日记——第8天,完成注册登录并保存到数据库
  • GEE 使用 JavaScript 中的 API 自动删除文件夹内的所有资产
  • verilog-HDL基础
  • 超实惠的租借服务器训练深度学习方法