【问题标题】:apply fourier shift theorem to complex signal将傅里叶位移定理应用于复信号
【发布时间】:2017-08-24 15:18:06
【问题描述】:

我正在尝试将fourier phase shift theorem 应用于 R 中的复杂信号。但是,只有我的信号幅度会按照我的预期发生变化。我认为应该可以将这个定理应用于复杂信号,所以我可能在某个地方犯了错误。我的猜测是我计算的频率轴有误差。

如何正确地将傅里叶位移定理应用于复信号(使用 R)?

i = complex(0,0,1)
t.in = (1+i)*matrix(c(1,0,0,0,0,0,0,0,0,0))
n.shift = 5

#the output of fft() has the mean / 0 frequency at the first element
#it then increases to the highest frequency, flips to negative frequencies
#and then increases again to the negative frequency closest to 0
N = length(t.in)
if (N%%2){#odd
  kmin = -(N-1)/2
  kmax = (N-1)/2
} else {#even
  kmin = -N/2
  kmax = N/2-1
  #center frequency negative, is that correct?
}

#create frequency axis for fft() output, no sampling frequency or sample duration needed
k = (kmin:kmax)
kflip = floor(N/2)
k = k[c((kflip+1):N,1:kflip)]
f = 2*pi*k/N

shiftterm = exp( -i*n.shift*f )

T.in = fft(t.in)
T.out = T.in*shiftterm
t.out = fft(T.out, inverse=T)/N

par(mfrow=c(2,2))
plot(Mod(t.in),col="green"); 
plot(Mod(t.out), col="red");
plot(Arg(t.in),col="green");
plot(Arg(t.out),col="red");

如您所见,信号幅度发生了很好的变化,但相位被打乱了。我认为负频率是我的错误所在,但我看不到它。

我做错了什么?


我能找到的关于傅立叶相移定理的问题:

real 2d signal in python

real 2d signal in matlab

real 1d signal in python

math question about what fourier shift does

但这些与复杂信号无关。

【问题讨论】:

  • 如果幅度为零(机器精度),那么相位不会告诉你太多。第 6 项的相位是否正确?
  • @Steve 没想到会这样,你说得对!您认为我可以按原样使用我的移位信号,还是应该将其设置为 0 Mod(t.out) < .Machine$double.eps ?另外,请注意将其作为答案,还是应该删除该问题?
  • 也许this solution 是标记为重复而不是删除问题的好人选?
  • 不,这不是关于相移定理,而是关于重新排列 fft 元素以供某些函数使用。有一些类似的问题,但没有一个是关于复杂信号的。等等,我会在帖子中添加一些链接。
  • 随意将您的研究放在一起作为答案。

标签: r time signal-processing fft phase


【解决方案1】:

回答

正如史蒂夫在 cmets 中建议的那样,我检查了第 6 个元素的相位。

> Arg(t.out)[6]
[1] 0.7853982
> Arg(t.in)[1]
[1] 0.7853982

因此,唯一具有大小(至少比EPS 高一个数量级)的元素确实具有我预期的相位。

TL;DR 问题中原始方法的结果已经正确,我们看到吉布斯现象滑过。


只丢弃低幅度元素?

如果应该为零的元素的相位成为问题,我可以运行t.out[Mod(t.out)<epsfactor*.Machine$double.eps] = 0,在这种情况下,epsfactor 必须是10 才能摆脱“0”幅度元素。

在绘图之前添加该线会得到以下结果,这是我事先期望得到的。但是,正如我将在下面解释的那样,在大多数情况下,“加扰”阶段实际上可能是准确的。

原来的结果确实是正确的

然而,仅仅将低幅度元素设置为0 并不能使移位信号的相位更直观。这是一个我应用 4.5 个样本移位的图,相位仍然“加扰”。

应用傅立叶位移等效于缩小位移傅立叶插值

在我看来,应用非整数元素相移相当于对信号进行傅立叶插值,然后在原始元素之间的点处对插值信号进行下采样。由于我用作输入的向量是一个脉冲函数,因此傅立叶插值信号的表现不佳。那么应用傅立叶相移定理后的信号可以预期具有与傅立叶插值信号完全相同的相位,如下所示。

吉布斯响铃

它只是在相位表现不佳以及小的舍入误差可能导致重构相位中的大误差的不连续处。所以与低幅度无关,但与输入向量的未明确定义的傅立叶变换无关。这称为Gibbs Ringing,我可以使用低通filteringgaussian 滤波器来降低它。

有关傅立叶插值和相移的问题

symbolic approach in R to estimate fourier transform error

non integer signal shift by use of linear interpolation

downsampling complex signal

fourier interpolation application

estimating sub-sample shift between two signals using fourier transforms

estimating sub-sample shift between two signals without interpolation

【讨论】:

    猜你喜欢
    • 2012-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多