AnyMath 文档

向上确认

提高采样率,使用FIR滤波器,降低采样率。

库::`工程师`

语法

函数调用

争论

输入参数

# — 输入信号

+ 向量资料 | 矩阵

Details

指定为矢量或矩阵的输入信号。 如果 如果它是一个向量,那么它代表一个单一的信号。 如果 -矩阵,则对每列进行独立滤波。 有关详细信息,请参阅[提示]

数据类型

漂浮物32, 漂浮64</无翻译>

# h — 脉冲响应

+ 向量资料 | 矩阵

Details

滤波器的脉冲响应,指定为矢量或矩阵。 如果 h -矢量,那么它表示一个FIR滤波器。 如果 h -矩阵,则每列表示单独的FIR滤波器的脉冲响应。 有关详细信息,请参阅[提示]

数据类型

漂浮物32, 漂浮64</无翻译>

# *p*是 采样率提升 因素+ 1 (默认情况下)| 一个正整数

Details

的采样率提升因子,设置为正整数。

数据类型

漂浮物32, 漂浮64</无翻译>

# *q*是 采样率降低 因素+ 1 (默认)| 一个正整数

Details

的采样率降低因子,设为正整数。

数据类型

漂浮物32, 漂浮64</无翻译>

输出参数

# yout — 输出信号

+ 向量资料 | 矩阵

Details

作为向量或矩阵返回的输出信号。 每列 具有长度为 ceil(长度(xin) − 1)*p + 长度(h/q).

如果输入信号是 [参数:辛] 有一个单一的精度,那么 它也将具有单一精度。

因为 向上确认 执行卷积和采样率的变化,然后输出信号 具有与输入信号的长度不同的长度 [参数:辛]. 行数 大约在 [参数:p]/<参数:q>> 行数的倍 [参数:辛].

例子:

将DAT采样率转换为CD采样率

Details

让我们使用采样频率dat的有理转换因子来更改信号的采样频率 48 kHz至CD采样率 44.1 千赫。 使用函数 合理化 让我们找到分子 L 和分母 M 的有理系数。

import EngeeDSP.Functions: upfirdn, kaiserord, fir1, kaiser

Fdat = 48e3
Fcd = 44.1e3
r = rationalize(Fcd/Fdat)
L = numerator(r)
M = denominator(r)

println("L=",L,", M=",M)
L=147, M=160

产生频率的正弦 1.5 带采样周期的kHz 平等 0.25 C.让我们绘制信号的第一毫秒。

t = 0:1/Fdat:0.25-1/Fdat
x = sin.(2π * 1.5e3 * t)
scatter(t, x, markershape=:circle, markersize=3, line=:stem, label="signal")
xlims!(0, 0.001)

upfirdn 1

让我们使用Kaiser窗口设计一个具有平滑的低通滤波器。 让我们将滤波器带的边界设置为 90%及 110 截止频率的%, . 设置带宽中的纹波 5 dB和延迟带中的衰减 40 分贝。 让我们将带宽中的增益设置为 L.

Fs = 48e3
f = (Fdat/2) * min(1/L, 1/M)

Wp = 0.9*f / (Fs/2)
Ws = 1.1*f / (Fs/2)
Rp = 5
Rs = 40

n, Wn, beta = kaiserord([Wp, Ws], [1, 0], [10^(-Rp/20), 10^(-Rs/20)])
b = fir1(n, Wn, kaiser(n+1, beta))
h = L * b

使用函数 向上确认 带过滤器 h 来重新采样正弦波。 计算并补偿滤波器引入的延迟。 我们将生成相应的过采样时间矢量。

y = upfirdn(x, h, L, M)

delay_float = ((length(h) - 1) / 2 - (L - 1)) / L
delay = floor(Int, delay_float)
y = y[delay+1:end]


t_res = (0:length(y)-1) / Fcd

让我们在图表上显示原始和过采样信号。

plot(t, x, line=:stem, marker=:circle, markersize=2,
     label="Original (48 kHz)", color=:red,
     xlims=(0, 0.001), title="Signal Comparison",
     xlabel="Time (s)", ylabel="Amplitude")

scatter!(t_res, y, markershape=:circle, markersize=2,
         label="Resampled (44.1 kHz)", color=:blue)

upfirdn 2

建议

可接受的尺寸组合 [参数:辛][参数:h] 是:

  1. -向量及 h -矢量。

    输入端有一个滤波器和一个信号,因此函数崩溃 h. 的输出信号 [参数:yout] 是一个字符串向量,如果 -vector-string;否则 -列向量。

  2. -矩阵,以及 h -矢量。

    输入端有一个滤波器和许多信号,因此函数崩溃 h 每列 . 由此产生的 -与列数相同的矩阵 .

  3. -矢量,嗯 h -矩阵。

    输入端有多个滤波器和一个信号,因此函数会折叠每列。 h. 由此产生的 -与列数相同的矩阵 h.

  4. -矩阵和 h -一个矩阵,都具有相同的列数。

    输入端有多个滤波器和多个信号,因此函数会折叠相应的列。 h. 由此产生的 -与列数相同的矩阵 h.

算法

功能 向上确认 使用多相插值结构。 多相结构中的乘法-求和运算的数量大约等于 ,在哪里 -长度 相应地。 对于长信号,这个公式通常是准确的。

功能 向上确认 执行三个操作的级联:

  1. 增加矩阵中输入数据的采样率 [参数:辛] 由整数系数 [参数:p] (加零)。

  2. 具有指定为矢量或矩阵的脉冲特性序列的具有增加的采样频率的信号的FIR滤波 [参数:h].

  3. 将采样率降低一个整数因子 [参数:q] (下降计数)。

FIR滤波器通常是一个低通滤波器,需要使用另一个功能来设计,例如 第一阶段第一期.

功能 再采样 执行FIR滤波器的设计使用 鹿firls 然后改变采样率使用 向上确认.

文学作品

  1. Crochiere,R.E. _A通用程序,通过合理比率执行数据的采样率转换。_Programs For Digital Signal Processing(IEEE Acoustics,Speech,And Signal Processing Society的数字信号处理委员会,eds.). 繝シ繧ォ繝シ縺ォ縺ェ縺"縺ヲ縺縺セ縺呐8.2-1–8.2-7…​

  2. Crochiere,R.E.和Lawrence R.Rabiner。 _倍增数字信号处理。_恩格尔伍悬崖,NJ:普伦蒂斯-霍尔,1983.