以所需采样率对非均匀采样信号进行重采样

resample 函数允许您将非均匀采样信号转换为使用新的均匀采样率。

创建一个以大约 48 kHz 采样率不规则采样的 500 Hz 正弦波。我们通过向均匀向量添加随机值来模拟不规则性。

rng default

nominalFs = 48000;

f = 500;

Tx = 0:1/nominalFs:0.01;

irregTx = sort(Tx + 1e-4*rand(size(Tx)));

x = sin(2*pi*f*irregTx);

plot(irregTx,x,'.')

要对非均匀采样信号进行重采样,可以调用带时间向量输入的 resample。

下一个示例将我们的原始信号转换为均匀的 44.1 kHz 采样率。

desiredFs = 44100;

[y, Ty] = resample(x,irregTx,desiredFs);

plot(irregTx,x,'.-', Ty,y,'o-')

legend('Original','Resampled')

ylim([-1.2 1.2])

您可以看到,经过重采样的信号与原始信号具有相同的形状和大小。

选择插值方法

resample 中的转换算法在输入采样尽可能接近规则间距时效果最佳,因此观察采样数据中缺失一部分输入采样时可能发生的情况很有意义。

下一个示例使输入正弦波的第二个波峰出现陷波,并对其应用重采样。

irregTx(105:130) = [];

x = sin(2*pi*f*irregTx);

[y, Ty] = resample(x,irregTx,desiredFs);

plot(irregTx,x,'. ')

hold on

plot(Ty,y,'.-')

hold off

legend('Original','Resampled')

ylim([-1.2 1.2])

缺失段通过线性插值进行连接。线性插值是 resample 函数对非均匀采样数据进行重采样所使用的默认方法。

在某些情况下,如果您的输入中有缺失数据或较大空缺,您可以通过选择不同插值方法来还原一些缺失数据。

对于低噪声、低带宽信号,样条插值在重新构造原始信号时非常有效。要在重采样过程中使用三次样条,请提供 'spline' 插值方法:

[y, Ty] = resample(x,irregTx,desiredFs,'spline');

plot(irregTx,x,'. ')

hold on

plot(Ty,y,'.-')

hold off

legend('Original','Resampled using ''spline''')

ylim([-1.2 1.2])

控制插值网格

默认情况下,resample 会构造一个中间网格,该网格是信号的所需采样率与平均采样率之比的有理逼近值。

如果输入采样的一部分包含高频分量,您可以通过选择整数系数 p 和 q 来选择此有理比率,从而控制中间网格的间距。

检查欠阻尼二阶滤波器的阶跃响应,该滤波器以约 3 Hz 的频率振荡:

w = 2*pi*3;

d = .1002;

z = sin(d);

a = cos(d);

t = [0:0.05:2 3:8];

x = 1 - exp(-z*w*t).*cos(w*a*t-d)/a;

plot(t,x,'.-')

阶跃响应在振荡时以高速率采样,在不振荡时以低速率采样。

现在仅使用默认设置以 100 Hz 对信号进行重采样:

Fs = 100;

[y, Ty] = resample(x,t,Fs);

plot(t,x,'. ')

hold on

plot(Ty,y)

hold off

legend('Original','Resampled (default settings)')

波形开始时的振荡包络衰减,并且比原始信号振荡得更慢。

默认情况下,resample 插值到与输入信号的平均采样率对应的固定间隔网格中。

avgFs = (numel(t)-1) /(t(end)-t(1))

avgFs = 5.7500

该网格的采样率应高于您要测量的最大频率的两倍。该网格的采样率为每秒 5.75 个采样,低于振铃频率的 Nyquist 采样率 6 Hz。

为了使网格具有更高的采样率,您可以提供整数参数 p 和 q。resample 将网格的采样率调整为 Q*Fs/P,对信号进行插值,然后应用其内部采样率转换器(按 P 进行上采样,按 Q 进行下采样)来还原所需的采样率 Fs。使用 rat 选择 p 和 q。

由于振荡的振铃频率为 3 Hz,请指定采样率为 7 Hz 的网格,该采样率略高于 Nyquist 速率。1 Hz 的余量是考虑到指数包络衰减产生的额外频谱。

Fgrid = 7;

[p,q] = rat(Fs/Fgrid)

p = 100

q = 7

[y, Ty] = resample(x,t,Fs,p,q);

