是否有可用于使用OpenCL在GPU上运行的通用FFT库?据我所知,Apple二次OpenCL FFT的示例代码是唯一可用的代码吗?
对于非二次幂变换大小,是否存在任何此类库?如果没有,修改Apple OpenCL样本有多容易或多困难?
我正在研究具有非二次幂变换大小的图像处理应用程序,我将不得不做一大堆FFT,一个批量FFT.
它被问了很多,但我仍然坚持在Android上实现FFT类我需要使用FFT处理我的音频数据...
我已经在这里阅读了几乎相同的问题如何使用FFT获取PCM的频率数据 ,这里如何从fft结果获得频率? 还有更多的问题,但即使在我尝试了答案后仍然没有找到答案......
我正在使用的FFT类:http: //www.cs.princeton.edu/introcs/97data/FFT.java
与它一起使用的复杂类:http://introcs.cs.princeton.edu/java/97data/Complex.java.html
这是我的代码
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.Button;
public class Latihan extends Activity{
private static final int RECORDER_BPP = 16;
private static final String AUDIO_RECORDER_FILE_EXT_WAV = ".wav";
private static final String AUDIO_RECORDER_FOLDER = "AudioRecorder";
private static final String AUDIO_RECORDER_TEMP_FILE = "record_temp.raw";
private static …Run Code Online (Sandbox Code Playgroud) 我在matlab中使用前向和后向fft实现了一个简单的低通滤波器.它原则上有效,但最小值和最大值与原始值不同.
signal = data;
%% fourier spectrum
% number of elements in fft
NFFT = 1024;
% fft of data
Y = fft(signal,NFFT)/L;
% plot(freq_spectrum)
%% apply filter
fullw = zeros(1, numel(Y));
fullw( 1 : 20 ) = 1;
filteredData = Y.*fullw;
%% invers fft
iY = ifft(filteredData,NFFT);
% amplitude is in abs part
fY = abs(iY);
% use only the length of the original data
fY = fY(1:numel(signal));
filteredSignal = fY * NFFT; % correct maximum
clf; hold on; …Run Code Online (Sandbox Code Playgroud) 说,我有一个由三个余弦组成的示例信号,每个余弦代表 4、6 和 8 个频段。现在,我使用 FFT 将此信号放入频域,并在频域中切断不需要的 6 Hz 频带。最后,我想将信号从频域反转回时域。但是当我简单地使用时,numpy.fft.ifft我得到了复数数组,这不是进一步分析信号的最佳结果。如何在执行带通后对 FFT 求逆,以便将实部和虚部携带的全部信息作为一个数字?我研究了z = sqrt(real^2 + imaginary^2)事物,但它不是“事物”。
下面我提供一个工作示例。我会很感激你的帮助。
import numpy as np
from scipy.fftpack import fftfreq
# Define signal.
Fs = 128 # Sampling rate.
Ts = 1 / Fs # Sampling interval.
Time = np.arange(0, 10, Ts) # Time vector.
signal = np.cos(4*np.pi*Time) + np.cos(6*np.pi*Time) + np.cos(8*np.pi*Time)
def spectrum(sig, t):
"""
Represent given signal in frequency domain.
:param sig: signal.
:param t: time scale.
:return:
""" …Run Code Online (Sandbox Code Playgroud) 我需要执行FFT和逆FFT变换.输入将是double的向量和矩阵.理想情况下,输出应该是std :: complex的数组,但我可以使用double _Complex.
我没有找到任何简单的例子,所有英特尔示例都在没有足够评论的情况下同时做了很多事情.
我只想在C++中使用一个简单的例子,将double的向量(或矩阵)作为输入并输出FFT转换结果(理想情况下使用std :: complex).
我想对一个函数进行傅里叶变换psi(x),将其乘以 k 空间函数exp(-kx^2-ky^2),然后将乘积逆傅里叶变换回 x 空间。
但是我的 x 空间和 k 空间网格位于中心,并且我知道我需要fftshift并ifftshift正确实现我的 k 空间乘法。但我不明白它们是如何工作的,所以我不知道按照什么顺序来实现它们。有人可以告诉我我在这里做得是否正确吗?
import scipy.fftpack as spfft
import numpy as np
#Create a centred k-space grid]
kxmax, kymax = 10,10
kxgrid = np.linspace(-kxmax/2, kxmax/2, NX)
kygrid = np.linspace(-kymax/2, kymax/2, NY)
KX, KY = np.meshgrid(kxgrid, kygrid, indexing='xy')
psi = spfft.ifft2(spfft.fftshift(np.exp(-(KX**2 + KY**2)) * spfft.fftshift(spfft.fft2(psi))))
Run Code Online (Sandbox Code Playgroud) 整个互联网上没有一个工作示例说明如何在浏览器中对声音文件/缓冲区/音频缓冲区执行 FFT 分析而不需要播放。 例如,Web 音频 API 已更改太多,无法再使用此库https://github.com/corbanbrook/dsp.js 。目前所有其他线索都无法解决问题。
编辑:我不需要操作任何数据,只需读取音频不同时刻的频谱。解决方案的输入可以是任何形式的数据(wav 文件、数组缓冲区、音频缓冲区等),但不能是流。理想情况下,预期输出将是数组(频率箱幅度)的数组(时刻)。
我正在比较特定信号的 FFT 与 CWT。
我不清楚如何从 CWT 的相应比例图中读取相应的频率和幅度。此外,我的印象是 CWT 相当不精确?
频谱图在预测精确频率方面似乎非常好,但对于 CWT,我尝试了许多不同的小波,结果是一样的。
我监督了什么吗?这不是解决这个问题的合适工具吗?
在下面,您可以找到我的示例源代码和相应的图。
import matplotlib.pyplot as plt
import numpy as np
from numpy import pi as ?
from scipy.signal import spectrogram
import pywt
f_s = 200 # Sampling rate = number of measurements per second in [Hz]
t = np.arange(-10,10, 1 / f_s) # Time between [-10s,10s].
T1 = np.tanh(t)/2 + 1.0 # Period in [s]
T2 = 0.125 # Period in [s]
f1 = 1 / T1 # Frequency …Run Code Online (Sandbox Code Playgroud) 各位程序员大家好
我正在尝试与装饰器一起制作discrete Fourier transform一个:minimal working examplenumba.njit
import numba
import numpy as np
import scipy
import scipy.fftpack
@numba.njit
def main():
wave = [[[0.09254795, 0.10001078, 0.10744892, 0.07755555, 0.08506225, 0.09254795],
[0.09907245, 0.10706145, 0.11502401, 0.08302302, 0.09105898, 0.09907245],
[0.09565098, 0.10336405, 0.11105158, 0.08015589, 0.08791429, 0.09565098],
[0.00181467, 0.001961, 0.00210684, 0.0015207, 0.00166789, 0.00181467]],
[[-0.45816267, - 0.46058367, - 0.46289091, - 0.45298182, - 0.45562851, -0.45816267],
[-0.49046506, - 0.49305676, - 0.49552669, - 0.48491893, - 0.48775223, -0.49046506],
[-0.47352483, - 0.47602701, - 0.47841162, - 0.46817027, - 0.4709057, -0.47352483],
[-0.00898358, …Run Code Online (Sandbox Code Playgroud) 我有由扫描仪生成的带有重复图案(水平白线)的肤色图像,该扫描仪使用一排传感器来感知照片。
我的问题是如何使用 FFT 有效地对图像进行去噪,而不会对图像质量产生太大影响,有人告诉我,我必须手动抑制幅度谱中出现的线,但我不知道该怎么做,可以请告诉我该怎么做?
我的方法是使用快速傅立叶变换(FFT)逐通道对图像进行去噪。
我尝试过傅里叶域中的 HPF 和 LPF,但结果并不好,如您所见:
我的代码:
from skimage.io import imread, imsave
from matplotlib import pyplot as plt
import numpy as np
img = imread('skin.jpg')
R = img[...,2]
G = img[...,1]
B = img[...,0]
f1 = np.fft.fft2(R)
fshift1 = np.fft.fftshift(f1)
phase_spectrumR = np.angle(fshift1)
magnitude_spectrumR = 20*np.log(np.abs(fshift1))
f2 = np.fft.fft2(G)
fshift2 = np.fft.fftshift(f2)
phase_spectrumG = np.angle(fshift2)
magnitude_spectrumG = 20*np.log(np.abs(fshift2))
f3 = np.fft.fft2(B)
fshift3 = np.fft.fftshift(f3)
phase_spectrumB = np.angle(fshift3)
magnitude_spectrumB = 20*np.log(np.abs(fshift2))
#===============================
# LPF …Run Code Online (Sandbox Code Playgroud)