标签: fft

在空间域中为给定掩模寻找频域中的等效高斯滤波器掩模

到目前为止,我已经完全在空间域中实现了高斯模糊滤波器,利用了高斯的可分离性,即沿着行应用1D高斯核,然后沿着图像的列应用.这工作得很好.

现在,仅给出空间域的NxN卷积矩阵的大小N,我想在频域上实现完全相同的模糊图像.这意味着我将图像加载到矩阵中(numpy,我正在使用python),对它应用FFT(然后我有G(x,y)),然后我还必须有一个滤波器H( u,v)在频域中,它也类似于某些2d高斯的形状,其中心值为1.0,然后值越来越偏离0离我的中心越远.然后我在频域中进行乘法(在我必须考虑进行H的中心偏移之前)然后应用iFFT.

我遇到的麻烦是找到导致相应H(u,v)的确切公式(即找到sigma,std-deviation).从空间域,如果给我一个掩码大小N,我知道std-dev西格玛可以近似为sigma =(maskSize-1)/2/2.575,例如对于掩码大小N = 15我得到对于e ^ - (x²/2sigma²),std-dev = 2.71845,现在只考虑1D情况.

但是如何获得频域的sigma?

有趣的是顺便说一句,理论上我知道如何使用Mathematica获得sigma,但结果是纯粹的假,我可以在这里证明:

gauss1d[x_, sigma_] := Exp[-(x^2)/(2 sigma^2)]
Simplify[FourierTransform[gauss1d[x, sigma], x, omega], sigma > 0]
Run Code Online (Sandbox Code Playgroud)

结果是E ^( - (1/2)omega ^ 2 sigma ^ 2)*sigma

这是假的,因为它在E函数的指数中将1 /sigma²转换为sigma².因此,如果你画出这个,你就会发现标准偏差变小了很多,因为H(u,v) - 高斯很多"更薄".但是,它实际上应该在频域中比在空间域中宽得多!它没有任何意义......

math fft frequency gaussian blur

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

fft和小波

我可以使用fft来获取加载的1秒音频文件的人,说"ahhhh"并重新创建它,频率,相位和幅度.我现在要做的是找出每个频率开始的位置以及它们在1秒音频文件中的结束位置并将数据放入数组中

示例:100hz从.23seconds开始到.34seconds,104.34hz从.35seconds开始,到.37seconds结束.

fft可以做到这一点还是我需要将整个程序转移到使用小波?还有八度音阶中的小波示例,说明如何做我想要完成的事情吗?

我正在使用来自repo的Ubuntu Linux 12.04和Octave 3.2.4

谢谢里克

matlab fft octave wavelet

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

将FFT应用于java中的录音

我在这个网站上看到过与此类似的类似问题,但我的问题有点不同.我用来捕获音频的代码就是这个.我想简单地获取捕获的音频并用256点应用FFT.

我意识到这line count = line.read(buffer, 0, buffer.length);会将音频分解为"块".

我也可以在这里找到我正在使用的FFT .

我的问题是:

  1. 我想知道是否有办法将FFT应用于整个录音而不仅仅是缓冲量.
  2. 我看到FFT的代码需要一个实部和虚部,我如何通过音频文件从代码中获取实部和虚部.

java audio signal-processing fft

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

如何使用Matlab提高PSD的分辨率

我有和音频信号,我用Matlab读,并使用pwelch获取其PSD,这里是我正在使用的代码

[x,Fs] = audioread('audioFile.wav');
x= x(:,1) %  mono
[xPSD,f] = pwelch(x,hamming(512),16,1024,Fs);
plot(f,xPSD);
Run Code Online (Sandbox Code Playgroud)

因为FS=96000我只对5赫兹的频率感兴趣,我想仅为该区域计算PSD,并且还能够调整PSD的分辨率!任何想法要做到这一点!

matlab signal-processing fft

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

使用MATLAB对任意图进行傅里叶变换和FFT

我有一个简单的问题,但由于我没有使用MATLAB傅立叶变换工具,我需要一些帮助.我有一个从n excel文件获得的情节.该图是时域.绘图的时间范围是0到50 ps.我每0.5秒有一个y分量的数据.基本上,该图包含每0.5fs打印的100000个数据.现在我想得到这个情节的傅里叶变换.我该怎么办?以下是我的excel文件的简单格式,其中包含我需要具有时域图的数据.

