主要内容

decimate

抽取 - 按整数倍数降低采样率

说明

y = decimate(x,r) 将输入信号 x 的采样率降低 r 倍。被抽取信号 y 缩短 r 倍,因此 length(y) = ceil(length(x)/r)。默认情况下,decimate 使用 8 阶低通切比雪夫 I 型无限冲激响应 (IIR) 滤波器。

示例

y = decimate(x,r,n) 使用 n 阶切比雪夫滤波器。

示例

y = decimate(x,r,"fir") 使用一个有限冲激响应 (FIR) 滤波器,该滤波器是通过汉明窗使用加窗方法设计的。滤波器阶数为 30。

y = decimate(x,r,n,"fir") 使用 n 阶 FIR 滤波器。

示例

示例

全部折叠

创建以 4 kHz 频率采样的正弦信号。按因子 4 对其进行抽取。

t = 0:1/4e3:1;
x = sin(2*pi*30*t) + sin(2*pi*60*t);
y = decimate(x,4);

绘制原始信号和被抽取信号。

subplot(2,1,1)
stem(0:120,x(1:121),'filled','MarkerSize',3)
grid on
xlabel('Sample Number')
ylabel('Original')

subplot(2,1,2)
stem(0:30,y(1:31),'filled','MarkerSize',3)
grid on
xlabel('Sample Number')
ylabel('Decimated')

Figure contains 2 axes objects. Axes object 1 with xlabel Sample Number, ylabel Original contains an object of type stem. Axes object 2 with xlabel Sample Number, ylabel Decimated contains an object of type stem.

创建一个包含两个正弦波的信号。使用 5 阶切比雪夫 IIR 滤波器按因子 13 对其进行抽取。绘制原始信号和被抽取信号。

r = 13;
n = 16:365;
lx = length(n);
x = sin(2*pi*n/153) + cos(2*pi*n/127);

plot(0:lx-1,x,'o')
hold on
y = decimate(x,r,5);
stem(lx-1:-r:0,fliplr(y),'ro','filled','markersize',4)

legend('Original','Decimated','Location','south')
xlabel('Sample number')
ylabel('Signal')

Figure contains an axes object. The axes object with xlabel Sample number, ylabel Signal contains 2 objects of type line, stem. One or more of the lines displays its values using only markers These objects represent Original, Decimated.

原始信号和被抽取信号具有匹配的最后元素。

创建一个包含两个正弦波的信号。使用 82 阶 FIR 滤波器按因子 13 对其进行抽取。绘制原始信号和被抽取信号。

r = 13;
n = 16:365;
lx = length(n);
x = sin(2*pi*n/153) + cos(2*pi*n/127);

plot(0:lx-1,x,'o')
hold on
y = decimate(x,r,82,'fir');
stem(0:r:lx-1,y,'ro','filled','markersize',4)

legend('Original','Decimated','Location','south')
xlabel('Sample number')
ylabel('Signal')

Figure contains an axes object. The axes object with xlabel Sample number, ylabel Signal contains 2 objects of type line, stem. One or more of the lines displays its values using only markers These objects represent Original, Decimated.

原始信号和被抽取信号具有匹配的第一个元素。

输入参数

全部折叠

输入信号,指定为向量。

数据类型: double | single

抽取因子,指定为正整数。当 r 大于 13 时,要获得更好的结果,请将 r 分成较小的因子并多次调用 decimate

数据类型: double | single

滤波器阶数,指定为正整数。不推荐使用高于 13 的 IIR 滤波器阶数,因为数值不稳定。在这些情况下函数会显示警告。

数据类型: double | single

输出参量

全部折叠

被抽取信号,以向量形式返回。

算法

抽取将序列的原始采样率降低到较低速率。它与插值相反。decimate 对输入进行低通滤波以防止混叠并对结果进行下采样。该函数使用 [1] 中的抽取算法 8.2 和 8.3。

  1. decimate 创建一个低通滤波器。默认是使用 cheby1 设计的切比雪夫 I 型滤波器。此滤波器的归一化截止频率为 0.8/r,通带波纹为 0.05 dB。有时,指定的滤波器阶数由于创建传递函数所需的卷积累积的舍入误差而导致通带失真。当失真导致在截止频率处的幅值响应与波纹相差超过 10-6 时,decimate 会自动降低滤波器阶数。

    当选择 "fir" 选项时,decimate 使用 fir1 设计截止频率为 1/r 的低通 FIR 滤波器。

  2. 当使用 FIR 滤波器时,decimate 仅在一个方向对输入序列进行滤波。这会节省内存,对于处理长序列很有用。对于 IIR,decimate 使用 filtfilt 在正向和反向应用滤波器以去除相位失真。实际上,此过程使滤波器阶数加倍。在这两种情况下,函数通过匹配端点条件来最小化信号两端的瞬变效应。

  3. 最后,decimate 通过从滤波后信号的内部选择每第 r 个点对数据进行重采样。在重采样的序列 (y) 中,当使用 IIR 滤波器时 y(end) 匹配 x(end),当使用 FIR 滤波器时 y(1) 匹配 x(1)

参考

[1] Digital Signal Processing Committee of the IEEE® Acoustics, Speech, and Signal Processing Society, eds. Programs for Digital Signal Processing. New York: IEEE Press, 1979.

扩展功能

全部展开

版本历史记录

在 R2006a 之前推出

全部展开