标签: fft

开始使用并行编程

所以它看起来像多核,所有相关的复杂功能都存在.我正在计划一个肯定会受益于并行性的软件项目.问题是我编写并发软件的经验很少.我在大学学习并很好地理解了概念和理论,但是从学校开始就没有掌握在多个处理器上运行软件的有用经验.

所以我的问题是,开始使用多处理器编程的最佳方法是什么? 我熟悉C/C++中的Linux开发和Mac OS X上的Obj-C,几乎没有Windows经验.此外,我计划的软件项目将需要FFT并且可能需要对大量数据进行浮点比较.

有OpenCL,OpenMP,MPI,POSIX线程等......我应该从哪些技术开始?

以下是我正在考虑的几个堆栈选项,但不确定他们是否会让我尝试实现我的目标:

  • 我是否应该使用Snow Leopard并尝试让OpenCL Obj-C程序在笔记本电脑上的ATI X1600 GPU上运行?要么
  • 我是否应该购买Playstation并尝试编写C代码以抛出其六个可用的Cell SPE内核?要么
  • 我应该建立一个带有Nvidia卡的Linux机箱并尝试使用CUDA吗?

在此先感谢您的帮助.

parallel-processing concurrency cuda fft opencl

12
推荐指数
1
解决办法
3116
查看次数

将FFT转换为谱图

我有一个音频文件,我正在遍历文件,每步取512个样本,然后通过FFT.

我将数据输出为块514浮动(使用IPP的ippsFFTFwd_RToCCS_32f_I),其中实部和虚部交错.

我的问题是,一旦我拥有这些复杂数字,我该怎么办?目前我正在为每个价值做

const float realValue   = buffer[(y * 2) + 0];
const float imagValue   = buffer[(y * 2) + 1];
const float value       = sqrt( (realValue * realValue) + (imagValue * imagValue) );
Run Code Online (Sandbox Code Playgroud)

这提供了一些稍微有用的东西,但我更倾向于在0到1的范围内获得值.上面的问题是峰值最终会回到9或更多.这意味着事情会恶化饱和,然后光谱图的其他部分几乎不会出现,尽管当我通过试听的频谱图运行音频时它们看起来非常强大.我完全承认我不是100%确定FFT返回的数据是什么(除了它代表我传入的512个样本长块的频率值).特别是我的理解是缺乏compex数字代表什么.

任何建议和帮助将不胜感激!

编辑:只是为了澄清.我的一个大问题是,如果不知道比例是什么,返回的FFT值是没有意义的.有人能指出我制定这种规模吗?

Edit2:通过执行以下操作,我得到了非常好看的结果:

