标签: fft

Matlab FFT 高斯函数

gaussian curve我正在尝试使用matlab的fft来获得。问题是,在一种情况下,我尝试通过除法来减少噪声F=dt.*F./exp(-1i.*nu.*T/2)是行不通的(img 1),而在第二种情况下,如果我试图获取 fft 结果的绝对值,我在图表中没有合适的比例(img 2)。

N=512;
T=10;
dt=T/(N-1);
t=linspace(-5,5,N);
f=exp(-t.^2);
F=fft(f);

F1=F(1:N/2+1);
F2=F(N/2+1:N);
F=[F2,F1];

dnu=(N-1)/(N*T);
nuNyq=1/(2*dt);
nu=-nuNyq+dnu*(0:N);
F=dt.*F;
%F=dt.*F./exp(-1i.*nu.*T/2);


y=linspace(-5,5,N);
F2=pi.^(1/2).*exp(-y.^2/4);

hold on
plot(y,F2); 
%plot(nu,real(F),'r');
plot(nu,abs(F),'r');
legend('analiticFT','FFT')
xlim([-5 5])
hold off
Run Code Online (Sandbox Code Playgroud)

图片 1 图片。 1

图像2 图片。 2

matlab fft

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

递归逆FFT

我以递归模式实现了两个函数 FFT 和 InverseFFT。

这些是功能:

def rfft(a):
    n = a.size
    if n == 1:
        return a
    i = 1j
    w_n = e ** (-2 * i * pi / float(n))
    w = 1
    a_0 = np.zeros(int(math.ceil(n / 2.0)), dtype=np.complex_)
    a_1 = np.zeros(n / 2, dtype=np.complex_)
    for index in range(0, n):
        if index % 2 == 0:
            a_0[index / 2] = a[index]
        else:
            a_1[index / 2] = a[index]
    y_0 = rfft(a_0)
    y_1 = rfft(a_1)
    y = np.zeros(n, dtype=np.complex_)
    for k in …
Run Code Online (Sandbox Code Playgroud)

python fft scipy python-2.7 ifft

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

如果 FFT 中有很多 0,则寻找卷积核?

我知道original_image * filter = blur_image*卷积在哪里。因此,filter = ifft(fft(blur)/fft(original))

我有一个原始图像、已知的滤镜和已知的模糊图像。我尝试了以下代码。我只想比较使用 fft 和 ifft 计算的滤波器,并将其与已知的滤波器进行比较。我在Matlab中尝试过:

orig = imread("orig.png")
blur = imread("blur.png")
fftorig = fft(orig)
fftblur = fft(blur)
div = fftblur/fftorig
conv = ifft(div)
Run Code Online (Sandbox Code Playgroud)

结果没有意义。我看到div包含很多NaN值,并且fftblurfftorig都包含很多 0 值。我需要对此做些什么吗?比如使用fftshift

编辑:为了使这一点更容易理解,我现在使用以下图像: http: //matlabgeeks.com/tips-tutorials/how-to-blur-an-image-with-a-fourier-transform-in- matlab-第一部分/

我决定使用以下链接计算origimage和的内核:blurimageunpad

kernelc = real(ifft2(fft2(origimage)./fft2(blurimageunpad));
imagesc(kernelc)
colormap gray
Run Code Online (Sandbox Code Playgroud)

结果如下:

https://i.stack.imgur.com/kJavg.jpg

这显然与该链接顶部提到的高斯模糊不匹配

matlab fft image-processing convolution deconvolution

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

使用 FFT 实现 2D 卷积

TensorFlow.conv2d()对于将大图像与大内核(滤波器)进行卷积来说,速度慢得不切实际。将 1024x1024 图像与相同大小的内核进行卷积需要几分钟。为了进行比较,cv2.filter2D()立即返回结果。

我发现tf.fft2()tf.rfft()

然而,我不清楚如何使用这些函数执行简单的图像过滤。

如何使用 FFT 通过 TensorFlow 实现快速 2D 图像过滤?

python fft image-processing tensorflow

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

如何解释 skimage radon 变换的结果

我想知道应该如何解释 skimage 的氡变换的结果。该文档并不十分精确。

让我们以这张图片为例。示例图片和氡变换(正弦图) 这两条线由右侧图中的黑点表示。一条线为 45 度,另一条线为 135 度。现在,另一个坐标意味着什么?两条线都显示 ~150。为什么?

我首先查看了此链接: https: //www.mathworks.com/help/images/detect-lines-using-the-radon-transform.html 该代码位于matlab中,而不是来自skimage。所提出的解释值的方法不适用于我的示例。(很可能是因为它与matlab中的算法不完全相同。至少返回值不同)skimage的文档仅显示了一个简单的代码示例。不幸的是没有解释。

那么,150是什么意思呢?我该如何解释该值,或者如果只给我正确的图像。我将如何创建左边的?提前致谢

python fft image-processing scikit-image

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

从 FFT 数据创建波形数据?

正如您可能注意到的,我对 python 和声音处理非常陌生。我(希望)使用 python 以及 logfbank 和 mfcc 函数从波形文件中提取 FFT 数据。(logfbank 似乎提供了最有希望的数据,mfcc 输出对我来说看起来有点奇怪)。

在我的程序中,我想更改 logfbank/mfcc 数据,然后从中创建波形数据(并将它们写入文件中)。我确实没有找到任何有关从 FFT 数据创建波形数据的过程的信息。你们中有人知道如何解决这个问题吗?我将非常感激:)

