tommy321 发表于 2010-3-14 11:12

FFT后通过频域相位移动实现时间移动---(fft后不对称???)

本帖最后由 wdhd 于 2016-9-20 13:35 编辑

  时间采样信号 x ,采样点250个,采样率1ms,
  256点基2 FFT变换 fft(x,256)
  变换后对应的频点的频率 f = 1000/256*(1:256); 怎么转换位角频率w,
  是w = 2*pi*f 吗?
  在频率域完成 exp(i*w*n) n为相位移动
  实现时域移动
  t = 0:.001:.25;
  x = sin(2*pi*50*t) + sin(2*pi*120*t);
  %plot(x(1:50));
  Y = fft(x,256);
  f = 1000/256*(1:256);%1000Hz
  w = 2*pi*f;
  Y1=exp(-i*w*0.001).*Y;%频域移动exp(-i*w*0.001) 对应时域向左移动0.001秒
  Z=ifft(Y1,256);
  plot(Z(1:50));
  可能是频率点转换到角频率的时候出错了,请大家指导一下
  [ 本帖最后由 tommy321 于 2010-3-14 15:17 编辑 ]

tommy321 发表于 2010-3-14 14:16

本帖最后由 wdhd 于 2016-9-20 13:35 编辑

  现在我先不做频率域的相位移动,直接把 Y 反变换回去
  Z=ifft(Y,256); 可以变换回 x 信号
  但我用正频也就是 Y 的前一半
  Y1=Y(1:128);
  Y2=;
  Z=ifft(Y2,256); 这样就出现问题了,变不回去
  查看fft后 Y 的数据,发现 Y是不对称的,所以我想对 Y 的前一半正频做运算以后的结果也不能正确
  我认为应该是 1:128 || 129:256 应该是对称的,但129怎么多出来一个值,把后面的值推后了一个位置,实在是不解
  [ 本帖最后由 tommy321 于 2010-3-14 14:50 编辑 ]

tommy321 发表于 2010-3-14 14:37

想办法把 Y 的前一半1:128 取出来 Y1, Y2 取前一半取 Y1,中间加个Y(129),后一半取 Y1 的反转(用fliplr函数),这下应该没问题了吧?!
Y1=Y(1:128);
Y2=;
Z=ifft(Y2,256);
plot(Z(1:50));
结果还是不对,变换不回去,查数据 Y2 的后半段 fliplr(Y1(2:128)) 怎么结果是取了共轭
测试 fliplr 函数没有取共轭阿?以下是测试结果
fliplr()
ans = 2.0000 + 1.0000i   1.0000 - 1.0000i
以下分别是Y 和 Y2 的数据对比

[ 本帖最后由 tommy321 于 2010-3-14 14:52 编辑 ]

tommy321 发表于 2010-3-14 14:48

本帖最后由 wdhd 于 2016-9-20 13:36 编辑

  fliplr函数怎么取了共轭呢,我再用conj函数变回来
  Y1=Y(1:128);
  Y2=;
  Z=ifft(Y2,256);
  plot(Z(1:50));
  这下结果正确。
  1、我现在的问题是256点 fft 后,为什么第129点多了个值,使结果不对称了?
  matlab的算法问题么(等我用其他数学库试试)?
  2、fliplr怎么取了共轭?
  3、以后取fft后 Y 的前半段正频率进行运算后,第129点怎么处理?

tommy321 发表于 2010-3-14 15:08

本帖最后由 wdhd 于 2016-9-20 13:36 编辑

  最后实现了频域相位移动,时域时移的测试,代码如下:
  clear;
  t = 0:.001:.25;
  x = sin(2*pi*50*t) + sin(2*pi*120*t);
  %plot(x(1:50));
  Y = fft(x,256);
  f = 2*pi*1000/256*(0:127);
  Y1=exp(i*f*0.001).*Y(1:128);%时域左移0.001秒
  Y2=;
  Z=ifft(Y2,256);
  plot(Z(1:50));
  以下是原始 x 图和频域相位移动exp(i * f * 0.001)后时域左移动0.001秒的图
  [ 本帖最后由 tommy321 于 2010-3-14 15:22 编辑 ]

tommy321 发表于 2010-3-14 15:20

