Java是用于实时音频处理的C/C++的合适替代品吗?
我正在考虑一个带有~100(最大)音频轨道的应用程序,延迟线(30s @ 48khz),滤波(512点FIR?),以及同时在每个轨道上发生的其他DSP类型操作.
操作将以浮点转换和执行.
该系统可能是一个四核3GHz,4GB RAM,运行Ubuntu.
我看过有关Java的文章比过去快得多,接近C/C++,现在也有实时扩展.这是现实吗?它是否需要硬核编码和调整来实现C的%50-%100性能指标?
我真的在寻找一种感觉,如果这是可能的,并找到任何陷阱.
我一直在使用FFT的Exocortex实现,但我遇到了一些问题.
每当我在调用iFFT之前修改频率区间的幅度时,结果信号包含一些咔嗒声和砰砰声,特别是当信号中存在低频时(如鼓或低音).但是,如果我用相同的因子衰减所有的箱子,就不会发生这种情况.
让我举一个4样本FFT输出缓冲区的例子:
// Bin 0 (DC)
FFTOut[0] = 0.0000610351563
FFTOut[1] = 0.0
// Bin 1
FFTOut[2] = 0.000331878662
FFTOut[3] = 0.000629425049
// Bin 2
FFTOut[4] = -0.0000381469727
FFTOut[5] = 0.0
// Bin 3, this is the first and only negative frequency bin.
FFTOut[6] = 0.000331878662
FFTOut[7] = -0.000629425049
Run Code Online (Sandbox Code Playgroud)
输出由成对的浮点组成,每个浮点数代表单个bin的实部和虚部.因此,bin 0(数组索引0,1)将代表DC频率的实部和虚部.正如你所看到的,第1和第3个箱子都有相同的值(除了Im部分的符号),所以我猜bin 3是第一个负频率,最后索引(4,5)将是最后的正值频率仓.
然后,为了衰减频率仓1,这就是我所做的:
// Attenuate the 'positive' bin
FFTOut[2] *= 0.5;
FFTOut[3] *= 0.5;
// Attenuate its corresponding negative bin.
FFTOut[6] *= 0.5;
FFTOut[7] *= 0.5;
Run Code Online (Sandbox Code Playgroud)
对于实际测试,我使用1024长度的FFT,我总是提供所有样本,因此不需要0填充.
// Attenuate
var …Run Code Online (Sandbox Code Playgroud) 我必须比较两个时间 - 电压波形.由于这些波形源的特殊性,其中一个可以是另一个的时移版本.
我怎样才能找到时间转移?如果是的话,它有多少.
我在Python中这样做,并希望使用numpy/scipy库.
我正在使用SDK for iOS 5.0和XCode 4.2开发iOS应用程序.
我想开发一个识别声音的应用程序.我看到有一个名为Sound Hound的应用程序可以识别音乐并告诉艺术家和标题.
我怎么能做类似的事情?我想将声音与现有声音数据库进行比较.我怎样才能做到这一点?
也许我可以使用傅立叶变换.我不知道如何处理声音.或者它可能类似于语音识别,不是吗?
任何人都可以向我解释相关和卷积的相似点和不同点吗?请解释背后的直觉,而不是数学方程(即翻转内核/脉冲).每个类别的图像处理域中的应用示例也将受到赞赏
signals signal-processing image-processing convolution correlation
什么使卷积内核可分离?我怎样才能分辨出那些可分离的部分是为了进行两次1D卷积而不是2D卷积>
谢谢
傅立叶变换F的幅度和相位定义为:
Mag = sqrt(Real(F)^2 + Imaginary(F)^2)
Run Code Online (Sandbox Code Playgroud)
和
Phase = arctan(Imaginary(F)/Real(F))
Run Code Online (Sandbox Code Playgroud)
我曾尝试编写matlab代码,该代码采用灰度图像矩阵,对矩阵执行fft2(),然后根据变换计算幅度和相位.然后我想计算傅里叶变换的虚部和实部.这是通过将前两个方程重新排列为:
Real = Mag/sqrt(1 + tan(Phase)^2)
Run Code Online (Sandbox Code Playgroud)
和
Imaginary = Real*tan(Phase)
Run Code Online (Sandbox Code Playgroud)
最后组合和逆fft2:
F = Real + i*Imaginary
image = ifft2(F)
Run Code Online (Sandbox Code Playgroud)
我希望看到与输入相同的图像,但我得到了垃圾.我的数学错了吗?我的matlab mfile代码如下:
function y = forwardBackwardFFT(image)
F = fft2(image);
mag = sqrt(real(F).^2 + imag(F).^2);
phase = atan(imag(F)./real(F));
re = sqrt((mag.^2)./(1 + tan(phase).^2));
im = re.*tan(phase);
F = re + i*im;
f = ifft2(F);
subplot(1,2,1);
imshow(image);
Title('Original Image');
subplot(1,2,2);
imshow(f);
Title('Image after forward and backward FFT');
y = f;
Run Code Online (Sandbox Code Playgroud)
非常感谢 :)
我需要用c#编写的低通和高通滤波器.我有这个过滤过程的双数组.我想如果我尝试将matlab Butterworth和Chebyshev算法转换为c#,那就更容易了.但我无法找到在互联网上butter.m和切比雪夫算法的代码,我不想MATLAB和信号处理工具设置成我的电脑.你能提供这些代码吗?谢谢..
作为一个有趣的家庭研究项目的一部分,我试图找到一种方法来减少/转换一首像音频信号的嗡嗡声(我们人们在听一首歌时感知的基本旋律).在我进一步描述我对此问题的尝试之前,我想提一下,虽然我在分析图像和视频方面有很多经验,但我对音频分析还是全新的.
谷歌搜索后,我发现了一堆旋律提取算法.给定一首歌的复音音频信号(例如.wav文件),它们输出音高轨道---在每个时间点他们估计主音调(来自歌手的声音或某些旋律生成乐器)并追踪主导音乐随着时间推移.
我读了几篇论文,他们似乎计算了这首歌的短时傅立叶变换,然后对频谱图进行了一些分析,以获得并跟踪主导音调.旋律提取只是我正在尝试开发的系统中的一个组件,所以我不介意使用任何可用的算法,只要它在我的音频文件上做得不错并且代码可用.由于我是新手,我很高兴听到有关哪些算法运行良好以及我在哪里可以找到其代码的任何建议.
我发现了两种算法:
我选择Melodia作为不同音乐类型的结果看起来相当令人印象深刻.请检查以查看其结果.你听到的每首音乐的嗡嗡声基本上都是我感兴趣的.
"对于任何一首任意歌曲来说,这都是嗡嗡声的产生,我想在这个问题中帮助你".
该算法(可用作鞋面插件)输出音高轨道--- [time_stamp,pitch/frequency] --- Nx2矩阵,其中第一列是时间戳(以秒为单位),第二列是主音调检测到相应的时间戳.下面显示的是从用紫色覆盖的算法获得的音高轨迹的可视化,其中歌曲的时域信号(上图)和频谱图/短时间 - 傅立叶.音调/频率的负值表示非浊音/非旋律片段的算法主导音调估计.因此,所有音高估计> = 0对应于旋律,其余对我来说并不重要.

现在我想将这个音轨转换回类似音频信号的嗡嗡声 - 正如作者在他们的网站上所说的那样.
下面是我写的MATLAB函数:
function [melSignal] = melody2audio(melody, varargin)
% melSignal = melody2audio(melody, Fs, synthtype)
% melSignal = melody2audio(melody, Fs)
% melSignal = melody2audio(melody)
%
% Convert melody/pitch-track to a time-domain signal
%
% Inputs:
%
% melody - [time-stamp, dominant-frequency]
% an Nx2 matrix with time-stamp in the
% first column and the detected dominant
% frequency at corresponding time-stamp
% …Run Code Online (Sandbox Code Playgroud) python matlab signal-processing pitch-tracking audio-analysis
所以我知道FFT的卷积比现实空间中的卷积具有更低的计算复杂度.但是FFT卷积的缺点是什么?
内核大小是否始终必须与图像大小匹配,或者是否有用于处理此问题的函数,例如在pythons numpy和scipy包中?那么抗锯齿效果呢?