请参阅两者的说明fftshift和ifftshift.我想了解如何与调用上面的两个函数关系fft,并fftn在Matlab.
假设我的信号有一定的频率内容; 现在,频率数组通常可以存储为:
f = (-N/2:N/2-1)*df;
f = (1:N)*(df/2);
f = [(0:N/2-1) (-N/2:-1)];
Run Code Online (Sandbox Code Playgroud)
什么叫最好的方式fft,再加上fftshift和ifftshift,为3个研究例早期提到?
调用命令序列或错误命令的信号标准偏差有什么影响?
有谁能解释一下在MATLAB中执行对称IFFT的算法?
举个例子:
out_signal = ifft(X,'symmetric');
Run Code Online (Sandbox Code Playgroud)
这里X是复杂的对称信号.
我正在解决与FFT相关的问题。我遇到这样的情况,我必须将传入的数据流转发到 FFT 库函数或可以将时域数据转换为频域数据的 FFT 例程。
我需要使用 C# 中的哪个库?微软有提供这个吗?或者我需要为此使用一些第三方库?
据我所知,频谱的IFFT幅度部分是偶对称的,而相位部分是奇对称的应该是真实的.
让我们考虑这个例子:
signal_spectrum = [1 2+i 3+2*i 4+8*i 5 4-8*i 3-2*i 2-i 1];
Run Code Online (Sandbox Code Playgroud)
很明显,这个光谱符合我上面列出的两个条件.当我使用Matlab执行IFFT时,我获得:
signal= ifft(signal_spectrum) =
2.7778
0.8003 - 0.2913i
-1.2861 + 1.0792i
0.5218 - 0.9038i
-0.0812 + 0.4604i
0.0976 + 0.5536i
-0.6329 - 1.0962i
1.3343 + 1.1196i
-2.5316 - 0.9214i
Run Code Online (Sandbox Code Playgroud)
获得的信号是复值的.为什么?有什么问题?
我正在寻找周期信号中最丰富的频率。我试图了解如果对周期信号执行傅立叶变换并过滤具有负 fft 值的频率,会得到什么。
换句话说,图 2 和图 3(见下文)的轴表示什么?我正在绘制 fft 转换信号上的频率(周期/秒) - y 轴上的负值意味着什么,我只对这些感兴趣是否有意义?
import numpy as np
import scipy
# generate data
time = scipy.linspace(0,120,4000)
acc = lambda t: 10*scipy.sin(2*pi*2.0*t) + 5*scipy.sin(2*pi*8.0*t) + 2*scipy.random.random(len(t))
signal = acc(time)
# get frequencies from decomposed fft
W = np.fft.fftfreq(signal.size, d=time[1]-time[0])
f_signal = np.fft.fft(signal)
# filter signal
# I'm getting only the "negative" part!
cut_f_signal = f_signal.copy()
# filter noisy frequencies
cut_f_signal[(W < 8.0)] = 0
cut_f_signal[(W > 8.2)] = 0
# inverse fourier to …Run Code Online (Sandbox Code Playgroud) 我有另一个问题.非常类似于我已经问过的另一个(并得到很大的帮助 - 再次感谢).不幸的是,其他线程的解决方案在这里不起作用:(http://stackoverflow.com/questions/8680909/fft-in-matlab-and-numpy-scipy-give-different-results)
现在是关于ifft:
# i have an array 'aaa' of shape (6,) such as:
for i in aaa: print i
...
(1.22474487139+0j)
(-0.612372435696-1.06066017178j)
(-0.612372435696+1.06066017178j)
(1.22474487139+0j)
(-0.612372435696-1.06066017178j)
(-0.612372435696+1.06066017178j)
#when i perform np.ifft the result is:
np.fft.ifft(aaa)
array([ 1.48029737e-16 +1.48029737e-16j,
-8.26024733e-17 -1.72464044e-16j,
1.22474487e+00 -3.94508649e-16j,
3.70074342e-17 -2.96059473e-16j,
-2.22044605e-16 +2.46478913e-16j, 4.55950391e-17 +4.68523518e-16j])
###################################################################
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% BUT IN MATLAB
% the same array...
aaa =
1.2247
-0.6124 - 1.0607i
-0.6124 + 1.0607i
1.2247
-0.6124 - 1.0607i
-0.6124 + 1.0607i
% ...gives the result:
ifft(aaa) …Run Code Online (Sandbox Code Playgroud) 在进行逆FFT时,我有以下代码有错误.正向FFT工作,因为我打印输出并验证它.但反过来似乎没有.有任何想法吗?看起来我错过了一个概念吗?
代码 - http://pastebin.com/iZYtdcqR
编辑 - 我基本上重写了CUDA工具包示例附带的代码.我试图使用FFT但使用修改后的算法(实际上是DIF)执行卷积.
EDIT2 - 问题的dding代码.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <cuda_runtime.h>
#include <cufft.h>
typedef enum signaltype {REAL, COMPLEX} signal;
typedef float2 Complex;
void
printData(Complex *a, int size, char *msg) {
if (msg == "") printf("\n");
else printf("%s\n", msg);
for (int i = 0; i < size; i++)
printf("%f %f\n", a[i].x, a[i].y);
}
void
normData(Complex *a, int size, float norm) {
for (int i = 0; i < size; i++) {
a[i].x /= norm; …Run Code Online (Sandbox Code Playgroud)