栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

基于Python的信号处理(1)——信号基础知识

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基于Python的信号处理(1)——信号基础知识

【摘要】

  • 使用Python进行信号处理
  • 参考书目:《数字信号处理——原理、算法与应用》第四版
  • 这是一个笔记,不一定全面
  • 本文主题:数字信号基本知识

目录
  • 1. 信号的数学表达
    • 1.1 连续时间正弦信号
    • 1.2 离散时间正弦信号
  • 2. 复指数信号与谐波
    • 2.1 连续时间复指数信号
    • 2.2 离散时间复指数信号
  • 3. 采样、模数/数模转换
    • 3.1 采样频率与信号频率之间的关系
    • 3.2 采样定理
  • 4. 实验代码
    • 4.1 软件包
    • 4.2 代码


1. 信号的数学表达 1.1 连续时间正弦信号

图1 模拟正弦信号及其参数

给定一个连续信号 x a ( t ) = A cos ( Ω t + θ ) x_a(t)=Atext{cos}(Omega t+theta) xa​(t)=Acos(Ωt+θ)它由三个参数完全表征:幅度 A A A、频率 Ω Omega Ω、相位 θ theta θ,而下标 a a a表示模拟信号。其中, Ω = 2 π F Omega=2pi F Ω=2πF
F F F为正弦函数周期的倒数(周期/秒), F = 1 / T p F=1/{T_p} F=1/Tp​, T p {T_p} Tp​为基本周期,如图1所示。此时有,
x a ( t ) = A cos ( 2 π F t + θ ) x_a(t)=Atext{cos}(2pi Ft+theta) xa​(t)=Acos(2πFt+θ)
利用欧拉恒等式( j = − 1 j=sqrt{-1} j=−1 ​)
e ± j ϕ = cos ( ϕ ) ± j sin ( ϕ ) e^{pm jphi}=text{cos}(phi)pm jtext{sin}(phi) e±jϕ=cos(ϕ)±jsin(ϕ)
得到信号的复指数形式
x a ( t ) = A 2 e j ( Ω t + θ ) + A 2 e − j ( Ω t + θ ) x_a(t)=frac{A}{2}e^{j(Omega t+theta)}+frac{A}{2}e^{-j(Omega t+theta)} xa​(t)=2A​ej(Ωt+θ)+2A​e−j(Ωt+θ)

1.2 离散时间正弦信号

离散时间正弦信号
x ( n ) = A cos ( ω n + θ ) , − ∞ < n < ∞ x(n)=Atext{cos}(omega n+theta),quad -infty

注意:这里的频率 ω omega ω是弧度/样本(rad/sample),而 θ theta θ的单位是弧度(rad)。

定义
ω = 2 π f omega=2pi f ω=2πf
则信号表示为
x ( n ) = A cos ( 2 π f n + θ ) , − ∞ < n < ∞ x(n)=Atext{cos}(2pi f n+theta),quad -infty 信号是周期的,且最小周期 N N N称为基本周期。

图2 离散正弦信号及其参数

图2显示了频率 ω = π / 6 rad / s omega=pi/6 text{rad}/s ω=π/6rad/s(f=1/12周期/样本),相位 θ = π / 3 theta=pi/3 θ=π/3的正弦信号。

离散时间信号特点:

  • 最高震荡频率在 ω = π omega=pi ω=π(或 ω = − π omega=-pi ω=−π)或 f = 1 / 2 f=1/2 f=1/2(或 f = − 1 / 2 f=-1/2 f=−1/2)时达到。

图3 不同频率对离散信号的影响

从图3可以看出,随着频率的增加,信号震荡逐渐加快。但是频率 ω = π omega=pi ω=π时,震荡不在增加,此时 f = 1 / 2 f=1/2 f=1/2,即每两个相邻样本之间经历半个周期。
频率能不能更快呢?不行。离散信号本质上都是对连续信号采样的结果,根据奈奎斯特采样定理,采样频率至少为信号频率的2倍才能恢复信号。很明显,一个正弦波周期内,至少要两个点才能确定其周期大小。

