滤波器设计与数字信号处理中的数值表示
1. 滤波器设计问题
1.1 滤波器设计问题概述
在滤波器设计中,我们会遇到各种具体的设计问题,这些问题涵盖了从计算绝对幅度到设计不同类型滤波器的多个方面。
1.2 具体问题列表
- 计算绝对幅度 :需要计算给定分贝规格的绝对幅度,包括通带幅度(0 dB)、通带纹波(0.1 dB)和阻带衰减(80 dB)。
- 计算频率 :计算不同情况下的循环、离散、归一化频率,例如$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$)。
- 设计 FIR 滤波器 :根据不同的规格设计 FIR 滤波器,包括低通滤波器、带通滤波器、高通滤波器等,采用不同的实现方法,如汉宁窗、凯泽窗等。
- 设计 IIR 滤波器 :使用不同的方法设计 IIR 滤波器,如巴特沃斯方法、切比雪夫 I 型和 II 型方法、椭圆方法等,并结合双线性变换。
- 设计 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}$。
- 计算期望值 :$\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$。
- 计算方差 :$\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}$。
- 计算 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 其他滤波器设计方法
- AR 滤波器(Yule - Walker 算法) :根据给定的二阶未知 AR 滤波器$H_d(z) = \frac{0.25}{1 - 1.2z^{-1} + 0.45}$,使用 Yule - Walker 算法估计系数。
- ARMA 滤波器(Prony 算法) :对于给定的二阶未知 ARMA 滤波器$H_d(z) = \frac{0.10100 + 0.06172z^{-1} + 0.09659z^{-2}}{1 - 1.26174z^{-1} + 0.62847z^{-2}}$,使用 Prony 算法估计系数。
- 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 信号量化的注意事项
- 量化误差 :量化过程会产生误差,不同的近似策略(舍入和截断)会导致不同的误差范围。舍入误差范围为$-\frac{\Delta Q_B}{2} < e \leq \frac{\Delta Q_B}{2}$,截断误差范围为$-\Delta Q_B < e \leq 0$。
- 信噪比(SNR) :量化误差会影响信噪比,通过计算 SNR 可以评估量化对信号质量的影响。如在舍入量化中,$SNR = 10.7918 - 20 \log_{10}(N) + 6.0206B$,其中$B$为量化位数,$N$与信号幅度有关。
- 选择合适的量化方法 :根据具体的应用需求和系统要求,选择舍入或截断等量化方法。如果对误差的对称性有要求,舍入可能更合适;如果更关注向负无穷方向的近似,截断可能是更好的选择。
4.3 数值表示的选择建议
| 应用场景 | 数值表示选择 | 原因 |
|---|---|---|
| 高精度要求、对成本不敏感 | 浮点数 | 高动态范围和高分辨率 |
| 成本敏感、计算复杂度低要求 | 定点数 | 简单的算术运算,可由廉价处理器实现 |
| 底层数字运算 | 二进制数 | 传统计算机和处理器的基本运算方式 |
4.4 总结
滤波器设计和数字信号处理中的数值表示是相互关联的重要领域。在滤波器设计中,需要根据具体的规格和要求选择合适的设计方法和数值表示方式。同时,要注意量化误差对信号质量的影响,通过合理的设计和计算来优化滤波器性能和信号处理效果。通过对不同滤波器设计问题的解决和数值表示方法的理解,可以更好地实现满足各种需求的数字信号处理系统。
超级会员免费看
1448

被折叠的 条评论
为什么被折叠?



