标签: signal-processing

给定一个音频流,找到一个门猛击(声压级计算?)

与拍手探测器不同("Clap on!clap clap Clap off!clap clap Clap on,clap off,Clapper! clap clap ")我需要检测门何时关闭.这是一辆车,比房间或家门更容易:

听:http://ubasics.com/so/van_driver_door_closing.wav

看:
波形图像显示稳定线,然后突然中断,稳定下降到稳定线

它的采样速率为16位4khz,我希望避免大量处理或存储样本.

当您在大胆或其他波形工具中查看它时,它非常独特,并且由于车辆中声压的增加而几乎总是剪辑 - 即使窗户和其他门打开时:

听:http://ubasics.com/so/van_driverdoorclosing_slidingdoorsopen_windowsopen_engineon.wav

看:
替代文字

我希望有一个相对简单的算法可以读取4kHz,8位的读数,并跟踪"稳态".当算法检测到声级显着增加时,它将标记该点.

  • 你的想法是什么?
  • 你怎么会发现这个事件?
  • 声压级计算的代码示例是否有帮助?
  • 我可以减少采样频率(1kHz甚至更慢?)

更新:使用Octave(开源数值分析 - 类似于Matlab)并查看均方根是否会给我我需要的东西(这导致与SPL非常相似的东西)

Update2:在简单的情况下,计算RMS可以轻松地关闭门:
替代文字 替代文字
现在我只需要看看困难的情况(收音机,高温/高空等).CFAR看起来非常有趣 - 我知道我将不得不使用自适应算法,CFAR肯定符合要求.

-亚当

c algorithm audio signal-processing

41
推荐指数
4
解决办法
1万
查看次数

推荐用于R中非常大的数据集处理和机器学习的软件包

似乎R真的设计用于处理它可以完全进入内存的数据集.对于无法拉入内存的超大型数据集,建议使用哪些R软件包进行信号处理和机器学习?

如果R只是错误的方法,我会接受其他强大的免费建议(例如scipy,如果有一些很好的方法来处理非常大的数据集)

signal-processing r machine-learning bigdata

41
推荐指数
4
解决办法
2万
查看次数

如何在C中进行饱和添加?

在C中编写饱和加法的最佳(最干净,最有效)方法是什么?

函数或宏应添加两个无符号输入(需要16位和32位版本),如果总和溢出,则返回所有位 - 一(0xFFFF或0xFFFFFFFF).

目标是x86和ARM使用gcc(4.1.2)和Visual Studio(仅用于模拟,因此可以使用后备实现).

c algorithm performance signal-processing saturation-arithmetic

40
推荐指数
7
解决办法
3万
查看次数

吉他和弦识别算法?

什么是好的数字信号处理算法,这对吉他和弦有好处?由于快速傅里叶变换,我认为只有在吉他上演奏的单个音符才准确,而不是同时演奏的音符(即和弦).

谢谢!

audio signal-processing pitch-tracking guitar

39
推荐指数
2
解决办法
2万
查看次数

这个简单的FM合成器设计出了什么问题?