plot(t,x,'.')

hold on

plot(Ty,y)

hold off

legend('Original','Resampled (custom P and Q)')

指定抗混叠滤波器

在下一个示例中,您可以查看测量飞机发动机节气门设置的数字化仪的输出。节气门设置以约 100 Hz 的名义速率进行非均匀采样。我们将尝试以均匀的 10 Hz 速率对此信号进行重采样。

以下是我们的原始信号的采样。

load engineRPM

plot(t,x,'.')

xlabel('Time (s)')

ylabel('RPM')

我们的信号经过量化。现在放大时间间隔从 20 秒到 23 秒的上升区域:

plot(t,x,'.')

xlim([20 23])

信号在此区域内缓慢变化。这允许您通过在重采样器中使用抗混叠滤波器来去除一些量化噪声。

desiredFs = 10;

[y,ty] = resample(x,t,desiredFs);

plot(t,x,'.')

hold on

plot(ty,y,'.-')

hold off

xlabel('Time')

ylabel('RPM')

legend('Original','Resampled')

xlim([20 23])

这相当有效。然而,通过为 resample 提供具有低截止频率的滤波器,可以进一步对重采样的信号进行平滑处理。

首先,将网格间距设置为大约我们的名义 100 Hz 采样率。

nominalFs = 100;

接下来,确定合理的 p 和 q 以获得所需的速率。由于名义速率为 100 Hz,而我们所需的速率为 10 Hz,因此您需要按 10 进行抽取。这等效于将 p 设置为 1,将 q 设置为 10。

p = 1;

q = 10;

您可以为 resample 提供自己的滤波器。为了获得适当的时序对齐,滤波器应为奇数长度。滤波器长度应比 p 或 q 大几倍(以较大者为准)。将截止频率设置为所需截止频率的 1/q,然后将生成的系数乘以 p。

% ensure an odd length filter

n = 10*q+1;

% use .25 of Nyquist range of desired sample rate

cutoffRatio = .25;

% construct lowpass filter

lpFilt = p * fir1(n, cutoffRatio * 1/q);

% resample and plot the response

[y,ty] = resample(x,t,desiredFs,p,q,lpFilt);

plot(t,x,'.')

hold on

plot(ty,y)

hold off

xlabel('time')

ylabel('RPM')

legend('Original','Resampled (custom filter)','Location','best')

xlim([20 23])

去除端点效应

现在缩小以查看我们的原始信号。请注意,端点处有明显的偏移。

plot(t,x,'.',ty,y)

xlabel('time')

ylabel('RPM')

legend('original','resampled (custom filter)','Location','best')

出现这些伪影是因为 resample 假设信号边界之外的信号为零。为了减少这些不连续性的影响,请减去信号端点之间的一条线,执行重采样,然后将该线添加回原始函数。要实现这一点,您可以计算第一个和最后一个采样之间直线的斜率和偏移量,并使用 polyval 构造要减去的线。

% compute slope and offset (y = a1 x + a2)

a(1) = (x(end)-x(1)) / (t(end)-t(1));

a(2) = x(1);

% detrend the signal

xdetrend = x - polyval(a,t);

plot(t,xdetrend)

现在,去趋势后的信号的两个端点都接近于零,这减少了引入的瞬变。调用 resample,然后添加回趋势。

[ydetrend,ty] = resample(xdetrend,t,desiredFs,p,q,lpFilt);

y = ydetrend + polyval(a,ty);

plot(t,x,'.',ty,y)

xlabel('Time')

ylabel('RPM')

legend('Original','Resampled (detrended, custom filter)','Location','best')

总结

此示例说明如何使用 resample 将均匀和非均匀采样信号转换为固定速率。

延伸阅读

有关使用自定义样条重新构造非均匀间隔采样的详细信息,请参考 Curve Fitting Toolbox™ 文档。

