标签: fft

Android 中的傅里叶逆变换

是否有任何 Java/Android 库已经实现了傅里叶逆变换?我发现有一些实现了傅立叶变换,但没有一个实现了其逆变换。

java algorithm android fft

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

Ron Mayer FFT 卷积算法

有人知道有关 Mayer FFT 实现的任何信息吗(我不必花大量时间来研究代码)?

我正在尝试执行卷积,并且 ifft 似乎产生了我所说的“镜像”输出。换句话说,我的内核+信号长度限制为 N/2,并且无论占用 n=0...N/2 ,都会镜像 n=N...N/2 。就负频率而言,它看起来有点像我对 FFT 的期望……只不过它就像负时间中的一面镜子。

这是我的卷积代码:

   void convolve(struct cxType* data,  struct cxType* kernel, int size) 
    {
    int i,j;
    int wrksz = size;
    float gain = 1.0f/((float) wrksz);


    mayer_fft(wrksz, data->re, data->im);
    mayer_fft(wrksz, kernel->re, kernel->im);

    for(i=0;i<wrksz;i++)
    {
    data->re[i]*=kernel->re[i]*gain;
    data->im[i]*=kernel->im[i]*gain;
    }

    mayer_ifft(wrksz, data->re, data->im);
}
Run Code Online (Sandbox Code Playgroud)

使用 gnu Octave(对于不熟悉的人来说,MATLAB 语法等效)执行基本相同的操作会产生预期的结果,包括允许我在信号输出中占用 M+N-1:

fs=48000;
Ts = 1/fs;
NN =  1024
sincsz = floor(NN/4);
sigstart = floor(NN/16);
sigend = floor(NN/2);
dpi=2*pi;

%window func
tau=(1:sincsz)/sncsz;
window=0.5*(1.0 - cos(dpi*tau));
%plot(tau,window) …
Run Code Online (Sandbox Code Playgroud)

fft convolution

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

R 中的快速傅里叶变换。我做错了什么?

我不是傅立叶分析专家,完全不明白 R 的函数 fft() 的作用。即使交叉阅读了很多之后我也无法弄清楚。我建立了一个例子。

require(ggplot2)

freq <- 200  #sample frequency in Hz 
duration <- 3 # length of signal in seconds

#arbitrary sine wave 
x <- seq(-4*pi,4*pi, length.out = freq*duration)
y <- sin(0.25*x) + sin(0.5*x) + sin(x)
Run Code Online (Sandbox Code Playgroud)

看起来像:

在此输入图像描述

fourier <- fft(y)

#frequency "amounts" and associated frequencies

amo <- Mod(fft(y))

freqvec <- 1:length(amo) 
Run Code Online (Sandbox Code Playgroud)

我假设 fft 期望在 1 秒的时间跨度内记录向量,因此我除以时间跨度

freqvec <- freqvec/duration 

#and put this into a data.frame

df <- data.frame(freq = freqvec, ammount = amo)
Run Code Online (Sandbox Code Playgroud)

现在我可以/必须省略 data.frame 的后半部分,因为由于奈奎斯特的原因,频率“量”仅对采样率的一半有意义。

df <- …
Run Code Online (Sandbox Code Playgroud)

r fft

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

帕塞瓦尔定理不适用于 ifft

我有一个时间信号,我计算其傅立叶变换以获得频率信号。根据帕塞瓦尔定理,两个信号具有相同的能量。我用Python成功演示了它。然而,当我计算频率信号的傅里叶逆变换时,能量不再守恒。这是我的代码:

import numpy as np
import numpy.fft as nf
import matplotlib.pyplot as plt

#create a gaussian as a temporal signal    
x = np.linspace(-10.0,10.0,num=1000)
dx = x[1]-x[0]
sigma = 0.4
gx = (1.0/(2.0*np.pi*sigma**2.0)**0.5)*np.exp(-0.5*(x/sigma)**2.0)

#calculate the spacing of the frequencial signal
f=nf.fftshift(nf.fftfreq(1000,dx))
kk = f*(2.0*np.pi)
dk = kk[1]-kk[0]

#calculate the frequencial signal (FT)
#the convention used here allows to find the same energy
gkk = nf.fftshift(nf.fft(nf.fftshift(gx)))*(dx/(2.0*np.pi)**0.5)

#inverse FT
gx_ = nf.ifft(nf.ifftshift(gkk))*dk/(2 * np.pi)**0.5

#Parseval's theorem
print("Total energy in time domain = "+str(sum(abs(gx)**2.0)*dx)) …
Run Code Online (Sandbox Code Playgroud)