我正在尝试使用Audiolet(一个综合库,http: //oampo.github.io/ )在JavaScript中实现Yamaha YM3812声音芯片(又名OPL2 http://en.wikipedia.org/wiki/YM3812)的一些功能.Audiolet/api.html)

Audiolet允许您将合成器构建为节点图(振荡器,DSP,包络发生器等).

OPL2有9个通道,每个通道有两个运算符(振荡器).通常,每个通道中的一个振荡器调制另一个振荡器的频率.为了模拟这个,我为每个频道建立了一系列节点:

Synth节点链(九个通道之一)

已实施OPL2频道

节点链创建和连接代码:

var FmChannel = function(audiolet) {
    this.car = new ModifiedSine(audiolet);
    this.carMult = 1;
    this.setCarrierWaveform(this.SIN);
    this.mod = new ModifiedSine(audiolet);
    this.modMult = 1;
    this.setModulatorWaveform(this.SIN);
    this.modMulAdd = new MulAdd(audiolet);
    this.carGain = new Gain(audiolet);
    this.carEnv = new ADSREnvelope(audiolet, 0, 0.1, 0.1, 0.1, 0.1,
        function() {
            this.carEnv.reset();
        }.bind(this)
    );
    this.carAtten = new Multiply(audiolet);
    this.modGain = new Gain(audiolet);
    this.modEnv = new ADSREnvelope(audiolet, 0, 0.1, 0.1, 0.1, 0.1,
        function() {
            this.modEnv.reset();
        }.bind(this)
    );
    this.modAtten = …
Run Code Online (Sandbox Code Playgroud)

javascript signal-processing sound-synthesis audiolet web-audio-api

38
推荐指数
1
解决办法
1474
查看次数

如何在R中的数据点上运行高通或低通滤波器?

我是R的初学者,我试图在没有找到任何内容的情况下找到有关以下内容的信息.

图中的绿色图由红色和黄色图组成.但是,假设我只有绿色图形的数据点.如何使用低通/高通滤波器提取低/高频率(即大约红/黄图)?

高频正弦曲线调制到低频窦曲线

更新:图表是使用生成的

number_of_cycles = 2
max_y = 40

x = 1:500
a = number_of_cycles * 2*pi/length(x)

y = max_y * sin(x*a)
noise1 = max_y * 1/10 * sin(x*a*10)

plot(x, y, type="l", col="red", ylim=range(-1.5*max_y,1.5*max_y,5))
points(x, y + noise1, col="green", pch=20)
points(x, noise1, col="yellow", pch=20)
Run Code Online (Sandbox Code Playgroud)

更新2:使用signal包中的Butterworth过滤器建议我得到以下内容:

添加了过滤图表的原始图片

library(signal)

bf <- butter(2, 1/50, type="low")
b <- filter(bf, y+noise1)
points(x, b, col="black", pch=20)

bf <- butter(2, 1/25, type="high")
b <- filter(bf, y+noise1)
points(x, b, col="black", pch=20) …
Run Code Online (Sandbox Code Playgroud)

signal-processing r frequency-analysis

37
推荐指数
4
解决办法
4万
查看次数

Java中的信号处理库?

我想计算时间序列的功率谱密度; 做一些带通,低通和高通滤波; 也许其他一些基本的东西.

有没有一个很好的开源Java库来做到这一点?

我有点没有成功(例如,谷歌搜索"功率谱密度java"或"信号处理java"和点击链接,查看Apache Commons,Sourceforge,java.net等).

有许多小程序,书籍,教程,商业产品等,不符合我的需求.

更新:我找到了 org.apache.commons.math.transform进行傅立叶变换.这不实现功率谱密度,带通等,但它是一些东西.

java signal-processing numerical-analysis

35
推荐指数
4
解决办法
6万
查看次数

数据压缩算法

我想知道是否有人有一个数据压缩算法列表.我基本上都不知道数据压缩,我希望能够了解更多关于不同算法的知识,看看哪些是最新的,还有很多ASIC尚未开发.

我希望实现一个数据压缩ASIC,它独立于进入的数据类型(音频,视频,图像等).

如果我的问题太开放,请告诉我,我会修改.谢谢

c c++ compression algorithm signal-processing

33
推荐指数
3
解决办法
6万
查看次数

什么是汉明窗口?

我正在使用一些执行傅里叶变换的代码(计算音频样本的倒谱).在计算傅里叶变换之前,它会对样本应用汉明窗口:

for(int i = 0; i < SEGMENTATION_LENGTH;i++){
    timeDomain[i] = (float) (( 0.53836 - ( 0.46164 * Math.cos( TWOPI * (double)i  / (double)( SEGMENTATION_LENGTH - 1 ) ) ) ) * frameBuffer[i]);
}
Run Code Online (Sandbox Code Playgroud)

它为什么这样做?我找不到任何理由在代码中或在线上执行此操作.

signal-processing window-functions

32
推荐指数
4
解决办法
6万
查看次数

在python中绘制功率谱

我有一个301值的数组,这些数据是从301帧的影片剪辑中收集的.这意味着1帧中的1个值.影片剪辑以30 fps运行,实际上是10秒长

现在我想获得这个"信号"的功率谱(使用正确的轴).我试过了:

 X = fft(S_[:,2]);
 pl.plot(abs(X))
 pl.show()
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

 X = fft(S_[:,2]);
 pl.plot(abs(X)**2)
 pl.show()
Run Code Online (Sandbox Code Playgroud)

虽然我认为这不是真正的频谱.

信号: 在此输入图像描述

频谱: 在此输入图像描述

功率谱:

在此输入图像描述

任何人都可以提供一些帮助吗?我希望有一个以赫兹为单位的情节.

python signal-processing numpy scipy

32
推荐指数
5
解决办法
11万
查看次数