非均匀采样重建 matlab,对非均匀采样信号进行重采样相关推荐

  1. matlab 非结构网格,基于MATLAB的非结构网格生成器和浅水问题的数值模拟

    文章编号:1000-4874(2009)-04-0398-08 基于 MATLAB 的非结构网格生成器 和浅水问题的数值模拟* 蒋艳群,段雅丽, 刘儒勋,张韵华 (中国科学技术大学数学系,安徽合肥,2 ...

  2. matlab 降采样代码,matlab 点云降采样 pcdownsample()

    ** 点云数据降采样 pcdownsample() ** pcdownsample降采样减少点云数据量: 一.语法: ptCloudOut = pcdownsample(ptCloudIn, 'ran ...

  3. 非侵入式负荷matlab程序,非侵入式负荷分解之BLUED数据集

    非侵入式负荷分解之BLUED数据集 非侵入式负荷分解之BLUED数据集 BLUED数据集包含大约8天之内来自单个美国家庭的高频(12 kHz)家庭级数据.该数据集还包含一个事件列表,该列表涉及家庭中每 ...

  4. 非精确线搜索 matlab,使用非精确线搜索Armijo算法确定步长的最速下降法(MATLAB)...

    Armijo算法实现: function mk = armijo( fun, xk, rho, sigma, gk ) assert( rho > 0 && rho < 1 ...

  5. matlab 等距采样,对均匀采样信号进行重采样

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

  6. Deep Non-Line-of-Sight Reconstruction:深度非视域重建

    点击上方"视学算法",选择"星标" 干货第一时间送达 作者:坐化 | 来源:知乎 https://zhuanlan.zhihu.com/p/157348690 ...

  7. matlab 非a到z,matlab命令及函数A到Z

    A a abs 绝对值.模.字符的ASCII码值 acos 反余弦 acosh 反双曲余弦 acot 反余切 acoth 反双曲余切 acsc 反余割 acsch 反双曲余割 align 启动图形对象 ...

  8. matlab fm非相干解调,FM调制和相干解调,非相干解调讲解.doc

    PAGE ???通信原理课程设计报告 题目:模拟通信系统频率调制的实现 专业班级: 13电信科技2班 姓 名: 学 号: 指导教师: 彭文娟 [摘要]本设计主要是用MATLAB软件仿真实现语音信号作为 ...

  9. matlab fm非相干解调,FM调制和相干解调,非相干解调.pdf

    通信原理课程设计报告 题目: 模拟通信系统频率调制的实现 专业班级: 13 电信科技 2 班 姓 名: 学 号: 指导教师: 彭文娟 [摘要] 本设计主要是用 MATLAB软件仿真实现语音信号作为输入 ...

  10. sbm预测matlab,**matlab计算非期望产出sbm模型代码**

    matlab计算非期望产出sbm模型代码 data1=xlsread('E:\论文材料\毕业论文\02.xlsx',1) data2=xlsread('E:\论文材料\毕业论文\02.xlsx',2) ...

最新文章

  1. Python使用过滤器(filter)进行图像模糊处理
  2. Linux命令之df
  3. Firefox 65.0.2 发布,Firefox 66 预计3月19日推出
  4. express4.x中的链式路由句柄
  5. 速览Java 7 MethodHandle及其用法
  6. 表单在线生成 html代码,JSP实现用于自动生成表单标签html代码的自定义表单标签...
  7. python字符串转浮点数_python – 无法将字符串列表转换为浮点数
  8. MongoDB,分组,聚合
  9. php 防微信照片上传,PHP仿微信多图片预览上传功能
  10. python文件目录操作-2
  11. 施乐服务器装系统闪EE,施乐7535755633755575驱动安装教程
  12. 用友U8打开起初采购入库单报错
  13. Codeforces 1096D
  14. 四、Flink部署 , job配置与运行
  15. [渝粤教育] 兴义民族师范学院 数据结构 参考 资料
  16. 椭圆曲线上两种基本的运算:点集运算、P+Q详解
  17. 客户细分——RFM模型
  18. uniapp showToast
  19. Keil C51 V6.12
  20. 仿微信朋友圈,仿微信小视频 ,录制视频功能

热门文章

  1. CAXA_三维电子图板v2
  2. python pip卸载
  3. 天书 kdb+之q语言
  4. 使用osgeo的GDAL获取tiff文件坐标
  5. 《学习openCV》例程解析 ex_9_3(codeBook模型实现背景减除)
  6. golang实现简单rpc调用
  7. mysql如何批量添加数据_mysql如何大批量插入数据 mysql大批量插入数据4种方法
  8. 2020.10.20英语前端电话面试总结
  9. 国产化软件ATECLOUD与LabVIEW软件相比有何优势
  10. Github爆款!Aura v2.0.0正式版来了…