0       116.0080214
0.0005  116.051128
0.001   116.0939229
0.0015  116.1362197
0.002   116.1776665
0.0025  116.2178118
0.003   116.256182
.
.
.
.
50.0    123.000
Run Code Online (Sandbox Code Playgroud)

第一列是ps的时间.非常感谢你提前帮助.最好,HRJ

matlab fft

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

计算功率谱

我想用Python3计算功率谱.从另一个关于这个主题的主题我得到了基本的成分.我认为应该是这样的:

ps = np.abs(np.fft.fft(x))**2
timeres = t[1]-t[0]
freqs = np.fft.fftfreq(x.size, timeres)
idx = np.argsort(freqs)
plt.plot(freqs[idx], ps[idx])
plt.show()
Run Code Online (Sandbox Code Playgroud)

t是时间,x是光子计数.我也尝试过:

W = fftfreq(x.size, timeres=t[1]-t[0])
f_x = rfft(x)
plt.plot(W,f_x)
plt.show()
Run Code Online (Sandbox Code Playgroud)

但两者大多只是给我一个零左右的峰值(尽管它们不一样).我试图从这个计算功率谱:

数据

哪个应该给我一个大约580Hz的信号.我在这做错了什么?

python signal-processing numpy fft spectral-density

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

MATLAB fft y轴含义

我有一个随时间变化的信号(a),我将其作为参考。我需要将频率相关的加权因子乘以fft的y轴值;但是,如果我这样做:

xdft = fft(a);
xdft = xdft(1:length(x)/2+1); % only retaining the positive frequencies
freq = Fs*(0:(L/2))/L; 
Run Code Online (Sandbox Code Playgroud)

然后plot(freq,xdft)在正确的信号频率下获得〜2000的峰值fft值(y轴)。但是原始信号的峰值(幅度)约为46。我需要知道数字之间的关系,以便可以对fft值进行加权。

matlab fft

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

使用Scipy进行FFT的奇怪结果

我正在尝试对某些数据(高斯脉冲)进行FFT,但我发现了一个奇怪的结果.结果FFT的实部和虚部在符号阵列的每个索引中交替出现.然而,阵列的绝对值是连续的.所以,我得到的东西看起来像这样:

高斯脉冲的FFT

有没有人知道造成这种情况的原因?谢谢!

python fft scipy

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

如何交换两个图像的相位响应?

我将FFT应用于每个图像.我提取了图像1和2的角度或相位.之后,我想交换两个图像之间的相位响应,但保持大小完整.我到目前为止的代码是:

Image1=double(imread('/home/anelmad/Desktop/ml/signal_images_processing/tp6/barbara.png'))/255;
Image2=double(imread('/home/anelmad/Desktop/ml/signal_images_processing/tp6/lena.bmp'))/255;
Image1=fft2(Image1);
Image2=fft2(Image2);

figure(1);
imshow(angle(Image1));
x=(angle(Image1));
angle(Image2)=x;

figure(2);
imshow(Image2);
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

error: assignment failed, or no method for '<unknown type> = matrix'
Run Code Online (Sandbox Code Playgroud)

我认为问题是我们应该修改傅里叶变换矩阵(fft2)中的复数.那是对的吗?

matlab signal-processing fft image-processing phase

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

为什么cufft的输入和输出与传统的fft有很大不同?

从我对fft函数的理解(例如,从类似这样的问题开始

假设1D fft,给定N点实际数据,对于零频率,我将得到长度为N(但为复数)+1的双面fft。如果我采用相同的fft输出,并对其执行ifft,则将获得N个实数值,在理想情况下,这将与fft的原始输入完全匹配。

cufft中,这似乎有很大不同。

根据Nvidia的研究,给N个实数分量将导致fft的N2 +1个复杂分量,而N2 + 1个复杂分量将导致N个实数分量。

看到这里(R =实数,C =复数,2 =到):

在此处输入图片说明

请注意,我认识到一半的复杂成分实际上是重复的(但共轭并颠倒了),因此对于输入输出值保留重建所需的所有日期而言并不是必需的,但这并不能解释Nvidia如何声称fft的输入和输出数据长度应该结构化,cufft的输入和输出长度所做的事情与我对此情况的预期相反。

c++ cuda fft complex-numbers cufft

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