2. 复指数信号与谐波 2.1 连续时间复指数信号

与频率 Ω 0 Omega_0 Ω0​相关的连续时间谐波指数信号可以记为
s k ( t ) = e j k Ω 0 t = e j 2 π k F 0 t , k = ± 1 , ± 2 , ⋯ s_k(t)=e^{jk Omega_0 t}=e^{j2pi k F_0 t},quad k=pm 1,pm 2,cdots sk​(t)=ejkΩ0​t=ej2πkF0​t,k=±1,±2,⋯
其基本周期为 1 / ( k F 0 ) = T p / k 1/(kF_0)=Tp/k 1/(kF0​)=Tp/k,基本频率为 k F 0 kF_0 kF0​。构造谐波相关的复指数信号的线性组合
x a ( t ) = ∑ − ∞ ∞ c k s k ( t ) = ∑ − ∞ ∞ c k e j k Ω 0 t x_a(t)=sum_{-infty}^{infty}c_ks_k(t)=sum_{-infty}^{infty}c_ke^{jk Omega_0 t} xa​(t)=−∞∑∞​ck​sk​(t)=−∞∑∞​ck​ejkΩ0​t
其中 c k c_k ck​是任意复常数。上式为信号 x a ( t ) x_a(t) xa​(t)的傅里叶级数展开,信号 s k ( t ) s_k(t) sk​(t)称为第 k k k次谐波。

2.2 离散时间复指数信号

设离散周期复指数序列的周期为 N N N,则频率为 f 0 = 1 / N f_0=1/N f0​=1/N,谐波相关复指数为
s k ( n ) = e j 2 π k f 0 n , k = ± 1 , ± 2 , ⋯ s_k(n)=e^{j2pi kf_0n },quad k=pm 1,pm 2,cdots sk​(n)=ej2πkf0​n,k=±1,±2,⋯
基本周期为 N N N的信号 x ( n ) x(n) x(n)可以表示成傅里叶级数的形式
x ( n ) = ∑ k = 0 N − 1 c k s k ( n ) = ∑ k = 0 N − 1 c k e j 2 π k n / N x(n)=sum_{k=0}^{N-1}c_ks_k(n)=sum_{k=0}^{N-1}c_ke^{j2pi kn/N} x(n)=k=0∑N−1​ck​sk​(n)=k=0∑N−1​ck​ej2πkn/N
其中,复常数 { c k } {c_k} {ck​}为傅里叶系数。

3. 采样、模数/数模转换

模数转换(A/D):

  • 采样:采样间隔为 T T T
  • 量化:未量化样本 x a ( n ) x_a(n) xa​(n),量化输出 x q ( n ) x_q(n) xq​(n)
  • 编码:用 b b b位二进制序列对量化输出 x q ( n ) x_q(n) xq​(n)进行编码

数模转换(D/A):
举一个简单的例子:零阶保持数模转换

图4 零阶保持数模转换
3.1 采样频率与信号频率之间的关系

图5 模拟信号的周期采样
  • 采样周期: T T T
  • 采样频率: F s = 1 / T F_s=1/T Fs​=1/T

设模拟信号的频率为 F F F(或 Ω Omega Ω),考虑正弦形式
x a ( t ) = A cos ( 2 π F t + θ ) x_a(t)=Atext{cos}(2pi Ft+theta) xa​(t)=Acos(2πFt+θ)
采样( t = n T t=nT t=nT)后为
x ( n T ) = A cos ( 2 π F n T + θ ) = A cos ( 2 π F n F s + θ ) x(nT)=Atext{cos}(2pi FnT+theta)=Atext{cos}(frac{2pi Fn}{F_s}+theta) x(nT)=Acos(2πFnT+θ)=Acos(Fs​2πFn​+θ)
因此

