我想持续分析MIC音频(不仅仅是一个片段或预先录制的样本),还要显示频率图并滤除音频的某些方面.iPhone足够强大吗?考虑到谷歌和iPhone的语音识别,Shazaam和其他音乐识别应用以及吉他调谐器应用,我怀疑答案是肯定的.但是,我不知道我有什么限制要处理.
有人在这个地方玩吗?
我试图找到一个非常快速和有效的傅里叶变换(FFT).有谁知道任何好的.我需要在iPhone上运行它,所以它不能是密集的.相反,也许你知道一个像小波一样,我需要频率分辨率,但只需要一个窄带(声音音频范围高达10khz最大......甚至10Khz可能太高).我还想到截断这个FFT以保持频率分辨率,同时消除不需要的频带.这是一个iPhone
...我已经看过Aurio touch中的FFT但看起来这是一个int FFT,但是我的应用程序使用了浮点数......它是否会提高性能以尝试使程序适应int FFT或不(我真的不喜欢这样做...加上aurio touch使用基数2 FFT,这不是很好).
我正在探索语音识别和DSP,所以我想在我的智能手机上实现一个简单的声音频率分析仪(我有一部iPhone和三星Nexus S运行Android).我以前在Matlab中完成了基本的DSP.
根据我的理解,我需要执行FFT来获得信号的基频.
所以现在,我想以44100赫兹对麦克风进行采样.如果我使用样本大小为512且具有50%重叠的滑动窗口,则意味着我需要每256个样本进行一次FFT,或0.00580秒.
这个速度似乎非常高,特别是如果我使用Java编写Android版本.我的智能手机能够处理这个速度吗?我知道您可以在Android上使用C/C++进行编程,但我想暂时将它与Java保持一致.
R中是否有函数或包用于计算样本的滑动FFT?我的意思是,给定输出fft(x[n:m]),fft(x[1+(n:m)])有效地计算.
理想情况下,我会找到一个在线版本(我在开始时无法访问全时系列,或者它太大而无法放入内存中,我不会尝试将整个运行的FFT保存在内存或者是批处理版本(我给它整个样本x并告诉它运行的窗口宽度w,产生一个复杂的维度矩阵c(w,length(x)/w)).
这里给出了这种算法的一个例子(但我从未试过用任何语言实现它):
http://cnx.org/content/m12029/latest/
如果R中已经没有这样的东西,那我觉得实现起来并不难.
我知道一般来说,当阵列比较大时,FFT and multiplication通常比直接convolve操作更快.然而,我正在卷入一个非常长的信号(比如1000万点),响应非常短(比如1000点).在这种情况下,fftconvolve似乎没有多大意义,因为它迫使第二阵列的FFT与第一阵列的大小相同.在这种情况下直接卷积是否更快?
对于x(t)具有间距dt(等于1/fs,fs即采样率)的给定离散时间信号,能量为:
E[x(t)] = sum(abs(x)**2.0)/fs
Run Code Online (Sandbox Code Playgroud)
然后我做了一个DFT x(t):
x_tf = np.fft.fftshift( np.fft.fft( x ) ) / ( fs * ( 2.0 * np.pi ) ** 0.5 )
Run Code Online (Sandbox Code Playgroud)
并再次计算能量:
E[x_tf] = sum( abs( x_tf ) ** 2.0 ) * fs * 2 * np.pi / N
Run Code Online (Sandbox Code Playgroud)
(这里因子fs*2*np.pi/N=脉动间距dk,文档fftfreq提供了有关频域间距的更多细节),我有相同的能量:
E[x(t)] = E[x_tf]
Run Code Online (Sandbox Code Playgroud)
但是...当我计算的功率谱密度x(t)使用scipy.signal.welch,我无法找到合适的能量.scipy.signal.welch返回频率f和能量的矢量Pxx(或每个频率的能量,取决于scaling我们在参数中输入的能量scipy.signal.welch).
我怎样才能找到E[x(t)]和 …
我正在对特定图像执行2D FFT,并得到其光谱分量.现在,此图像已与另一图像叠加,以产生周期性噪声.
原始图像以及周期性噪声版本如下所示:
为了对此进行过滤,我使用了手动盒子来屏蔽幅度谱中相对于其他组件非常大的组件,如下所示.
完成此操作后,我执行逆FFT,但我没有得到原始图像.
有谁知道我做错了什么?
以下是屏蔽这些值的代码,然后继续对屏蔽的光谱图像进行反向2D FFT:
pat1 = imread('Pattern1.png');
spec_orig = fft2(double(pat1));
spec_orig2 = abs(spec_orig);
spec_img = fftshift(spec_orig2);
for j = 115:125
for n = 96:106
spec_img(n,j) = 0;
end
for n = 216:226
spec_img(n,j) = 0;
end
for n = 274:284
spec_img(n,j) = 0;
end
for n = 298:308
spec_img(n,j) = 0;
end
for n = 12:22
spec_img(n,j) = 0;
end
for n = 37:47
spec_img(n,j) = 0;
end
end
%Getting Back the Image for …Run Code Online (Sandbox Code Playgroud) 我想找到两个时间戳数组之间的偏移量.它们可以代表两个音轨中的哔哔声.
注意:两个轨道中可能有额外或缺少的开始.
我找到了一些关于互相关的信息(例如https://dsp.stackexchange.com/questions/736/how-do-i-implement-cross-correlation-to-prove-two-audio-files-are-similar)看起来很有希望.
我假设每个音轨的持续时间为10秒,并将哔哔声表示为"方波"的峰值,采样率为44.1 kHz:
import numpy as np
rfft = np.fft.rfft
irfft = np.fft.irfft
track_1 = np.array([..., 5.2, 5.5, 7.0, ...])
# The onset in track_2 at 8.0 is "extra," it has no
# corresponding onset in track_1
track_2 = np.array([..., 7.2, 7.45, 8.0, 9.0, ...])
frequency = 44100
num_samples = 10 * frequency
wave_1 = np.zeros(num_samples)
wave_1[(track_1 * frequency).astype(int)] = 1
wave_2 = np.zeros(num_samples)
wave_2[(track_2 * frequency).astype(int)] = 1
xcor = irfft(rfft(wave_1) * np.conj(rfft(wave_2)))
offset …Run Code Online (Sandbox Code Playgroud) 我正在尝试用8条LED制作自制频谱分析仪.
我正在努力的部分是执行FFT并了解如何使用结果.
到目前为止,这就是我所拥有的:
import opc
import time
import pyaudio
import wave
import sys
import numpy
import math
CHUNK = 1024
# Gets the pitch from the audio
def pitch(signal):
# NOT SURE IF ANY OF THIS IS CORRECT
signal = numpy.fromstring(signal, 'Int16');
print "signal = ", signal
testing = numpy.fft.fft(signal)
print "testing = ", testing
wf = wave.open(sys.argv[1], 'rb')
RATE = wf.getframerate()
p = pyaudio.PyAudio() # Instantiate PyAudio
# Open Stream
stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
channels=wf.getnchannels(),
rate=wf.getframerate(),
output=True)
# Read data …Run Code Online (Sandbox Code Playgroud) 我正在开发一个需要在大型2D栅格数据(10到100 GB)上执行FFT的C++项目.特别是,当为每个列应用FFT时性能非常糟糕,每个列的元素在内存中不是连续的(放置在数据宽度的跨度上).
目前,我正在这样做.由于数据不适合存储器,我将几列(即n列)读入存储器并调整其方向(使文件中的列成为存储器中的一行)并应用FFT与外部库(MKL) .我读取(fread)n像素,移动到下一行(fseek尽可能多width - n),读取n像素,跳转到下一行,依此类推.当使用列块完成操作(FFT)时,我以相同的方式将其写回文件.我写n像素,跳到下一行,依此类推.这种读写文件的方式花费了太多时间,所以我想找到一些方法来提升它.
我已经考虑过事先调换整个文件,但整个过程包括行主要和列主要的FFT操作,并且转置不会受益.
我想听听有关大数据的这种列主要操作的任何经验或想法.任何与FFT或MKL相关的建议也会有所帮助.