python signal-processing fft

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

绘制 FFT 幅值时频率轴的创建方式令人困惑

此代码对信号进行 FFT 并将其绘制在新的频率轴上。

f=600;
Fs=6000;
t=0:1/Fs:0.3;
n=0:1:length(t);
x=cos(2*pi*(400/Fs)*n)+2*sin(2*pi*(1100/Fs)*n);
y=fft(x,512);

freqaxis=Fs*(linspace(-0.5,0.5, length(y)));
subplot(211)
plot(freqaxis,fftshift(abs(y)));
Run Code Online (Sandbox Code Playgroud)

我理解为什么我们使用它,fftshift因为我们希望看到以 0 Hz (DC) 值为中心的信号,这样更便于观察。

在此输入图像描述

然而,我似乎对如何定义频率轴感到困惑。具体来说,为什么我们特别将[-0.5 0.5]的范围乘以Fs并得到 [-3000 3000]范围呢?它可能是[-0.25 0.25]

matlab signal-processing fft

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

16 位短(实)跨步数据的 FFT

我需要计算像这样存储的 2 个短数据数组的 FFT(重复数百万次): 数据在内存中的分布 等等。

数组值由黄色和蓝色表示。每个 K 值都有一个大小为 K 的未使用数据空间,我需要跳过。

我对数据进行了重新排序(和浮动转换)以消除无用的值,并使用 FFTW(带有 c)来计算所需的变换。

关于这个过程我有两个问题。

  1. 有没有办法使用inistrideidist参数(如文档中所示)按原样使用数组(无需重新排序,仅转换为 float )?我想没有,但也许我已经精疲力竭了。
  2. 有没有好的库可以使用短数据作为输入来计算 fft?我很乐意用一些精度来换取显着的加速。该代码将在 i7 上运行。

c integer fft fftw

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

JavaScript 中的傅里叶变换可视化

我使用这个库对音频文件进行 fft,之后我想用canvasjs可视化结果,但我不知道如何做到这一点。

我不确定应该使用什么 asxyaxes。如果是频率和幅度,怎么办?最大x轴值应等于最大频率,如果是,则步长值是多少?(我计算了幅度和最大频率)。

如果有人能提供帮助,我将不胜感激。

编辑:我尝试重现这个,但我得到了以下结果。幅度并没有那么糟糕,但相位却很可怕。我认为这Math.atan2()将是问题所在,因为这是根据两个数字计算的,所以我尝试使用 Math.js 和数组,但得到了相同的结果。(链接中的预期结果)

    for (var i = 0; i < 10 - 1/50; i+=1/50) {
      realArray.push(Math.sin(2 * Math.PI * 15 * i) + Math.sin(2 * Math.PI * 20 * i));
    }

    //Phase
    counter = 0;
    for (var i = 0; i < realArray.length ; i++) {
      rnd.push({x: i, y: (Math.atan2(imag[counter], realArray[counter]) * (180 / Math.PI))});
      counter++;
    }

    //Magnitude
    counter = 0 …
Run Code Online (Sandbox Code Playgroud)

javascript fft typescript canvasjs ionic2

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

如何将 LPF 和 HPF 应用于 FFT(傅里叶变换)

我需要将 HPF 和 LPF 应用于傅里叶图像并执行逆变换,然后比较它们。我执行以下算法,但没有结果:

img = cv2.imread('pic.png')

f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
magnitude_spectrum = 20 * np.log(np.abs(fshift))

# need to add HPF and LPF 
hpf = ...
lpf = ... # maybe 1 - hpf ?

# inverse 
result = (lpf + (1 + alpha) * hpf)
Run Code Online (Sandbox Code Playgroud)

你能告诉我该怎么做吗?

python opencv fft

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

Matlab/Octave 使用哪种方法来实现 conv2 函数?

Matlab/Octave 使用哪种方法conv2函数?

是吗:

  • 快速傅立叶变换
  • 3 个或更多 for 循环,例如经典迭代
  • 其他?

我正在寻找最快的方法conv2。我将为它编写 C 代码。

c matlab fft image-processing convolution

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

傅里叶变换中的奇怪人工制品

我已经在Matlab中对时间序列波形执行了fft(快速傅里叶变换),但实际上我在傅里叶变换图中看起来有一个奇怪的波,尽管有这些波峰看起来像我希望只能在时域.是否有任何编程原因可能会发生这种情况?

matlab signal-processing fft

1
推荐指数
3
解决办法
1661
查看次数