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

【摘要】

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


1. 信号的数学表达

1.1 连续时间正弦信号

在这里插入图片描述

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

给定一个连续信号x a ( t ) = A cos ( Ω t + θ ) x_a(t)=A\text{cos}(\Omega t+\theta)xa(t)=Acos(Ωt+θ)它由三个参数完全表征:幅度A AA、频率Ω \OmegaΩ、相位θ \thetaθ,而下标a aa表示模拟信号。其中,Ω = 2 π F \Omega=2\pi FΩ=2πF
F FF为正弦函数周期的倒数(周期/秒),F = 1 / T p F=1/{T_p}F=1/TpT 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 -\infty<n<\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 -\infty<n<\inftyx(n)=Acos(2πfn+θ),<n<
信号是周期的,且最小周期N NN称为基本周期。

在这里插入图片描述

图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/2f=1/2(或f = − 1 / 2 f=-1/2f=1/2)时达到。

在这里插入图片描述

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

从图3可以看出,随着频率的增加,信号震荡逐渐加快。但是频率ω = π \omega=\piω=π时,震荡不在增加,此时f = 1 / 2 f=1/2f=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,\cdotssk(t)=ejkΩ0t=ej2πkF0t,k=±1,±2,
其基本周期为1 / ( k F 0 ) = T p / k 1/(kF_0)=Tp/k1/(kF0)=Tp/k,基本频率为k F 0 kF_0kF0。构造谐波相关的复指数信号的线性组合
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_kck是任意复常数。上式为信号x a ( t ) x_a(t)xa(t)的傅里叶级数展开,信号s k ( t ) s_k(t)sk(t)称为第k kk次谐波。

2.2 离散时间复指数信号

设离散周期复指数序列的周期为N NN,则频率为f 0 = 1 / N f_0=1/Nf0=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,\cdotssk(n)=ej2πkf0n,k=±1,±2,
基本周期为N NN的信号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 TT
  • 量化:未量化样本x a ( n ) x_a(n)xa(n),量化输出x q ( n ) x_q(n)xq(n)
  • 编码:用b bb位二进制序列对量化输出x q ( n ) x_q(n)xq(n)进行编码

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

在这里插入图片描述

图4 零阶保持数模转换

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

在这里插入图片描述

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

设模拟信号的频率为F FF(或Ω \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=nTt=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_sf=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 \inftyF− 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}}=BFmax=B,而信号以采样速率F s > 2 F max = 2 B F_s>2F_\text{max}=2BFs>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称为奈奎斯特频率

在这里插入图片描述

图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()


版权声明:本文为keypig_zz原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。