Articles of 信号处理

class内信号处理

我有信号function的问题,我需要第二个参数调用我的课程的function signal (SIGINT, myClass_function); 但据我所知,它需要是静态的无效的。 所以我不能访问我的对象的同一个实例来访问我需要的variables foo.h中 class Foo { public: std::vector<my_struct> vm = std::vector<my_struct>(50); static void myClass_function(int parameter) { // handling signal here // i need to access vm here } }; Foo.cpp中 void Foo::something() { // call signal signal(SIGINT, myClass_function); } 如果用户按ctrl + c,vector vm的所有数据都需要清理干净。 没办法做到这一点? 任何人都可以帮助我?

Sox(Swiss Army Knife)用于沉默和噪音去除的algorithm是什么

我曾尝试Sox从audio文件中删除沉默和噪音。 我想知道它的技术细节来理解它。 在专业软件可以依靠它之前,这对于理解它是很重要的(我知道它很好用,并且被许多人所使用) 当使用Noise Profile对Noise进行采样,然后使用Noisered进行去除时,Sox在这个过程中究竟做了什么? 类似地,当添加VAD效果时。 有没有技术上的解释或一些我可以阅读理解它的文件。

GNU广播和野生动物追踪

我和野生动物无线电发射机一起工作,我想build立一些能听取这些信号并跟踪听到的信息。 信号是通常每分钟发送60次的音调,如果运动传感器指示动物已经死亡,则为120。 我的计划是使用GNU无线电收听并将信号转换成保存到文件的某种types的matrix,然后在第二个程序中进行分析。 有没有一种方法可以在几百兆赫的频率上以500赫兹的间隔获得信号强度的vector,并将它们放在一起形成一个matrix? 辅助程序将解释这个输出并find野生动物发射器并logging它们的脉率。 这个想法是从GNU Radio每隔10秒钟获取一个新文件,并在收到第二个程序时处理它。 我一直在试图使用GNU Radio中的文件接收器块,并意识到它是二进制的。 也不确定它究竟包含什么。 任何build议的方法,我应该如何做到这一点将不胜感激!

Linux,C ++audio捕捉(只​​是麦克风)库

我正在开发一个音乐游戏,就像一个星星,而不是唱歌,你必须播放录音机 。 这就是所谓的oFlute ,它还处于早期的发展阶段。 在游戏中,我捕捉麦克风input,然后进行简单的FFT分析,并将结果与​​典型录音机的频率进行比较,从而得到播放的音符。 在开始时,我使用的audio库是RtAudio ,但我不记得为什么我切换到PortAudio ,这正是我目前使用的。 问题是,有时会随机崩溃或停止捕获,就像麦克风没有声音一样。 我的问题是,在Linux上捕获麦克风input的最佳select是什么? 我只需要打开,读取和closures麦克风的字节stream。 我一直在阅读这个指南 ,(un)惊奇地说: 我不认为PortAudio是类Unix操作系统的非常好的API。 那么,你推荐我什么?

点击ALSA音源

我正在学习在Raspberry Pi 2上使用ALSA。我用C ++编写了一个小testing程序来生成一个440Hz的testing音调。 它使音调,但是有一个点击声音约每秒钟两次。 有没有人有一个想法,为什么这可能会发生? 代码如下。 #include <cmath> #include <climits> #include <iostream> #include <alsa/asoundlib.h> #include "definitions.hpp" using namespace std; int main() { int ret; snd_pcm_t* pcm_handle; // device handle snd_pcm_stream_t stream = SND_PCM_STREAM_PLAYBACK; snd_pcm_hw_params_t* hwparams; // hardware information char* pcm_name = strdup("plughw:0,0"); // on-board audio jack int rate = 48000; const uint16 freq = […]

所有信号的信号处理程序

我怎样才能使用信号(3)在运行的操作系统上注册一个信号处理器来处理所有信号? 我的代码如下所示: void sig_handler(int signum) { printf("Received signal %d\n", signum); } int main() { signal(ALL_SIGNALS_??, sig_handler); while (1) { sleep(1); }; return 0; }

针对这种小型数据/命令广播应用的build议networking拓扑结构?

我们正在整合一个通过模数转换卡读取〜32个电压信号的系统,对它们进行一些预处理,并将结果(仍然分为32个通道)作为UDP数据包传递到networking, (a)显示,(b)进一步处理,(c)search标准以改变采集系统的状态,或(d)AC的某种组合。 同时在计算机上运行一个GUI进程,通过UDP打包的命令消息执行后一个进程(vis计算机),这个进程在数据生成计算机和可视计算机的多个进程中改变状态。 我是networking编程的新手,很难挑选networking拓扑。 对于相对较小的应用程序,是否有任何关于networking拓扑的启发式(或书籍章节,论文),而不需要灵活地传递数据,命令和命令确认? 系统详情: 原始数据采集发生在单个Linux机器上。 简单地处理数据,保存到磁盘,推送到networking使用大约25%的CPU容量和less量的内存。 less于0.5 Mb /秒的数据进入networking。 数据生成的所有代码都在c ++中。 另一台linux机器运行几个可视化/处理/ GUI进程。 GUI控制采集机器和vis / processing / GUI计算机本身的进程。 这段代码主要是用c ++编写的,在Python中有一些小实用程序。 我们将编写其他应用程序,以便收听原始数据,处理的数据以及所有传递的命令; 那些应用程序也希望发出命令 – 我们不能预期有多less个这样的模块要写,但我们期望3或4个数据繁重的进程将所有32个inputstream转换成单个输出; 以及3个或4个一次性小型应用程序,如“命令logging器”。 模块化要求意味着我们希望旧的数据生成器和命令发布者不知道有多less听众在那里。 我们也希望命令被收件人确认。 两台机器通过交换机连接,数据包(数据和命令,以及确认)都以UDP方式发送。 我们正在考虑的五种可能性: 数据stream,命令和确认是端口号的目标。 数据生成器将独立数据stream作为UDP数据包发送到可视化计算机上的独立可视化过程所绑定的不同端口号。 每个进程还将传入命令的侦听端口和传入确认的另一个端口绑定到传出命令。 这个选项看起来不错,因为内核负责stream量/过滤数据包。 但是很糟糕,因为在难以预料的添加模块的情况下很难看到进程如何处理对方; 也似乎导致了港口的爆炸式增长。 数据stream通过端口号被定位到它们各自的可视化器,每个进程绑定一个端口来监听命令。 但是所有的命令发布者都将命令发送到一个数据包转发过程,该过程知道所有进程的命令入口,并将每个命令转发给所有进程。 确认也发送到这个通用命令input端口并转发给所有进程。 我们将关于每个命令的预期目标以及每个确认的信息打包到命令/确认数据包中,所以过程本身必须筛选所有命令/确认以查找与其相关的命令/确认。 数据包转发过程也是所有数据包的目标。 所有的数据包和所有的命令包都被转发到大概40个不同的进程。 这显然会在子网上增加更多的stream量。 它也清理了绑定端口的爆炸。 两台数据包发送器可以运行在电脑上 – 一个广播命令/ ack到所有端口。 另一个将数据广播到只有可能需要数据的端口。 我们的32个可视化过程可以捆绑到一个为32个信号绘制数据的过程中,从而大大减less了选项3引起的额外stream量。 如果您已经在less数机器上的多个进程之间传递数据,并且有一些关于哪些策略是强大的智慧或经验法则,那么我将非常感谢您的build议! (欢迎要求澄清图片)

电视(电视)video的实时像素级分析build议

[注:这是对先前被认为不合适和被closures的问题的重写。] 我需要对电视(电视)video进行像素级分析。 这种分析的确切性质是不相关的,但是它基本上涉及从MPEG-2传输stream开始查看每个电视video帧的每个像素。 主机平台将是服务器级的多处理器64位Linux机器。 我需要一个库,可以处理传输stream的解码,并实时显示图像数据。 OpenCV和ffmpeg是我正在考虑进行这项工作的两个库。 OpenCV很吸引人,因为我听说它具有易于使用的API和丰富的图像分析支持,但是我没有使用它的经验。 过去我使用ffmpeg从文件中提取video帧数据进行分析,但缺乏图像分析支持(尽pipe英特尔的IPP可以补充)。 除了解决这个问题的一般build议(不包括实际的图像分析),我还有一些更具体的问题可以帮助我开始: ffmpeg或OpenCV是业界常用的实时video分析的基础,还是我应该看的其他东西? OpenCV能够实时解码video帧,并且仍然留下足够的CPU来进行非平凡的图像分析,也是实时的吗? 足够使用ffpmeg进行MPEG-2传输stream解码,还是仅仅直接使用MPEG-2解码库(如果是,哪一个)? ffmpeg或OpenCV在生成时特别有效(如RGB,YUV或YUV422等)的输出帧是否有特定的像素格式?

比较录音

我有5个录制的wav文件。 我想比较新的录音与这些文件,并确定哪一个它最像。 在最终产品中,我需要在Linux上用C ++实现它,但现在我正在Matlab中进行实验。 我可以很容易地看到FFT图。 但我不知道如何比较它们。 我如何计算两个FFT图的相似度? 编辑:只有录音中的演讲。 实际上,我试图找出几个电信公司的答录机的反应。 这足以区分“这个人目前无法达到”和“这个数字不再被使用”

在python守护进程中的信号处理

我安装了python-daemon ,现在我试图获得信号处理的权利。 我的代码: #!/usr/bin/env python # -*- coding: utf-8 -*- import signal, time, syslog import daemon def runDaemon(): context = daemon.DaemonContext() context.signal_map = { signal.SIGTERM: programCleanup } context.open() with context: doMainProgram() def doMainProgram(): while True: syslog.syslog("pythonDaemon is running") time.sleep(5) def programCleanup(): syslog.syslog("pythonDaemon STOP") if __name__ == "__main__": runDaemon() 当我启动代码时,一切都按预期工作: pythonDaemon正在运行的文本每5秒钟被写入/var/log/syslog 。 但是当我想用kill -TERM *PID*终止守护进程时,守护进程终止,但syslog中缺less文本pythonDaemon STOP […]