标签: fft

有没有办法减少scipy/numpy精度,以减少内存消耗?

在我的64位Debian/Lenny系统(4GByte RAM + 4GByte交换分区)上,我可以成功地做到:

v=array(10000*random([512,512,512]),dtype=np.int16)
f=fftn(v)
Run Code Online (Sandbox Code Playgroud)

但是f是一个np.complex128内存消耗是令人震惊的,我不能做更多的结果(例如调制系数然后f=ifftn(f))没有MemoryError回溯.

而不是安装更多的RAM和/或扩展我的交换分区,有没有办法控制scipy/numpy"默认精度"并让它计算一个complex64数组呢?

我知道我可以随后减少它f=array(f,dtype=np.complex64); 我希望它实际上以32位精度和一半内存进行FFT工作.

numerical numpy fft matplotlib scipy

7
推荐指数
2
解决办法
3594
查看次数

Python:声音文件的频率分析

我正在生成一些声音文件,这些声音文件以不同的频率播放音调,并具有一定数量的谐波.
最终,这些声音将在带有小扬声器的设备上播放.

我有扬声器的频率响应曲线,并希望在Python中执行以下操作:

  1. 绘制声音文件的频谱.我需要对文件进行FFT并绘制它gnuplot
  2. 根据数据表中的频率响应曲线应用非线性传递函数.
  3. 应用函数后绘制结果.

有人知道吗 :

  • 什么是最简单的方法来做到这一点会是什么?
  • 或者是一个可以为我做这个的应用程序(基于GNU/Linux)?

python audio fft gnuplot wav

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

Java的图像比较技术

我正在寻找几种方法来比较两个图像,看看它们有多相似.目前我计划将百分比作为"相似性指数"的最终结果.我的计划大纲是这样的:

  1. 用户选择2个图像进行比较.
  2. 使用按钮,可以使用多种不同的方法比较图像.
  3. 最后,每个方法旁边都有一个百分比,表示基于该方法的图像有多相似.

我最近做了很多阅读,我读过的一些东西似乎非常复杂和先进,而不是像我这样只有大约一年的Java经验的人.到目前为止,我读过:

  • 傅立叶变换 - 我发现这在Java中实现相当混乱,但显然Java Advanced Imaging API有一个类.虽然我不确定如何将输出转换为实际结果

  • SIFT算法 - 看起来非常复杂

  • 直方图 - 可能是迄今为止最简单的直方图

  • 像素抓取 - 似乎可行,但如果两个图像之间有相当大的变化,它看起来不会产生任何类型的准确结果.我可能错了?

我还想先使用Sobel滤波器预处理图像,然后进行比较.问题是实际的比较部分.

所以,是的,我想看看是否有人有想法比较Java中的图像.希望此前有人做过类似的项目.我只想获得一些关于可行的比较技术的输入,这些技术在Java中实现起来并不困难.

提前致谢

java comparison fft image-processing

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

与FFT算法混淆

我试图理解FFT算法,到目前为止我认为我理解它背后的主要概念.但是我对'framesize'和'window'之间的区别感到困惑.

根据我的理解,它们似乎彼此多余?例如,我将一个帧大小为1024的样本块作为输入.因此我将字节[1024]作为输入.

那么窗口函数的目的是什么?从最初开始,我认为窗口函数的目的是从原始数据中选择样本块.

谢谢!

algorithm signal-processing fft

7
推荐指数
2
解决办法
4462
查看次数

在iPhone上进行FFT以忽略背景噪音并找到较低的音高

我已经为iPhone 实施了Demetri的Pitch Detector项目,并遇到了两个问题.1)任何类型的背景噪声发送频率读取香蕉和2)较低频率的声音没有正确调整.我试着调整我的吉他,而更高的琴弦工作 - 调谐器无法正确辨别低音.

音高检测代码位于RIOInterface.mm中,就像这样......

// get the data
AudioUnitRender(...);

// convert int16 to float
Convert(...);

// divide the signal into even-odd configuration
vDSP_ctoz((COMPLEX*)outputBuffer, 2, &A, 1, nOver2);

// apply the fft
vDSP_fft_zrip(fftSetup, &A, stride, log2n, FFT_FORWARD);

// convert split real form to split vector
vDSP_ztoc(&A, 1, (COMPLEX *)outputBuffer, 2, nOver2);
Run Code Online (Sandbox Code Playgroud)

然后Demetri继续确定"主导"频率如下:

float dominantFrequency = 0;
int bin = -1;
for (int i=0; i<n; i+=2) {
    float curFreq = MagnitudeSquared(outputBuffer[i], outputBuffer[i+1]);
    if (curFreq > dominantFrequency) {
        dominantFrequency …
Run Code Online (Sandbox Code Playgroud)

iphone signal-processing fft pitch-tracking accelerate-framework

7
推荐指数
1
解决办法
5747
查看次数

为什么我通过R中的FFT从简单的sin函数中获得两个频率尖峰?

我在数学课上学到了傅里叶变换,并认为我理解了它们.现在,我正在尝试使用R(统计语言)并在实践中解释离散FFT的结果.这就是我所做的:

x = seq(0,1,by=0.1)
y = sin(2*pi*(x))

calcenergy <- function(x) Im(x) * Im(x) + Re(x) * Re(x)

fy <- fft(y)
plot(x, calcenergy(fy))
Run Code Online (Sandbox Code Playgroud)

得到这个情节:

sin的能量密度谱(2*pi*(x))从0到1,步长为0.1

如果我理解这一点,那就代表了能量密度谱的"一半".由于变换是对称的,我可以将所有值镜像到x的负值以获得全谱.

但是,我不明白的是,为什么我会得到两个尖峰?这里只有一个窦性频率.这是一种混叠效应吗?

另外,我不知道如何从这个情节中获取频率.让我们假设窦功能的单位是秒,是1Hz的密度谱中1.0的峰值那么?

再说一遍:我理解FFT背后的理论; 实际应用是问题:).

谢谢你的帮助!

signal-processing r fft

7
推荐指数
1
解决办法
4380
查看次数

JTransforms FFT on Image

我有一个图像,我想使用FFT转换到频域,似乎缺乏Java的库,但我找到了两个.一个是JTransforms,另一个是鲜为人知,没有名字.

对于不太知名的2D,2D只能具有2的幂的长度值,但是具有简单的使用方法,例如FastFourierTransform.fastFT(real, imaginary, true);真实的是具有每个像素值的双倍的2D阵列,并且虚部是具有相同大小的完整的2D阵列零.布尔值取决于正向或反向变换.这对我来说是有意义的,除了两个要求的力量之外,它破坏了我所做的任何变换(我最初在图像周围添加了黑色空间以适应最接近的两个幂),我正在努力解决的问题是使用JTransforms的等效方法,并希望得到任何指导.我将陈述我目前正在做的事情.

我相信相关的类DoubleFFT_2D,它的构造函数需要多个行和列,我认为这是我的图像的宽度和高度.因为我的图像没有虚构的部分,我想我可以使用doubleFFT.realForwardFull(real);它将虚部处理为零并传递完整像素的真实2D数组.不幸的是,这根本不起作用.JavaDoc声明the input array must be of size rows*2*columns, with only the first rows*columns elements filled with real data但是我没有看到这与我的图像有什么关系以及为了满足这个要求我必须做些什么.

对于漫长而糟糕的解释感到抱歉,如果需要任何其他信息,我很乐意提供.

可以在此处找到JTransforms Library和Docs:https://sites.google.com/site/piotrwendykier/software/jtransforms

java fft image-processing

7
推荐指数
1
解决办法
3879
查看次数

用于傅里叶变换的灰度图像到NumPy阵列

目前我正在使用PIL和NumPy.我有一个彩色png图像,我想:

  1. 以灰度读取
  2. 转换为NumPy数组
  3. 在阵列上执行FFT
  4. 显示图像

这就是我正在尝试的(在IPython w/--pylabflag中):

In [1]: import Image

In [2]: img = Image.open('ping.png').convert('LA')

In [3]: img_as_np = np.asarray(img)

In [4]: img_as_np
Out[4]: array(<Image.Image image mode=LA size=1000x1000 at 0x105802950>, dtype=object)

In [5]: img_fft = fft.fft2(img_as_np) // IndexError: index out of range for array
Run Code Online (Sandbox Code Playgroud)

python numpy fft image-processing python-imaging-library

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

可以在SoundPool对象上使用Android Visualizer类吗?

当使用SoundPool音频类时,仅播放较短的音频片段时,它肯定比MediaPlayer具有一些优势。我注意到的两个是SoundPool快很多。MediaPlayer可能会在启动时滞后一些,从一个声音剪辑转到另一个声音剪辑要容易得多,我不必每次都停止,重置和准备。

但是,是否可以像使用MediaPlayer一样,使用可视化器从SoundPool中播放的音频数据中获取实时fft数据?我无法找到涵盖该主题的任何话题,但是偶然的机会我以为我会问,因为似乎应该有可能。该文档说:“ SoundPool库使用MediaPlayer服务将音频解码为原始的16位PCM单声道或立体声流。” 因此,如果我可以引用SoundPool使用的MediaPlayer,那么我想getAudioSessionId()也许可以使用?

我已经尝试将会话ID设置为0以获得输出混合。它没有用,但无论如何我并不是真正想要的理想效果。我做的第一件事之一就是尝试使用加载的SoundPool SoundID代替可视化程序的会话ID,但这也行不通。

android fft sessionid visualizer soundpool

7
推荐指数
0
解决办法
205
查看次数

加速FFTW修剪以避免大量零填充

假设我有一个x(n)K * N长的序列,只有第一个N元素与零不同.我假设,N << K例如,N = 10K = 100000.我想通过FFTW计算这种序列的FFT.这相当于具有一系列长度N并且具有零填充K * N.由于N并且K可能是"大",我有一个显着的零填充.我正在探索是否可以节省一些计算时间,避免显式零填充.

案子 K = 2

让我们从考虑案例开始K = 2.在这种情况下,DFT x(n)可以写成

在此输入图像描述

如果k是偶数k = 2 * m,那么

在此输入图像描述

这意味着DFT的这些值可以通过长度序列的FFT来计算N,而不是K * N.

如果k是奇数k = 2 * m + 1,那么

在此输入图像描述

这意味着可以通过长度序列的FFT再次计算DFT的这种值N,而不是K * N.

因此,总之,我可以用长度2 * N …

c c++ fft fftw pruning

7
推荐指数
2
解决办法
596
查看次数