• 对均匀采样信号进行重采样


    目录

    按有理因子进行速率转换

    对瞬变进行滤波

    对混叠进行滤波


            此示例说明如何以新的均匀速率对均匀采样的信号进行重采样。它说明如何减少大瞬变的影响,以及如何去除不需要的高频成分。

    按有理因子进行速率转换

            resample 函数执行从一个采样率到另一个采样率的速率转换。resample 允许按积分因子 p 进行上采样,然后按另一个积分因子 q 进行抽取。这样,能够以原始采样率的有理倍数 (p/q) 进行重采样。

            要对均匀采样使用 resample 函数,必须提供此有理因子的分子和分母。要确定所需的整数,可以使用 rat 函数。

            以下是从 48 kHz 转换为 44.1 kHz 时如何调用 rat 的示例:

    1. originalFs = 48000;
    2. desiredFs = 44100;
    3. [p,q] = rat(desiredFs / originalFs)
    4. p = 147
    5. q = 160

            rat 表示可以按 147 进行上采样,按 160 进行下采样。要验证这是否会产生所需的速率,请将 p/q 乘以原始采样率:

    1. originalFs * p / q
    2. ans = 44100

            一旦确定了新采样率和原始采样率之间的比率,就可以调用 resample。

            例如,使用 48 kHz 的原始采样率创建一段 10 毫秒长的 500 Hz 正弦波,并将其转换为 44.1 kHz:

    1. tEnd = 0.01;
    2. Tx = 0:1/originalFs:tEnd;
    3. f = 500;
    4. x = sin(2*pi*f*Tx);
    5. y = resample(x,p,q);
    6. Ty = (0:numel(y)-1)/desiredFs;
    7. plot(Tx,x,'. ')
    8. hold on
    9. plot(Ty,y,'o ')
    10. hold off
    11. legend('Original','Resampled')

            如图所示:

             对于上述正弦波等表现良好的信号,仅使用 resample 和精心选择的 p 和 q 就足以正确重新构造信号。

            对于具有瞬变或显著噪声的信号,可能希望对 resample 中的多相抗混叠滤波器有更好的控制。

    对瞬变进行滤波

            resample 函数在执行速率转换时使用滤波器。这种滤波对信号中的大瞬变很敏感。

            为了说明这一点,我们对矩形脉冲进行重采样:

    1. x = [zeros(1,120) ones(1,241) zeros(1,120)];
    2. y = resample(x,p,q);
    3. plot(Tx,x,'-', Ty,y,'-')
    4. legend('Original','Resampled')

            如图所示:

            该函数很好地重新构造了脉搏的平台区。然而,在脉冲的边沿存在尖峰。

            放大第一个脉冲的边沿:

    xlim([2e-3 3e-3])

            如图所示:

            在过渡区域中有阻尼振荡。可以通过调整内部滤波器的设置来减小这种振荡。resample 允许您控制应用于抗混叠滤波器的 Kaiser 窗,以减轻某些边沿效果。

            两个参数 n 和 beta 控制滤波器的相对长度和它尝试执行的平滑量。n 的较大值表示具有较大的滤波器长度。beta 为 0 表示没有额外的平滑处理。更大的 beta 值表示具有更大的平滑处理。默认情况下,n 为 10,beta 为 5。

            一个可行的方法是从默认值开始,并根据需要进行调整。在此处,将 n 设置为 5,将 beta 设置为 20。

    1. n = 5;
    2. beta = 20;
    3. y = resample(x,p,q,n,beta);
    4. plot(Tx,x,'.-')
    5. hold on
    6. plot(Ty,y,'o-')
    7. hold off
    8. legend('Original','Resampled')
    9. xlim([2e-3 3e-3])

             如图所示:

            振荡显著减少。

    对混叠进行滤波

            resample 函数旨在将采样率转换为更高或更低的速率。因此,抗混叠滤波器的截止频率设置为输入或输出采样率的奈奎斯特频率(以较低者为准)。此默认设置使得 resample 函数具有广泛的应用。

            有时直接控制滤波器可能是有益的。

            为了说明这一点,我们构造并查看一段以 96 kHz 采样的 chirp 信号的频谱图。该 chirp 信号由一个正弦波组成,其频率在整个奈奎斯特频率范围内从 0 Hz 到 48 kHz 呈二次变化,持续时间为 8 秒:

    1. fs1 = 96000;
    2. t1 = 0:1/fs1:8;
    3. x = chirp(t1, 0, 8, fs1/2, 'quadratic');
    4. spectrogram(x,kaiser(256,15),220,412,fs1,'yaxis')

            如图所示:

             接下来,使用 resample 的默认设置将 chirp 信号转换为 44.1 kHz,并查看频谱图:

    1. fs2 = 44100;
    2. [p,q] = rat(fs2/fs1);
    3. y = resample(x,p,q);
    4. spectrogram(y,kaiser(256,15),220,412,fs2,'yaxis')

            如图所示:

            在此处,可以看到原始信号以及不需要的频率成分。理想情况下,正弦波应从 0 Hz 开始,持续到在 5.422 秒时达到 22.05 kHz 的奈奎斯特频率。而实际上,由于在用于重采样的默认滤波器的边缘引入了小的不连续性,从而引入了伪影。为了防止这些伪影,可以提供较长的滤波器,其截止频率略低,阻带抑制比默认滤波器更大。

            为了获得适当的时序对齐,滤波器应具有奇数长度。长度应比 p 或 q 大几倍(以较大者为准)。同样,将所需的归一化截止频率除以 p 或 q 中的较大值。在任一情况下,都将生成的系数乘以 p。

            下面是一个滤波器示例,其截止频率为输出奈奎斯特频率的 98% (0.98),阶数为 256 乘以抽取因子,采用 Kaiser 窗进行加窗且 beta 为 12。

    1. normFc = .98 / max(p,q);
    2. order = 256 * max(p,q);
    3. beta = 12;
    4. lpFilt = firls(order, [0 normFc normFc 1],[1 1 0 0]);
    5. lpFilt = lpFilt .* kaiser(order+1,beta)';
    6. lpFilt = lpFilt / sum(lpFilt);
    7. % multiply by p
    8. lpFilt = p * lpFilt;
    9. % resample and plot the response
    10. y = resample(x,p,q,lpFilt);
    11. spectrogram(y,kaiser(256,15),220,412,fs2,'yaxis')

            如图所示:

            请注意,混叠已去除。 

  • 相关阅读:
    NoSQL之 Redis介绍与配置
    DTSE Tech Talk | 第9期:EiPaaS驱动企业数字化转型
    JVM——4.垃圾回收
    D数树,牛客小白月赛78,思维
    JS-项目实战-删除库存记录
    xgboost 与 lgbm
    智慧渔港:海域感知与岸线监控实施方案(智慧渔港渔船综合管控平台)
    Spring Cloud Alibaba微服务第7章之负载均衡Ribbon
    Python 脚本中的 FFmpeg
    【MySql】mysql之进阶查询语句
  • 原文地址:https://blog.csdn.net/jk_101/article/details/124796583