基于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 连续时间正弦信号

基于Python的信号处理(1)——信号基础知识_第1张图片

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

给定一个连续信号 x a ( t ) = A cos ( Ω t + θ ) x_a(t)=A\text{cos}(\Omega t+\theta) xa(t)=Acos(Ωt+θ)它由三个参数完全表征:幅度 A A A、频率 Ω \Omega Ω、相位 θ \theta θ,而下标 a a a表示模拟信号。其中, Ω = 2 π F \Omega=2\pi 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)=A\text{cos}(2\pi Ft+\theta) xa(t)=Acos(2πFt+θ)
利用欧拉恒等式( j = − 1 j=\sqrt{-1} j=1 )
e ± j ϕ = cos ( ϕ ) ± j sin ( ϕ ) e^{\pm j\phi}=\text{cos}(\phi)\pm j\text{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)=2Aej(Ωt+θ)+2Aej(Ωt+θ)

1.2 离散时间正弦信号

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

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

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

基于Python的信号处理(1)——信号基础知识_第2张图片

图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)时达到。

基于Python的信号处理(1)——信号基础知识_第3张图片

图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^{j2\pi k F_0 t},\quad k=\pm 1,\pm 2,\cdots sk(t)=ejkΩ0t=ej2πkF0t,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)=cksk(t)=ckejkΩ0t
其中 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^{j2\pi kf_0n },\quad k=\pm 1,\pm 2,\cdots sk(n)=ej2πkf0n,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^{j2\pi kn/N} x(n)=k=0N1cksk(n)=k=0N1ckej2π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):
举一个简单的例子:零阶保持数模转换

基于Python的信号处理(1)——信号基础知识_第4张图片

图4 零阶保持数模转换

3.1 采样频率与信号频率之间的关系

基于Python的信号处理(1)——信号基础知识_第5张图片

图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)=A\text{cos}(2\pi 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)=A\text{cos}(2\pi FnT+\theta)=A\text{cos}(\frac{2\pi Fn}{F_s}+\theta) x(nT)=Acos(2πFnT+θ)=Acos(Fs2πFn+θ)
因此

连续时间 离散时间信号
Ω = 2 π F \Omega=2\pi F Ω=2πF,弧度/秒,Hz ω = 2 π f \omega=2\pi 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 f\le \frac{1}{2} 21f21
− ∞ ≤ Ω ≤ ∞ -\infty \le \Omega\le \infty Ω − π T ≤ Ω ≤ π T -\frac{\pi}{T} \le \Omega\le \frac{\pi}{T} TπΩTπ
− ∞ ≤ F ≤ ∞ -\infty \le F\le \infty F − F s 2 ≤ ω ≤ F s 2 -\frac{F_s}{2} \le \omega\le \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}(2\pi Bt)}{2\pi 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_a\left(\frac{n}{F_s}\right)g\left(t-\frac{n}{F_s}\right) xa(t)=n=xa(Fsn)g(tFsn)
其中 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称为奈奎斯特频率

基于Python的信号处理(1)——信号基础知识_第6张图片

图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(2\pi t)}{2\pi t}} $', fontsize=20)
plt.grid(True)
plt.tight_layout()
plt.show()

你可能感兴趣的:(基于Python的信号处理,Python编程,信号处理,数字信号处理,数字通信)