上采样的正确方法是什么?

2024-04-15

我有一组 75 Hz 的样本,我想以 128 Hz 存储它们。如果是 64 Hz 和 128 Hz,那很简单,我只需将所有样本加倍即可。但是,如果采样率不是彼此的一小部分,那么正确的方法是什么?


当您想避免过滤时,您可以:

  1. 将信号处理为一组连接的插值三次曲线

    但这一点与使用线性插值相同。如果不了解更多关于你的信号和目的的信息,你就无法构建valid系数(不损害信号精度)例如如何构造这样的立方体请看这里:

    • 我的插值三次方 https://stackoverflow.com/a/20517874/2521214

    子弹中#3该链接内部是我使用的系数。我认为甚至足以满足您的目的,因此您可以尝试一下。如果你想进行自定义插值,请看这里:

    • 如何构建自定义插值曲线 https://stackoverflow.com/a/23627081/2521214
  2. 创建可以在采样开始后给定时间内返回信号中的点的函数

    所以做类似的事情

    double signal(double time);
    

    where time是从采样开始算起的时间,以 [s] 为单位。在此函数内计算您需要访问哪 4 个样本。

    ix = floor(time*75.0);
    

    为您提供曲线起点样本索引。三次方需要 4 个点,一个在曲线之前,一个在曲线之后......所以对于插值三次点p0,p1,p2,p3使用样品ix-1,ix,ix+1,ix+2。计算三次系数a0,a1,a2,a3并计算三次曲线参数t(我使用范围<0,1>) so

    t=(time*75.0); t-=floor(t);
    
    • 绿色 - 实际曲线段
    • aqua - 实际曲线段控制点 = 75.0 Hz 样本
    • 红色 - 曲线参数插值参数 t
    • 灰色-实际时间

    抱歉,我忘记绘制实际的输出信号点,它应该是绿色和灰色的交集

  3. 只需对采样数据进行 for 循环,时间步长为 1/128 s

    像这样的东西:

    double time,duration=samples*75.0,dt=1.0/128.0;
    double signal128[???];
    for (time=0.0,i=0;time<duration;i++,time+=dt)
     signal128[i]=signal(time);
    

    样本是按 75.0 Hz 采样的样本中的输入信号数组大小

[notes]

  • for/duration 可以对整数进行...
  • 将信号数据类型更改为您需要的
  • inside signal(time)您需要处理边缘情况(信号的开始和结束)
  • 因为在第一个样本之前和最后一个样本之后信号中没有定义点。您可以复制它们或镜像下一点(镜像更好)。
  • 整个过程可以改为连续处理,无需缓冲区,只需记住信号中的最后 4 个点,这样您就可以在 RT 中执行此操作。粗略地说,您将被延迟 2-3 个 75.0 Hz 样本……当您将所有这些放在一起时,您会发现这是一个 FIR 滤波器:)
  • 如果你需要保留更多,那么一阶导数添加更多点......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