到目前为止,这是我的代码:

from scipy.io import wavfile 
import numpy as np
from python_speech_features import mfcc, logfbank

rate, signal = wavfile.read('orig.wav')
fbank = logfbank(signal, rate, nfilt=100, nfft=1400).T
mfcc = mfcc(signal, rate, numcep=13, nfilt=26, nfft=1103).T 

#magic data processing of fbank or mfcc here

#creating wave data and writing it back to a .wav file here
Run Code Online (Sandbox Code Playgroud)

python signal-processing fft spectrogram mfcc

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

绘制和提取 fft 相位

下面是比较 fft 相位图与 2 种不同方法的代码:

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

phase = np.pi / 4
f = 1
fs = f*20
dur=10
t = np.linspace(0, dur, num=fs*dur, endpoint=False)
y = np.cos(2 * np.pi * t + phase)
Y = scipy.fftpack.fftshift(scipy.fftpack.fft(y))
f = scipy.fftpack.fftshift(scipy.fftpack.fftfreq(len(t)))

p = np.angle(Y)
p[np.abs(Y) < 1] = 0

fig, ax = plt.subplots(2, 1)
ax[0].plot(t, y)
ax[1].plot(f*fs, p, label='from fft')
ax[1].phase_spectrum(y, fs, window=None, label='from phase_spectrum')
plt.legend()
plt.show()
Run Code Online (Sandbox Code Playgroud)

这是结果:

在此输入图像描述

这是当信号周期数不是整数时的结果:

在此输入图像描述

我有几个问题:

  • 为什么使用phase_spectrum 或使用fft 的相位图和角度如此不同?使用 …

python numpy fft phase

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

如何在 Python 中解释离散傅里叶变换 (FFT) 的结果

关于这个主题有很多问题,我已经循环浏览了其中很多问题,获取了有关处理频率的概念性指针(此处此处)、有关 numpy 函数的文档(此处)、如何提取幅度和相位的信息(此处)、并走出网站,例如thisthis

然而,只有痛苦地用简单的例子向自己“证明它”,并检查不同函数的输出与它们的手动实现相比,才给了我一些想法。

答案试图记录和分享与 Python 中的 DFT 相关的细节,如果不以简单的术语进行解释,这些细节可能会构成进入障碍。

python numpy fft

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

为什么计算矩阵/多维数组的FFT时需要计算转置?

我目前正在研究一个问题,涉及使用FFTW与 MPI 结合计算二维矩阵的傅里叶变换。

根据FFTW 文档本页的第一部分,计算矩阵的 FT 需要在并行时启动的进程之间进行大量通信。例如,在矩阵的情况下,例如

1,2,3
4,5,6
7,8,9
Run Code Online (Sandbox Code Playgroud)

我们决定用三个进程来计算 FFT,每个进程都会获取该矩阵的一个块,以便数据作为 存储在每个进程的本地内存中P_0 [1,2,3], P_1 [4,5,6], P_3 [7,8,9]

计算初始傅立叶变换后,计算转置,这需要在三个进程之间通信计算数据,如下所示:

P_0 -> P_1: 2
P_0 -> P_2: 3
P_1 -> P_0: 4
P_1 -> P_2: 6
P_2 -> P_0: 7
P_2 -> P_1: 8
Run Code Online (Sandbox Code Playgroud)

由于这会产生很大的开销,因此上述 FFTW 文档页面的第二部分建议直接在傅里叶空间中计算转置,以大大减少所需的跨进程通信量。

我仍然不确定为什么首先需要计算转置,以及最终如何合并从矩阵的不同块计算的数据。为什么设置FFTW_MPI_TRANSPOSED_OUTFFTW_MPI_TRANSPOSED_IN标志就足够了,不再需要跨进程通信,即使在进程之前需要来自所有其他进程的更多数据?

fortran fft matrix mpi fftw

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

C++ 中 argf 和 atan2f 有什么区别?

我正在开发一个使用 FFT 数学的项目,遇到需要计算实部和虚部 FFT 分量的相位角的情况。在一些示例中,我看到人们使用 atan2f 来执行此操作,而在一些示例中,我看到人们将 argf 与复数类一起使用。

\n

除了采用两个单独的参数与单个复数参数之外,这两个函数的操作方式有什么区别吗?如果是这样,有什么区别?

\n

一直在网上搜索各种文档,似乎无法找到这个问题的清晰或简洁的答案。

\n

谢谢!

\n

这个来源特别令人困惑:

\n
\n

如果没有错误发生,则返回区间 [\xe2\x88\x92\xcf\x80; 中 z 的相位角;\xcf\x80]。\n处理错误和特殊情况,就像函数实现为 std::atan2(std::imag(z), std::real(z)) 一样。

\n
\n

目前尚不清楚它们是否在所有情况下都等效,或者仅在存在边缘情况或错误时等效。

\n

c++ fft std complex-numbers

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