13、滤波器设计与数字信号处理中的数值表示

滤波器设计与数字信号处理中的数值表示

1. 滤波器设计问题

1.1 滤波器设计问题概述

在滤波器设计中,我们会遇到各种具体的设计问题,这些问题涵盖了从计算绝对幅度到设计不同类型滤波器的多个方面。

1.2 具体问题列表

  1. 计算绝对幅度 :需要计算给定分贝规格的绝对幅度,包括通带幅度(0 dB)、通带纹波(0.1 dB)和阻带衰减(80 dB)。
  2. 计算频率 :计算不同情况下的循环、离散、归一化频率,例如$f = 2000 Hz$(采样频率$f_s = 10,000 Hz$)、$x = \frac{\pi}{4}$(采样频率$f_s = 10,000 Hz$)以及$\frac{3}{4}$归一化频率(采样频率$f_s = 10,000 Hz$)。
  3. 设计 FIR 滤波器 :根据不同的规格设计 FIR 滤波器,包括低通滤波器、带通滤波器、高通滤波器等,采用不同的实现方法,如汉宁窗、凯泽窗等。
  4. 设计 IIR 滤波器 :使用不同的方法设计 IIR 滤波器,如巴特沃斯方法、切比雪夫 I 型和 II 型方法、椭圆方法等,并结合双线性变换。
  5. 设计 AR 和 ARMA 滤波器 :基于 Yule - Walker 算法、Prony 算法和 Steiglitz - McBride 方法设计 AR 和 ARMA 滤波器。

1.3 离散时间 IIR 滤波器方法总结

滤波器方法 函数描述 MATLAB 函数
模拟原型 基于 s 域的经典低通原型滤波器,通过滤波器离散化获得数字滤波器 butter, cheby1, cheby2, ellip, maxflat
阶数估计 估计滤波器的阶数 buttord, cheb1ord, cheb2ord, ellipord
频率变换 进行频率变换 iirlp2hp, iirlp2bp, iirlp2bs
滤波器离散化 将模拟滤波器离散化为数字滤波器 bilinear, impinvar
参数建模 推导遵循规定时域响应的建模数字滤波器 aryule(yulewalk), lpc, prony, stmcb
最小相位 将极点和零点反射到单位圆区域 polystab

1.4 滤波器设计流程

graph TD;
    A[确定滤波器规格] --> B[选择滤波器类型和方法];
    B --> C[计算滤波器参数];
    C --> D[设计滤波器];
    D --> E[验证滤波器性能];
    E --> F{是否满足规格};
    F -- 是 --> G[完成设计];
    F -- 否 --> A;

2. 数字信号处理中的数值表示

2.1 二进制数

在传统的计算机和处理器中,二进制数用于数字运算。一个$B + 1$位的二进制数表示为$b_Bb_{B - 1} \cdots b_2b_1b_0$,其中最左边的$b_B$是最高有效位(MSB),最右边的$b_0$是最低有效位(LSB)。

  • 无符号整数转换 :无符号整数的值通过加权求和计算,公式为$\text{Unsigned integer} = \sum_{k = 0}^{B} b_k2^k$。
  • 有符号整数转换 :使用 2 的补码方法将二进制数转换为有符号整数,公式为$\text{Signed integer} = -b_B2^B + \sum_{k = 0}^{B - 1} b_k2^k$。
  • 整数范围 :无符号整数的范围是$0 \leq \text{Unsigned integer} \leq 2^{B + 1} - 1$,有符号整数的范围是$-2^B \leq \text{Signed integer} \leq 2^B - 1$。

2.2 浮点数