size_t count2   = 0;
size_t max2     = kFFTSize + 2;
while( count2 < max2 )
{
    const float realValue   = buffer[(count2) + 0];
    const float imagValue   = buffer[(count2) + 1];
    const float value   = (log10f( sqrtf( (realValue * realValue) + (imagValue * …
Run Code Online (Sandbox Code Playgroud)

c++ fft spectrogram intel-ipp

12
推荐指数
4
解决办法
9938
查看次数

为什么这个逆傅里叶变换不能给出正确的结果呢?

我想在MATLAB中反转图像的傅立叶变换,但结果不是原始图像(应该是).显然有一些我不知道的实现细节导致了这个问题.这是代码:

img = imread('img.jpg');
fft = fft2(img);
inv = ifft2(fft);
imshow(inv);
Run Code Online (Sandbox Code Playgroud)

matlab fft image-processing

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

这个傅立叶变换实现有什么问题

我正在尝试实现离散傅立叶变换,但它不起作用.我可能在某个地方写过一个bug,但我还没有找到它.

基于以下公式:

terere

该函数执行第一个循环,循环遍历X0 - Xn-1 ... 在此输入图像描述

    public Complex[] Transform(Complex[] data, bool reverse)
    {
        var transformed = new Complex[data.Length];
        for(var i = 0; i < data.Length; i++)
        {
            //I create a method to calculate a single value
            transformed[i] = TransformSingle(i, data, reverse);
        }
        return transformed;
    }
Run Code Online (Sandbox Code Playgroud)

而实际计算,这可能是错误的地方.

    private Complex TransformSingle(int k, Complex[] data, bool reverse)
    {
        var sign = reverse ? 1.0: -1.0;
        var transformed = Complex.Zero;
        var argument = sign*2.0*Math.PI*k/data.Length;
        for(var i = 0; i < data.Length; i++)
        {
            transformed …
Run Code Online (Sandbox Code Playgroud)

c# fft complex-numbers c#-4.0

12
推荐指数
1
解决办法
1646
查看次数

了解aurioTouch2中的FFT

我一直在看Apple的示例代码中的aurioTouch 2(在这里找到).在一天结束时,我想自己分析频率.现在我想了解一些正在发生的事情.我很抱歉,如果这是微不足道的,只是试图了解一些未经注释的魔术数字在某些来源中浮动.我现在的主要困惑点是:

  1. 为什么他们将FFTBufferManager :: ComputeFFT中的nyquist值清零?这个价值真的可以扔掉吗?(~FFTBufferManager.cpp的第112行).
  2. 它们将所有内容缩小了-128db,因此我假设结果因此在(-128,0)的范围内.但是,稍后在aurioTouchAppDelegate.mm(〜第807行)中,他们通过添加80并除以64将其转换为0到1之间的值,然后将其钳制为0和1.为什么模糊?另外,我是否正确假设值将在(-128,0)附近?

audio fft ios

12
推荐指数
1
解决办法
3350
查看次数

如何用Mathematica中的傅立叶变换绘制Riemann zeta零谱?

在J.Brian Conrey在图6中的论文"The Riemann Hypothesis"中,有一个素数定理中误差项的傅立叶变换图.请参见下图中左侧的图:

Conrey关于黎曼假设的论文中的情节

在由Chris King撰写的名为Primes out of Thin Air的博客文章中,有一个Matlab程序可以绘制频谱图.请参阅帖子开头右侧的情节.可以翻译成Mathematica:

数学:

 scale = 10^6;
 start = 1;
 fin = 50;
 its = 490;
 xres = 600;
 y = N[Accumulate[Table[MangoldtLambda[i], {i, 1, scale}]], 10];
 x = scale;
 a = 1;
 myspan = 800;
 xres = 4000;
 xx = N[Range[a, myspan, (myspan - a)/(xres - 1)]];
 stpval = 10^4;
 F = Range[1, xres]*0;

For[t = 1, t <= xres, t++,
 For[yy=0, yy<=Log[x], yy+=1/stpval,
 F[[t]] =
 F[[t]] +
 Sin[t*myspan/xres*yy]*(y[[Floor[Exp[yy]]]] …
Run Code Online (Sandbox Code Playgroud)

primes wolfram-mathematica fft

12
推荐指数
1
解决办法
2321
查看次数

Python中的Parseval定理

我试图抓住Python的fft功能,而我偶然发现的一个奇怪的事情就是Parseval的定理似乎不适用,因为它现在给出了大约50的差异,而它应该是0.

import numpy as np
import matplotlib.pyplot as plt
import scipy.fftpack as fftpack

pi = np.pi

tdata = np.arange(5999.)/300
dt = tdata[1]-tdata[0]

datay = np.sin(pi*tdata)+2*np.sin(pi*2*tdata)
N = len(datay)

fouriery = abs(fftpack.rfft(datay))/N

freqs = fftpack.rfftfreq(len(datay), d=(tdata[1]-tdata[0]))

df = freqs[1] - freqs[0]

parceval = sum(datay**2)*dt - sum(fouriery**2)*df
print parceval

plt.plot(freqs, fouriery, 'b-')
plt.xlim(0,3)
plt.show()
Run Code Online (Sandbox Code Playgroud)

我很确定这是一个规范化因素,但我似乎无法找到它,因为我能找到的关于这个函数的所有信息都是scipy.fftpack.rfft文档.

python math numpy fft scipy

12
推荐指数
1
解决办法
2315
查看次数

为什么DCT变换优于视频/图像压缩中的其他变换

我介绍了如何在图像和视频压缩标准中使用DCT(离散余弦变换).

但是为什么DCT仅比dft或dst等其他变换更受欢迎?

fft video-processing dct image-compression

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

FFT实/虚/ abs部分解释

我目前正在学习离散傅里叶变换,我正在玩numpy来更好地理解它.

我试图绘制一个"sin x sin x sin"信号并获得一个带有4个非零点的干净FFT.我天真地告诉自己:"好吧,如果我用这些幅度和频率绘制一个"罪恶+罪恶+罪恶+罪恶"信号,我应该获得相同的"罪x x sin x sin"信号,对吧?

嗯...不完全是

(首先是"x"信号,第二个是"+"信号)

在此输入图像描述

两者共享相同的幅度/频率,但不是相同的信号,即使我可以看到它们有一些相似之处.

好的,因为我只绘制了FFT的绝对值,我想我丢失了一些信息.

然后我绘制了两个信号的实部,虚部和绝对值:

在此输入图像描述

现在,我很困惑.我该怎么办?我从数学的角度阅读有关DFT的内容.我知道复杂的价值来自单位圈.我甚至不得不了解希尔伯特的空间,以了解它是如何工作的(这很痛苦!......而且我只是划伤了表面).我只想了解这些真实/想象的情节是否在数学世界之外具有任何具体含义:

  • abs(fft):频率+幅度
  • 真实的(fft):?
  • 虚构(fft):?

代码:

import numpy as np
import matplotlib.pyplot as plt
N = 512 # Sample count
fs = 128 # Sampling rate
st = 1.0 / fs # Sample time
t = np.arange(N) * st # Time vector

signal1 = \
1   *np.cos(2*np.pi * t) *\
2   *np.cos(2*np.pi * 4*t) *\
0.5 *np.cos(2*np.pi * 0.5*t)

signal2 = \
0.25*np.sin(2*np.pi * …
Run Code Online (Sandbox Code Playgroud)

signal-processing numpy fft complex-numbers dft

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

Swift FFT - 复杂分裂问题

我正在尝试使用Accelerate框架对音频文件执行FFT以查找频率.我已经从这个问题中修改了代码(可能是错误的):来自AVAudioPCMBuffer的频谱图,使用Swift中的Accelerate框架

虽然," 光谱 " 的幅度要么是' 0 ',' inf '要么是' nan ',而复杂分裂的' 真实 '和' 成像 '成分会产生相似的结果; 表明这是导致问题的原因:' magnitude = sqrt(pow(real,2)+ pow(imag,2) '.如果我错了,请纠正我,但我认为其余的代码都没问题.

为什么我会收到这些结果以及如何修复它(拆分组件应该是什么),以及我做错了什么?请记住,我对FFT和采样非常陌生,并且不知道如何为音频文件设置它,所以任何帮助都将非常感激.谢谢.

这是我正在使用的代码:

    // get audio file
    let fileURL:NSURL = NSBundle.mainBundle().URLForResource("foo", withExtension: "mp3")!
    let audioFile = try!  AVAudioFile(forReading: fileURL)
    let fileFormat = audioFile.processingFormat
    let frameCount = UInt32(audioFile.length)

    let buffer = AVAudioPCMBuffer(PCMFormat: fileFormat, frameCapacity: frameCount)
    let audioEngine = AVAudioEngine()
    let playerNode = AVAudioPlayerNode()
    audioMixerNode = audioEngine.mainMixerNode

    let bufferSize = Int(frameCount)
    let …
Run Code Online (Sandbox Code Playgroud)

signal-processing fft frequency ios swift

12
推荐指数
1
解决办法
1696
查看次数