- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我不是信号处理方面的专家。我正在使用 C++ 对一维信号进行简单处理。我真的很想知道如何确定具有最高过零率(最高频率!)的部分。有没有一种简单的方式或方法来告诉这部分的开始和结束。
This image说明我的信号形式,this image是我需要做的(开始和结束两个索引)
编辑:
其实我对开始和结束的宽度没有事先的概念,它是如此多变。我可以计算过零的数量,但我不知道如何定义它的范围
double calculateZC(vector<double> signals){
int ZC_counter=0;
int size=signals.size();
for (int i=0; i<size-1; i++){
if((signals[i]>=0 && signals[i+1]<0) || (signals[i]<0 && signals[i+1]>=0)){
ZC_counter++;
}
}
return ZC_counter;
}
最佳答案
这是一个相当简单的策略,可能会给您一些起点。算法概要如下
{y0,y1,...}
sigma
.0<p<1
定义何时开始寻找区域。{t0,t1}
过零次数最多的区域我不会给出任何C++代码,但该方法应该很容易实现。作为示例,让我们使用以下函数
我们想要的是大约 480 和 600 之间的区域,其中零密度高于前面。该算法的第一步是计算零的位置。您可以通过已有的东西来做到这一点,但不是计算,而是存储 i
的值。遇到零的地方。
这会给你一个零位置列表
从这个列表(您可以直接在上面的 for 循环中执行此操作!)您创建一个与输入数据大小相同的列表,看起来像 {0,0,0,...,1,0,..,1,0,..}
.输入数据中的每个过零位置都标记为 1。
下一步是使用大小为 sigma
的平滑过滤器对该列表进行平滑处理.在这里,你可以随心所欲;在最简单的情况下 moving average或高斯滤波器。越高越好sigma
越大,您的环顾窗口就会测量某个点周围有多少过零点。让我把这个过滤器的输出连同原来的零位置一起给出。请注意,我在这里使用了大小为 10 的高斯滤波器
在下一步中,您将通过过滤后的数据找到最大值。在这种情况下,它约为 0.15。现在你选择你的第二个参数,它是这个最大值的某个百分比。让我们说 p=0.6
.
最后一步是遍历过滤后的数据,当值大于p
时你开始记住一个新的区域。一旦该值低于 p
,你结束这个区域并记住起点和终点。遍历完数据后,您会看到一个区域列表,每个区域都由起点和终点定义。现在您选择延伸最大的区域,您就完成了。
(可选,您可以将过滤器大小添加到最终区域的每一端)
对于上面的例子,我得到11个区域如下
{{164,173},{196,205},{220,230},{241,252},{259,271},{278,290},
{297,309},{318,327},{341,350},{458,468},{476,590}}
扩展最大的是最后一个 {476,590}
.最终结果看起来(1/2过滤区域填充)
请不要因为我的回答太长而气馁。我试图详细解释一切。实现实际上只是一些循环:
{0,0,..,1,0,...}
关于C++,确定具有最高零交叉的部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19356030/
我想使用单个(交叉)编译器来编译不同 ARM 调用约定的代码:因为我总是想使用浮点和 NEON 指令,所以我只想选择硬浮点调用约定或软浮点(softfp)调用约定。 我的编译器默认为硬浮点,但它支持我
假设我正在构建一个依赖于两个库的 java 应用程序:A 和 B。A 和 B 都依赖于库 C。管理 A 和 B 使用相同版本的最佳方法是什么所以他们不冲突?我正在使用 Gradle。 最佳答案 从 G
我想在按钮的文本上添加图像。如果我将图像添加为按钮的背景,它就会添加到文本下方。预期结果作为图像添加。请帮忙 更新:我需要以编程方式执行此操作。 最佳答案 在 XML 中, * 在代码中
我已经开始使用 CSS3 制作动画了。 我尝试创建一个动画汉堡菜单,但结果有点难看。顶部和底部的条向右平移一点。所以旋转动画不是很流畅和正确。 这是结果 => 这是我的代码: /* HTML */
给定一个具有2条相交曲线的图像,如下图所示,我如何使用opencv或python检测和区分2条曲线? (所以我需要2条单独的曲线) 最佳答案 您可以扫描每一列,并从连接的零件中识别出簇。 伪算法: l
我正在尝试在 redhat 集群(x86_64 主机)上设置 cross-mingw。我没有 root 访问权限,并且可用的 mingw 二进制文件不起作用(坏 glibc 版本等)。我正在阅读本教程
我正在尝试在javaFX中开发一个游戏,当两个图像相交时,分数将被更新,并且障碍物将不可见。但不幸的是,在游戏中分数不断更新。 我想我无法在游戏中正确地使图像不可见。 以下是相关类的完整代码: pac
pikastar dot com 是网站,当向下滚动它然后在导航菜单展开固定位置时它 > 将穿过主 div。我该如何修复它。 #topNav.sticky { box-shadow: 0 10
我正在使用 Eclipse为 ARM 处理器交叉编译 g++ 项目。我在 Windows 环境中使用 yagarto 工具链。我对 C 项目没有问题,但是对于 C++,我一直收到错误: libc.a(
我想从两个哈希数组中获取并集/交集/差集,例如: array1 = [{:name =>'Guy1', :age => 45},{:name =>'Guy2', :age => 45}] array2
有没有办法在调用任何 Controller 操作之前执行一些代码? 我需要根据 get 参数的值设置 session 变量,而不考虑调用哪个 Controller 。 当然,一旦这个处理完成,请求需要
我刚开始使用 3D 网格,面向用于有限元分析。我想在立方体状矩阵中模拟 Material 的夹杂物(任何形状,但主要对球体和椭圆体感兴趣)。这些夹杂物不应彼此重合。 所以我想为python使用某种包,
我想知道以跨平台方式操作应用程序设置的最佳解决方案是什么。 在 iOS 中,我们可以在设置屏幕中更改应用程序外部的设置,但在 windows phone 和 android 中我们没有。 所以,我的想
var barcodeNum = ko.observable(""); VelocityMeetings.scan = function (params) { var errorMessage = k
这个问题在这里已经有了答案: Transforming data.frame in R (2 个答案) 关闭10 年前。 过去我问过一个关于如何create cross tables from a
我有两个共享同一个工厂的 Controller 。其中一个 Controller 正在更新工厂变量。其他人应该注意该变化并稍后显示。 我是这样尝试的: http://plnkr.co/edit/q1N
标题不好,但这是我发现的将我的问题与简单的表格交叉区分开来的方式,因为我之前的研究总是让我接触到这类主题。 我有几个表 - 为了简化起见,我们只用 3 个表来命名它们:A、B、C。我想将它们全部放在一
我需要做这样的事情(在 MySQL 中),我使用 UNION 的尝试直到现在才奏效。 理论上: SELECT * FROM tableA A JOIN tableB B ON A.tableAId =
注意:使用SDL 2.0,Cross header class问题 我在类之间进行交叉引用,主要是我的类初始化渲染器和我的纹理类引用渲染初始化。现在,我已经能够运行该程序,直到我开始放入纹理类,代码也
我有一个这样的字母数组 var letters = ["Y", "X", "A", "Y", "O", "H", "A", "O", "O"]; 我创建了一个循环来
我是一名优秀的程序员,十分优秀!