连续时间离散时间信号
Ω = 2 π F Omega=2pi F Ω=2πF,弧度/秒,Hz ω = 2 π f omega=2pi f ω=2πf,弧度/样本,周期数/样本
{} f = F / F s f=F/F_s f=F/Fs​
{} ω = Ω T omega=Omega T ω=ΩT
{} − π ≤ ω ≤ π -pi le omega le pi −π≤ω≤π
{} − 1 2 ≤ f ≤ 1 2 -frac{1}{2} le fle frac{1}{2} −21​≤f≤21​
− ∞ ≤ Ω ≤ ∞ -infty le Omegale infty −∞≤Ω≤∞ − π T ≤ Ω ≤ π T -frac{pi}{T} le Omegale frac{pi}{T} −Tπ​≤Ω≤Tπ​
− ∞ ≤ F ≤ ∞ -infty le Fle infty −∞≤F≤∞ − F s 2 ≤ ω ≤ F s 2 -frac{F_s}{2} le omegale frac{F_s}{2} −2Fs​​≤ω≤2Fs​​
3.2 采样定理

采样定理:如果包含在某个模拟信号中 x a ( t ) x_a(t) xa​(t)中的最高频率是 F max = B F_{text{max}}=B Fmax​=B,而信号以采样速率 F s > 2 F max = 2 B F_s>2F_text{max}=2B Fs​>2Fmax​=2B采样,那么 x a ( t ) x_a(t) xa​(t)可以从样本值准确恢复,插值函数为sinc函数:
g ( t ) = sin ( 2 π B t ) 2 π B t g(t)=frac{text{sin}(2pi Bt)}{2pi Bt} g(t)=2πBtsin(2πBt)​
而 x a ( t ) x_a(t) xa​(t)可以表示为
x a ( t ) = ∑ n = − ∞ ∞ x a ( n F s ) g ( t − n F s ) x_a(t)=sum_{n=-infty}^{infty}x_aleft(frac{n}{F_s}right)gleft(t-frac{n}{F_s}right) xa​(t)=n=−∞∑∞​xa​(Fs​n​)g(t−Fs​n​)
其中 x a ( n / F s ) = x a ( n T ) = x ( n ) x_a(n/F_s)=x_a(nT)=x(n) xa​(n/Fs​)=xa​(nT)=x(n)是 x a ( t ) x_a(t) xa​(t)的样本。 采样频率 F N = 2 B = 2 F max F_N=2B=2F_text{max} FN​=2B=2Fmax​称为奈奎斯特频率。

图6 sinc函数形状
4. 实验代码 4.1 软件包
  • 使用numpy生成信号
  • 使用matplotlib画图
4.2 代码
  • 绘制 图3 不同频率对离散信号的影响
import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(10, 10))
a1 = plt.subplot2grid((3, 2), (0, 0), colspan=2)
a2 = plt.subplot2grid((3, 2), (1, 0))
a3 = plt.subplot2grid((3, 2), (1, 1))
a4 = plt.subplot2grid((3, 2), (2, 0))
a5 = plt.subplot2grid((3, 2), (2, 1))
ax = [a1, a2, a3, a4, a5]

n = np.linspace(-15, 15, 31)  # 信号样点
f = np.array([0, 1 / 16., 1 / 8., 1 / 4., -1 / 4.])  # 每个样点的基本周期
w = 2 * np.pi * f  # 角频率

for i in range(len(w)):
    y = np.cos(w[i] * n)  # 不同频率的信号
    ax[i].stem(n, y)  # 画图
    ax[i].set_ylabel('$omega=$' + str(f[i] * 2) + '$pi$')

plt.show()
  • 绘制 图6 sinc函数形状
plt.figure(figsize=(10, 5.5))
t = np.linspace(-5, 5, 501)
sinc = np.sin(2 * np.pi * t) / (2 * np.pi * t)
plt.plot(t, sinc, 'b', linewidth=3)
plt.xlabel('time($s$)', fontsize=20)
plt.ylabel("$g(t)$", fontsize=20)
plt.text(1, 0.4, r'$ g(t)=dfrac{sin(2pi t)}{2pi t}} $', fontsize=20)
plt.grid(True)
plt.tight_layout()
plt.show()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/822922.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号