math_learning 2015-05-15 01:42 采纳率: 0%
浏览 3307

]fftshift和ifftshift的使用场合,求助大神,这个问题已经困扰很久了~~

我知道,fftshift和ifftshift对于偶数长度的数组,两者无区别;对于奇数长度数组,fftshift相当于把数组的第一个放到数组中间,而ifftshift则是把最后一个放到中间。但是在用fft进行滤波等处理时,什么时候用fftshift或ifftshift感到很糊涂了,因为这个问题已经遇到很多次了.
现在想实现对一组数据进行低通滤波,代码如下:

Nf = 2^12;
xAxisf = linspace(-10,10,Nf);
% plot(xaxis, data);

% FFT

xsize = numel(data);

Xf = zeros([1 Nf]);
indices = Nf/2-floor(xsize/2):Nf/2-floor(xsize/2)+xsize - 1;
Xf(indices) = data;

% Xf = fftshift(Xf);
Xf = fft(Xf);
Xf = fftshift(Xf);

% plot
Xfa = abs(Xf); plot(xAxisf, Xfa);

% generate super-gaussian filter function
Nf = numel(Xf);

widthfilter = 0.12;
filterpower = 2;
filter = exp(-(xAxisf.^2./widthfilter^2).^filterpower);

% filter
filtertimes = 20;
Xf = Xf .* filter.^filtertimes;

% plot
Xfa = abs(Xf); plot(Xfa);

% iFFt
Xfs = ifftshift(Xf);
Xif = ifft(Xfs);
% Xif = ifftshift(Xif);
result = abs(Xif);

plot(result(indices))

现在针对这个程序,我有一些疑问,希望大家能帮忙看看,谢谢大神门了!!
问题1:
在fft用之前,不需要用fftshift对data进行操作吗?就像如下操作:

Xf = fftshift(data); % NOT NEEDED???
Xf = fft(Xf);

问题2:
程序中是用ffitshift对Xf操作的(Xf = fftshift(Xf)),我想为什么不能用ifftshift操作呢?

问题3:
在使用ifft之前,为什么用ifftshift操作呢?(Xfs = ifftshift(Xf)而不是用ffishift呢?

问题4;
Xif = ifft(Xfs)反傅里叶变换之后,要用iffshift操作吗?如果需要,为什么不是用ffishift呢?

其实,问题总的来说,就是fftshift和ifftshift在什么场合下使用,为什么有时候用fftshift操作,而不是用ifftshift操作呢?或者为什么有时候用ifftshift操作,而不是用fftshift操作呢?

  • 写回答

1条回答 默认 最新

  • ‘学生’ 2020-08-19 19:24
    关注

    这个问题问的很到位也很糊涂,首先你要知道fftshift和ifftshift是怎么来的,是怎么变换?然后你再考虑什么情况下使用
    你搞清楚会发现两个变换是反方向进行的,简单的说,fftshift和fft配合使用,ifftshift和ifft配合使用,关于你说的fft前对数据进行移位操作,其实没必要,
    一般来讲,fft后再对abs后的数据作fftshift即可

    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)