浮点数使用带符号的尾数和指数来表示实数,通过将尾数和指数转换为二进制数,可以在系统中使用非常大或非常小的数值。

  • 8 位浮点数示例 :一个 8 位的浮点数表示为$b_7b_6b_5b_4b_3b_2b_1b_0$,其中$b_7$是符号位,$b_6b_5b_4b_3$是指数位,$b_2b_1b_0$是尾数位。其值计算公式为$\text{Floating point number} {10} (\text{FP}# {10}) = (-1)^s \times 1.f \times 2^{e - 7}_{10}$。
  • 特殊数字表示 :通过位保留来管理特殊数字,如零、无穷大和非数字(NaN)。零指数对尾数进行非规范化处理,以表示零附近的值。
  • IEEE 标准 754 :规定了单精度和双精度浮点数的表示方法,MATLAB 默认使用双精度浮点数。
规格 8 位浮点数二进制表示 十进制数 MATLAB 函数
最小正规范化浮点数 00001000₂ $1 \times 2^{-6} \approx 0.0156$ realmin
最大正浮点数 01110111₂ $(1 + 2^{-1} + 2^{-2} + 2^{-3}) \times 2^7 = 240$ realmax
浮点数相对精度 00111001₂ $(1 + 2^{-3}) \times 2^0 - 1 = 0.1250$ eps
最小正非规范化浮点数 00000001₂ $2^{-3} \times 2^{-6} = 2^{-9} \approx 0.0020$ None

2.3 定点数

定点数将二进制点固定在特定位置来表示相应的十进制数。一个$B + 1$位的定点数表示为$b_0:b_{-1}b_{-2} \cdots b_{-B + 1}b_{-B}$,其对应的十进制数是基于 2 的补码的有符号分数数,公式为$\text{Fraction number} = -b_0 + \sum_{k = 1}^{B} b_{-k}2^{-k}$。

  • 分数数范围 :分数数的范围是$-1 \leq \text{Fraction number} \leq 1 - 2^{-B}$。
  • 最小差值 :相邻数字之间的最小差值为$\Delta = 2^{-B}$。

2.4 信号量化

信号量化将连续的实数幅度转换为有限精度的值,如定点数。对于一个$B + 1$位的定点数,量化过程表示为$\hat{x} = Q_B(x)$,其中$x \in R$。

  • 量化值计算 :量化值可以通过公式$\hat{x} = X_m \left(-b_0 + \sum_{k = 1}^{B} b_{-k}2^{-k}\right)$计算,其中$X_m = \max_n |x[n]|$。
  • 量化误差 :量化误差定义为$e = \hat{x} - x = Q_B(x) - x$。
  • 近似策略 :常用的近似策略有舍入和截断,舍入将实数$x$近似为最近的离散值$\hat{x}$,截断将实数$x$近似为向负无穷方向最近的离散值$\hat{x}$。

2.5 简单统计分析

量化误差$e$是一个连续的不可预测的随机值,可以将其描述为随机变量$E$。通过概率密度函数$f_E(e)$或算术平均值计算期望值$\mu_E$,公式为$E[E] = \mu_E = \int_{C} ef_E(e)de = \lim_{N \to \infty} \frac{1}{N} \sum_{k = 0}^{N - 1} e[k]$。

  • 方差计算 :方差可以通过概率密度函数或二阶矩计算,公式为$\text{Var}(E) = \sigma_E^2 = E[(E - \mu_E)^2] = \lim_{N \to \infty} \frac{1}{N} \sum_{k = 0}^{N - 1} (e[k] - \mu_E)^2 = E[E^2] - E[E]^2 = \int_{C} e^2f_E(e)de - \mu_E^2$。
  • 信号功率 :$e[n]$的信号功率定义为$P_e = \frac{1}{N} \sum_{k = 0}^{N - 1} e^2[k] \approx E[E^2]$。
  • 信噪比(SNR) :信噪比定义为信号功率与噪声功率的比值,公式为$\text{SNR} = 10 \log_{10} \frac{P_{\text{signal}}}{P_{\text{noise}}} = 10 \log_{10} \frac{\sigma_{\text{signal}}^2}{\sigma_{\text{noise}}^2}$(对于零均值噪声和信号)。

2.6 示例:计算舍入量化中的 SNR

假设概率密度函数是均匀的,量化误差范围为$-\frac{\Delta Q_B}{2} < e \leq \frac{\Delta Q_B}{2}$,概率密度函数为$f_E(e) = \frac{1}{\Delta Q_B}$。

  1. 计算期望值 :$\mu_E = \int_{-\frac{\Delta Q_B}{2}}^{\frac{\Delta Q_B}{2}} ef_E(e)de = \frac{1}{\Delta Q_B} \int_{-\frac{\Delta Q_B}{2}}^{\frac{\Delta Q_B}{2}} ede = 0$。
  2. 计算方差 :$\sigma_{\text{noise}}^2 = \int_{-\frac{\Delta Q_B}{2}}^{\frac{\Delta Q_B}{2}} e^2f_E(e)de = \frac{2}{\Delta Q_B} \int_{0}^{\frac{\Delta Q_B}{2}} e^2de = \frac{\Delta Q_B^2}{12} = \frac{X_m^22^{-2B}}{12}$。
  3. 计算 SNR :设最大信号幅度$X_m = N\sigma_{\text{signal}}$,则$\sigma_{\text{signal}}^2 = \frac{X_m^2}{N^2}$,$\text{SNR} = 10 \log_{10} \frac{\sigma_{\text{signal}}^2}{\sigma_{\text{noise}}^2} = 10 \log_{10} \frac{12}{N^22^{-2B}} = 10.7918 - 20 \log_{10}(N) + 6.0206B$。

2.7 MATLAB 代码示例

2.7.1 绘制 8 位浮点数的 128 个正数
ff = 0:1:7;
ee = -7:1:8;
fract = 1+ff*2^-3;
out = [];
for kk=1:length(ee)
    out = [out fract.*2^ee(kk)];
end
figure
subplot(311), h = stem(out,ones(size(out)));, grid
h.Marker = 'none';
subplot(312), h = stem(out,ones(size(out)));, grid
h.Marker = 'none';
xlim([0 0.1])
subplot(313), h = stem(out,ones(size(out)));, grid
h.Marker = 'none';
xlim([100 500]);
xlabel('Floating-point # value');
2.7.2 绘制 8 位浮点数的非规范化和规范化表示
ff = 0:1:7;
ee = -6:1:7;
ee1 = -7:1:7;
fract1 = 1+ff*2^-3;
fract2 = ff*2^-3;
out1 = [];
out2 = [];
out1 = [out1 fract2.*2^-6];
for kk=1:length(ee)
    out1 = [out1 fract1.*2^ee(kk)];
end
for qq=1:length(ee1)
    out2 = [out2 fract1.*2^ee1(qq)];
end
figure,
subplot(311), h = stem(out1,ones(size(out1)));, grid
h.Marker = 'none';
ylabel('Denormalized')
subplot(312), h = stem(out1,ones(size(out1)));, grid
h.Marker = 'none';
xticks([0 1/128 1/64 1/32 1/16])
xticklabels({'0','1/128','1/64','1/32','1/16'})
xlim([0 1/16])
ylabel('Denormalized')
subplot(313), h = stem(out2,ones(size(out2)));, grid
h.Marker = 'none';
xticks([0 1/128 1/64 1/32 1/16])
xticklabels({'0','1/128','1/64','1/32','1/16'})
xlim([0 1/16])
ylabel('Normalized only')
xlabel('Floating-point # value')

3. 滤波器设计的具体操作与深入分析

3.1 FIR 滤波器设计操作步骤

FIR 滤波器设计是滤波器设计中的重要部分,以下为不同类型 FIR 滤波器的设计步骤:
1. 低通 FIR 滤波器(汉宁窗)
- 确定滤波器规格:包括通带频率(如$2000 Hz$,$\omega_p = \frac{\pi}{2}$)、通带幅度($0 dB$)、通带纹波($1 dB$)、阻带频率($3000 Hz$,$\omega_{st} = \frac{3\pi}{4}$)、阻带衰减($40 dB$)和采样频率($8000 Hz$)。
- 选择窗函数:这里选择汉宁窗。
- 计算滤波器长度:进行优化计算以确定合适的长度$N$。
- 设计滤波器:根据上述参数和窗函数设计滤波器。
2. 低通 FIR 滤波器(凯泽窗)
- 确定滤波器规格:与汉宁窗低通滤波器类似。
- 选择窗函数:选择凯泽窗。
- 计算滤波器长度:优化确定$N$。
- 设计滤波器:利用凯泽窗和规格参数设计。
3. 不同类型无窗 FIR 滤波器
- 低通 FIR 滤波器(Type II 无窗方法):确定规格后,根据 Type II 方法设计,优化滤波器长度$N$。
- 带通 FIR 滤波器(Type III 无窗方法):明确截止频率(如$\frac{4000}{3} Hz$,$\omega_{c1} = \frac{\pi}{3}$和$\frac{8000}{3} Hz$,$\omega_{c2} = \frac{2\pi}{3}$)等规格,滤波器长度$N = 16$,然后进行设计。
- 高通 FIR 滤波器(Type IV 无窗方法):确定通带、阻带频率等规格,优化长度$N$后设计。

3.2 IIR 滤波器设计操作步骤

IIR 滤波器设计也有多种方法,以下是常见方法的设计步骤:
1. 巴特沃斯方法(双线性变换)
- 确定滤波器规格:通带频率($2000 Hz$,$\omega_p = \frac{\pi}{2}$)、通带幅度($1$)、通带纹波($3.0103 dB$)、阻带频率($3000 Hz$,$\omega_{st} = \frac{3\pi}{4}$)、阻带衰减($20 dB$)和采样频率($8000 Hz$)。
- 选择方法:采用巴特沃斯方法。
- 计算滤波器长度:优化$N$。
- 进行双线性变换:将模拟滤波器转换为数字滤波器。
2. 切比雪夫 I 型方法(双线性变换)
- 确定规格:与巴特沃斯方法类似。
- 选择方法:切比雪夫 I 型方法。
- 计算滤波器长度:优化$N$。
- 双线性变换:完成数字滤波器设计。
3. 切比雪夫 II 型方法(双线性变换)
- 确定规格。
- 选择切比雪夫 II 型方法。
- 优化滤波器长度$N$。
- 双线性变换设计。
4. 椭圆方法(双线性变换)
- 确定规格。
- 选择椭圆方法。
- 优化$N$。
- 双线性变换完成设计。

3.3 其他滤波器设计方法

  1. AR 滤波器(Yule - Walker 算法) :根据给定的二阶未知 AR 滤波器$H_d(z) = \frac{0.25}{1 - 1.2z^{-1} + 0.45}$,使用 Yule - Walker 算法估计系数。
  2. ARMA 滤波器(Prony 算法) :对于给定的二阶未知 ARMA 滤波器$H_d(z) = \frac{0.10100 + 0.06172z^{-1} + 0.09659z^{-2}}{1 - 1.26174z^{-1} + 0.62847z^{-2}}$,使用 Prony 算法估计系数。
  3. ARMA 滤波器(Steiglitz - McBride 方法) :同样针对上述二阶 ARMA 滤波器,使用 Steiglitz - McBride 方法估计系数。

3.4 滤波器设计方法对比

滤波器类型 设计方法 特点
FIR 滤波器 汉宁窗、凯泽窗、不同类型无窗方法 线性相位,稳定性好,设计相对简单,但可能需要较长的滤波器长度
IIR 滤波器 巴特沃斯、切比雪夫 I 型、切比雪夫 II 型、椭圆方法 可以用较低的阶数达到较好的滤波效果,但相位非线性
AR 滤波器 Yule - Walker 算法 用于自回归模型,根据已知模型估计系数
ARMA 滤波器 Prony 算法、Steiglitz - McBride 方法 结合自回归和移动平均,通过算法估计系数

3.5 滤波器设计流程总结

graph TD;
    A[确定滤波器规格] --> B{选择滤波器类型};
    B -- FIR --> C{选择窗函数或类型};
    C -- 有窗 --> D[计算滤波器长度并设计];
    C -- 无窗 --> D;
    B -- IIR --> E{选择设计方法};
    E -- 巴特沃斯等 --> F[计算滤波器长度];
    F --> G[双线性变换设计];
    B -- AR --> H[Yule - Walker 算法估计系数];
    B -- ARMA --> I{选择算法};
    I -- Prony 算法 --> J[估计系数];
    I -- Steiglitz - McBride 方法 --> J;
    D --> K[验证滤波器性能];
    G --> K;
    H --> K;
    J --> K;
    K --> L{是否满足规格};
    L -- 是 --> M[完成设计];
    L -- 否 --> A;

4. 数字信号处理中的数值应用与注意事项

4.1 数值表示在滤波器设计中的应用

在滤波器设计中,不同的数值表示方法都有其应用场景:
1. 二进制数 :用于数字运算,在处理器中进行基本的数值处理。在滤波器设计的底层计算中,二进制数的表示和运算至关重要。
2. 浮点数 :具有高动态范围和在零附近的高分辨率,适用于对精度要求较高的滤波器设计。但需要注意其对硬件和软件的要求较高,实时处理成本较大。
3. 定点数 :提供简单的算术运算,可由廉价处理器和简单算法实现。在对成本和计算复杂度有要求的滤波器设计中较为适用。

4.2 信号量化的注意事项

  1. 量化误差 :量化过程会产生误差,不同的近似策略(舍入和截断)会导致不同的误差范围。舍入误差范围为$-\frac{\Delta Q_B}{2} < e \leq \frac{\Delta Q_B}{2}$,截断误差范围为$-\Delta Q_B < e \leq 0$。
  2. 信噪比(SNR) :量化误差会影响信噪比,通过计算 SNR 可以评估量化对信号质量的影响。如在舍入量化中,$SNR = 10.7918 - 20 \log_{10}(N) + 6.0206B$,其中$B$为量化位数,$N$与信号幅度有关。
  3. 选择合适的量化方法 :根据具体的应用需求和系统要求,选择舍入或截断等量化方法。如果对误差的对称性有要求,舍入可能更合适;如果更关注向负无穷方向的近似,截断可能是更好的选择。

4.3 数值表示的选择建议

应用场景 数值表示选择 原因
高精度要求、对成本不敏感 浮点数 高动态范围和高分辨率
成本敏感、计算复杂度低要求 定点数 简单的算术运算,可由廉价处理器实现
底层数字运算 二进制数 传统计算机和处理器的基本运算方式

4.4 总结

滤波器设计和数字信号处理中的数值表示是相互关联的重要领域。在滤波器设计中,需要根据具体的规格和要求选择合适的设计方法和数值表示方式。同时,要注意量化误差对信号质量的影响,通过合理的设计和计算来优化滤波器性能和信号处理效果。通过对不同滤波器设计问题的解决和数值表示方法的理解,可以更好地实现满足各种需求的数字信号处理系统。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值