上采样的正确方法是什么? 的相关文章

  • 起订量要求?违背了目的?

    是否需要虚拟化您想要模拟的所有属性访问器就违背了模拟的目的 我的意思是 如果我必须修改我的对象并虚拟化我想要模拟的每个访问器 我难道不能继承我的类并自己模拟它吗 你的问题非常有效 但如果你仔细想想 没有其他方法可以模拟课程 如果你采用一个接
  • Accept() 是线程安全的吗?

    我目前正在用 C 语言为我正在做的课程编写一个简单的网络服务器 我们的一项要求是实现一个线程池来使用 pthread 处理连接 我知道我将如何粗略地执行此操作 在主线程中调用accept并将文件描述符传递给freee线程 但是我的朋友建议了
  • 如何从RichTextBox中获取显示的文本?

    如何获得显示的RichTextBox 中的文本 我的意思是 如果 RichTextBox 滚动到末尾 我只想接收那些对我来说可见的行 P S 获得第一个显示的字符串就足够了 您想使用 RichTextBox GetCharIndexFrom
  • 为什么 VB.NET 和 C# 中针对值检查 null 存在差异?

    In VB NET http en wikipedia org wiki Visual Basic NET有时候是这样的 Dim x As System Nullable Of Decimal Nothing Dim y As System
  • 如何将十六进制字符串转换为十六进制数字[重复]

    这个问题在这里已经有答案了 可能的重复 如何将十六进制字符串转换为有符号整数 https stackoverflow com questions 3705429 how do i convert hex string into signed
  • 将图像文件从网址复制到本地文件夹?

    我有该图像的网址 例如 http testsite com web abc jpg http testsite com web abc jpg 我想将该 URL 复制到 c images 中的本地文件夹中 而且当我将该文件复制到文件夹中时
  • 是否允许将类模板类型参数键入相同的名称?

    这似乎可以在 MSVC 中按预期编译甚至工作 但它是合法的 C 代码吗 它是否能保证执行此处所期望的操作 即将模板类型导出到结构体的同名用户 template
  • 找到的程序集的清单定义与程序集引用不匹配

    我试图在 C Windows 窗体应用程序 Visual Studio 2005 中运行一些单元测试 但出现以下错误 System IO FileLoadException 无法加载文件或程序集 实用程序 版本 1 2 0 200 文化 中
  • 如何在 Asp.net Gridview 列中添加复选框单击事件

    我在 asp 中有一个 gridview 其中我添加了第一列作为复选框列 现在我想选择此列并获取该行的 id 值 但我不知道该怎么做 这是我的 Aspx 代码
  • 在 MATLAB 中创建共享库

    一位研究人员在 MATLAB 中创建了一个小型仿真 我们希望其他人也能使用它 我的计划是进行模拟 清理一些东西并将其变成一组函数 然后我打算将其编译成C库并使用SWIG https en wikipedia org wiki SWIG创建一
  • 在简单注入器中注册具有多个构造函数和字符串依赖项的类型

    我正在尝试弄清楚如何使用 Simple Injector 我在项目中使用了它 注册简单服务及其组件没有任何问题 但是 当组件具有两个以上实现接口的构造函数时 我想使用依赖注入器 public DAL IDAL private Logger
  • 允许使用什么类型的内容作为 C 预处理器宏的参数?

    老实说 我很了解 C 编程语言的语法 但对 C 预处理器的语法几乎一无所知 尽管我有时在编程实践中使用它 所以问题来了 假设我们有一个简单的宏 它扩展为空 define macro param 可以放入宏调用构造中的语法有哪些限制 调用宏时
  • 设计 Javascript 前端 <-> C++ 后端通信

    在我最近的将来 我将不得不制作一个具有 C 后端和 Web 前端的系统 要求 目前 我对此了解不多 我认为前端将触发数据传输 而不是后端 所以不需要类似 Comet 的东西 由于在该领域的经验可能很少 我非常感谢您对我所做的设计决策的评论
  • 使用(linq to sql)更新错误

    我有两个表 通过外键 CarrierID 绑定 Carrier CarrierID CarrierName CarrierID 1 CarrierName DHL CarrierID 2 CarrierName Fedex Vendor V
  • 使用 foreach 循环和 XmlNodeList C# 将新节点附加到节点列表

    目前我处理的是这样的XML类型 XML FILE http 20drive google com open id 0By5BxgNi9eGcRldxcEZNU0FDTzQ 参考XML文件 我想检查一个节点 如果找不到该节点 我必须将该节点附
  • 如何使用收益返回和递归获得字母的每个组合?

    我有几个像这样的字符串列表 可能有几十个列表 1 A B C 2 1 2 3 3 D E F 这三个仅作为示例 用户可以从几十个具有不同数量元素的类似列表中进行选择 再举个例子 这对于用户来说也是一个完全有效的选择 25 empty 4 1
  • 纯虚函数可能没有内联定义。为什么?

    纯虚函数是那些虚函数并且具有纯说明符 0 第 10 4 条第 2 款C 03 的内容告诉我们什么是抽象类 顺便说一句 如下 注意 函数声明不能 同时提供纯说明符和定义 尾注 示例 struct C virtual void f 0 ill
  • 从有符号字符转换为无符号字符然后再转换回来?

    我正在使用 JNI 并有一个 jbyte 类型的数组 其中 jbyte 表示为有符号字符 即范围从 128 到 127 jbyte 表示图像像素 对于图像处理 我们通常希望像素分量的范围为0到255 因此 我想将jbyte值转换为0到255
  • 如何设置 CMake 与 clang 交叉编译 Windows 上的 ARM 嵌入式系统?

    我正在尝试生成 Ninja makefile 以使用 Clang 为 ARM Cortex A5 CPU 交叉编译 C 项目 我为 CMake 创建了一个工具链文件 但似乎存在错误或缺少一些我无法找到的东西 当使用下面的工具链文件调用 CM
  • g++ C++0x 枚举类编译器警告

    我一直在将可怕的 C 类型安全伪枚举重构为新的 C 0x 类型安全枚举 因为它们是way更具可读性 不管怎样 我在导出的类中使用它们 所以我明确地将它们标记为导出 enum class attribute visibility defaul

随机推荐