最后我的移动问题解决了,但fft后 Y(129)点使结果不对称还是无法解释,
而且我 ifft 反变换还用到了这个点。
fliplr取了共轭也是个问题。希望大家指导

[ 本帖最后由 tommy321 于 2010-3-14 15:21 编辑 ]

ChaChing 发表于 2010-3-14 21:57

楼主真努力, 一个人就自己筑了六层楼, 根本已经将此区当成个人blog了!?:loveliness:

有权者是否考虑整理下!?

[ 本帖最后由 ChaChing 于 2010-3-14 21:59 编辑 ]

wanyeqing2003 发表于 2010-3-14 22:17

本帖最后由 wdhd 于 2016-9-20 13:36 编辑

原帖由 tommy321 于 2010-3-14 15:20 发表
最后我的移动问题解决了,但fft后 Y(129)点使结果不对称还是无法解释,
而且我 ifft 反变换还用到了这个点。
fliplr取了共轭也是个问题。希望大家指导
看了半天,没明白对称的意思。
时间点平移,也可以不考虑时间单位和频率单位的概念。你就考虑移动的时间点和频域点的对应关系即可。个人观点。
也请懂程序的朋友来讨论。

tommy321 发表于 2010-3-15 01:51

如2楼附图 Y.jpg,本来我认为128点和129点的值应该是相等的,但实际是128点和130点的值相等,中间129点的值不知道从哪里来的,使得第2点的值和256点相等,而不是第1点值和256点值相等。
有人用 gauss 9.0 么,可以做个fft对比下
我明天用c语言的GSL数学库的fft对比下。

更正1楼代码是向右移动了0.001秒

zhwang554 发表于 2010-3-15 07:44

回复 6楼 Tommy321 的帖子

本帖最后由 wdhd 于 2016-9-20 13:36 编辑

  频域采样有二种对称形式:如N=8
  奇对称采样 H=; 笫5点H4是对称点(笫N/2+1点)
  偶对称采样 H=; 对称点在中间
  你的情况是奇对称采样,N=256,笫129点是对称点.
  可参见”数字信号全相位谱分析和滤波技术”,电子工业出版社,2009.2p182页9.2.1节 “两种对称频率采样”
  sin信号有二条谱线, 处於奇对称, 二条谱线相反方向相移. 所以你后来做对了参见上书p188页 9.3节"用双相移组合全相位法进行陷波器设计"
  也可参见下网页 振动论坛 日志<双相移偶对称任意频率点全相位陷波器设计>
  http://forum.vibunion.com/UChome/space-62061-do-blog-id-17825.html
  [ 本帖最后由 zhwang554 于 2010-3-15 07:56 编辑 ]

tommy321 发表于 2010-3-15 12:18

回复 10楼 zhwang554 的帖子

学习了,明白其中原因了,确实是奇对称采样的。多谢zhwang554 xd指导

附GSL库计算得出同样结果图

uestclzl 发表于 2010-3-16 01:57

本帖最后由 wdhd 于 2016-9-20 13:38 编辑

原帖由 zhwang554 于 2010-3-15 07:44 发表
    频域采样有二种对称形式:如N=8
奇对称采样 H=; 笫5点H4是对称点(笫N/2+1点)
偶对称采样 H=; 对称点在中间
    你的情况是奇对称采样,N=256,笫129点是对称 ...
为什么说“你的情况是奇对称采样,N=256,笫129点是对称”,判断的依据是什么?

zhwang554 发表于 2010-3-16 07:24

回复 12楼 uestclzl 的帖子

本帖最后由 wdhd 于 2016-9-20 13:38 编辑

  奇对称相对偶对称而言, 书中称传统对称
  一个正弦信号, 其FFT频谱线出现在传统对称的位置, 两值共轭
  如 N=8,sin(2*pi*2/N*t),t=0:N-1信号, 其振幅谱为 H=; 频谱线出现在 3 和 7 的位置, 对 5 对称, 两值共轭
  如 N=256,sin(2*pi*50/N*t),t=0:N-1信号 频谱线出现在 51 和 207 的位置, 对 129 对称, 两值共轭
  [ 本帖最后由 zhwang554 于 2010-3-16 08:02 编辑 ]

xiaohouzi77 发表于 2010-3-19 19:03

学习了,感谢:@D
页: [1]
查看完整版本: FFT后通过频域相位移动实现时间移动---(fft后不对称???)