Tag: 信号处理

在SciPy中创build低通滤波器 – 理解方法和单位

我想用python过滤嘈杂的心率信号。 因为心率不应该是每分钟220次左右,所以我想过滤220bpm以上的所有噪音。 我把220 /分钟转换成3.66666666赫兹,然后把赫兹转换成rad / s,得到23.0383461 rad / sec。 取数据的芯片的采样频率是30Hz,所以我把它转换为rad / s得到188.495559rad / s。 在网上查了一些东西之后,我发现了一些带通滤波器,我想把它们变成低通滤波器。 这里是带通码的链接 ,所以我把它转换成这样: from scipy.signal import butter, lfilter from scipy.signal import freqs def butter_lowpass(cutOff, fs, order=5): nyq = 0.5 * fs normalCutoff = cutOff / nyq b, a = butter(order, normalCutoff, btype='low', analog = True) return b, a def butter_lowpass_filter(data, cutOff, […]

Python中可转换的STFT和ISTFT

是否有任何通用的短时傅立叶变换forms,并在SciPy或NumPy中内置相应的逆变换? 在matplotlib中有pyplot specgram函数,它调用ax.specgram() ,它调用mlab.specgram() ,它调用_spectral_helper() : #The checks for if y is x are so that we can use the same function to #implement the core of psd(), csd(), and spectrogram() without doing #extra calculations. We return the unaveraged Pxy, freqs, and t. 但 这是一个帮助函数,实现204 #psd,csd和频谱图之间的通用性。 这并不意味着在mlab之外使用 不过,我不确定这是否可以用来做STFT和ISTFT。 还有什么,或者我应该翻译像这些MATLAB函数 ? 我知道如何编写我自己的临时实现; 我只是寻找一些function齐全的,可以处理不同的窗口function(但有一个理智的默认),完全可逆COLA窗口( istft(stft(x))==x ),由多人testing,没有逐个错误,处理结束和零填充,为实际input快速RFFT实现等。

与非GPL许可证的C / C + + FFT库

我正在寻找一个许可证的FFT库,允许我将它包含在商业C ++软件中。 免费会很好。 (英特尔IPPS每个头为199美元,这对于编译它的开发人员来说有点贵)。 有人对这样的FFT库有很好的经验吗? 我发现这个页面,其中列出了很多库: http : //www.fftw.org/benchfft/ffts.html FFTW拥有GPL许可证,因此无法使用。 任何好的select?

如何编写一个信号处理程序来捕获SIGSEGV?

我想写一个信号处理程序来捕获SIGSEGV。 我保护一块内存以供读取或写入使用 char *buffer; char *p; char a; int pagesize = 4096; mprotect(buffer,pagesize,PROT_NONE) 这可以保护从缓冲区开始的页面缓冲区的任何读写操作。 其次,我尝试阅读记忆: p = buffer; a = *p 这将生成一个SIGSEGV,我的处理程序将被调用。 到现在为止还挺好。 我的问题是,一旦处理程序被调用,我想通过做改变访问写入的内存 mprotect(buffer,pagesize,PROT_READ); 并继续我的代码正常运作。 我不想退出这个function。 在未来写入相同的内存,我想再次捕捉信号,并修改写权限,然后logging该事件。 这里是代码 : #include <signal.h> #include <stdio.h> #include <malloc.h> #include <stdlib.h> #include <errno.h> #include <sys/mman.h> #define handle_error(msg) \ do { perror(msg); exit(EXIT_FAILURE); } while (0) char *buffer; int […]

为什么FFT产生复数而不是实数?

即使algorithm的input是一组离散的实数(整数),我们所遇到的所有FFT实现都会导致复值(包含实部和虚部)。 仅用实数来表示频域是不可能的?

了解FFT输出

我需要一些帮助来理解DFT / FFT计算的输出。 我是一名经验丰富的软件工程师,需要解读一些智能手机加速计读数,例如find主要频率。 不幸的是,我十五年前就读过大部分大学的EE课程,但在过去的几天里,我一直在阅读DFT和FFT(显然没有多大用处)。 请不要回答“去参加EE课”。 我实际上打算这样做,如果我的雇主将支付我。 🙂 所以这是我的问题: 我已经捕获了一个32赫兹的信号。 这是我在Excel中绘制的32分的1秒样本。 然后,我得到了哥伦比亚大学用Java编写的一些FFT代码 (在遵循“ Java中可靠且快速的FFT ”的文章中的build议之后)。 这个程序的输出如下。 我相信它正在运行一个就地FFT,所以它重新使用相同的缓冲区的input和输出。 Before: Re: [0.887 1.645 2.005 1.069 1.069 0.69 1.046 1.847 0.808 0.617 0.792 1.384 1.782 0.925 0.751 0.858 0.915 1.006 0.985 0.97 1.075 1.183 1.408 1.575 1.556 1.282 1.06 1.061 1.283 1.701 1.101 0.702 ] Im: [0.0 0.0 […]

WebRTC AGC(自动增益控制)

我正在testingWebRTC AGC,但是我必须做一些错误的事情,因为信号只是未经修改而通过。 以下是我如何创build和初始化AGC: agcConfig.compressionGaindB = 9; agcConfig.limiterEnable = 1; agcConfig.targetLevelDbfs = 9; /* 9dB below full scale */ WebRtcAgc_Create(&agc); WebRtcAgc_Init(agc, minLevel, maxLevel, kAgcModeFixedDigital, 8000); WebRtcAgc_set_config(agc, agcConfig); 然后,对于每个10ms的示例块,我执行以下操作: WebRtcAgc_Process(agc, micData, NULL, 80, micData, NULL, micLevelIn, &micLevelOut, 0, &saturationWarning); 其中micLevelIn设置为0。 有人能告诉我我做错了什么吗? 我预计全面的正弦音调将被削弱到目标DBFS的水平; 和低级正弦波(即-30dBFS)将被放大以匹配目标DBFS级别。 但是,这不是我所看到的。

在波浪中检测图案

我试图从心电图读取图像,并检测其中的每一个主波(P波,QRS波群和T波)。 现在我可以读取图像,并得到像(4.2; 4.4; 4.9; 4.7; …)这样的代表心电图数值的vector,问题的一半是什么。 我需要一个能够遍历这个向量的algorithm,并且能够检测到这些波的每一个何时开始和结束。 这是一个图表的例子: 如果他们总是有相同的大小,那将是容易的,但它不是像它的工作,或者如果我知道心电图会有多less波,但也可能会有所不同。 有没有人有一些想法? 谢谢! 更新 我想要实现的例子: 鉴于波 我可以提取vector [0; 0; 20; 20; 20; 19; 18; 17; 17; 17; 17; 17; 16; 16; 16; 16; 16; 16; 16; 17; 17; 18; 19; 20; 21; 22; 23; 23; 23; 25; 25; 23; 22; 20; 19; 17; 16; 16; 14; 13; […]

实时时间序列数据中的峰值信号检测

更新: 到目前为止performance最好的algorithm就是这个 。 这个问题探讨了用于检测实时时间序列数据中突发峰值的强大algorithm。 考虑以下数据集: p = [1 1 1.1 1 0.9 1 1 1.1 1 0.9 1 1.1 1 1 0.9 1 1 1.1 1 1 1 1 1.1 0.9 1 1.1 1 1 0.9 1, … 1.1 1 1 1.1 1 0.8 0.9 1 1.2 0.9 1 1 1.1 1.2 1 1.5 1 […]

信号处理程序在哪里应该生活在Django项目?

我刚刚开始在django项目中实现信号侦听器。 虽然我明白他们是什么以及如何使用他们。 我很难搞清楚我应该把它们放在哪里。 django网站的文档有这样的说法: 这个代码应该在哪里居住? 你可以把信号处理和注册码放在任何你喜欢的地方。 但是,您需要确保它所在的模块得到早期导入,以便在需要发送任何信号之前,信号处理得到注册。 这使得您的应用程序的models.py是注册信号处理程序的好地方。 虽然这是一个很好的build议,但在我的models.py中使用非模型类或方法只是歪曲了我。 那么,存储和注册信号处理程序的最佳实践/规则是什么?