V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
liuidetmks
V2EX  ›  数学

关于傅立叶变换的一点疑惑?(夜不能寐

  •  1
     
  •   liuidetmks · 2021-10-19 18:42:22 +08:00 · 2396 次点击
    这是一个创建于 1129 天前的主题,其中的信息可能已经有所发展或是发生改变。

    傅立叶变换,有公式
    F(t) = ∫fx * e^(-i* t * 2π) dx

    t = 0,1,2,3 ... N

    频率 t ,从做到又依次增加.

    二维的情况, 应该也是,从左到右,从上到下,依次增加。 也就是 左上角是最低频,右下角是最高频。 类似于

    1  2  3  
    2  3  4  
    3  4  5  
    

    但是看网上关于傅立叶变换的文章, 都是说,四周是低频,中间是高频(或者 四周是高频,中间是低频,然后平移变换,总之极值在中间。)

    请问这个是什么原因呢? 网上人都这么说,应该是我理解错了。

    还有,输出功率图的时候,是输出的振幅吧,复数的模,但我发现这个值很大,远远超过了 255 ( rgb 灰度值)。 这个是怎么处理的呢,谢谢。

    非通信出身,见笑了 :)

    9 条回复    2021-10-22 23:14:22 +08:00
    vinle
        1
    vinle  
       2021-10-19 18:56:28 +08:00
    mark,最喜欢这种硬核的主题了
    deplivesb
        2
    deplivesb  
       2021-10-19 19:01:03 +08:00   ❤️ 1
    虽然我不会,但是我觉得如果论坛里能多一些硬核主题还是还是不错的
    Rivers7
        3
    Rivers7  
       2021-10-19 19:31:08 +08:00
    傅里叶变换平移不变性,平移到中心了,matlab 中 fftshift 函数就是这个功能
    upojzsb
        4
    upojzsb  
       2021-10-19 19:33:43 +08:00   ❤️ 5
    第一个问题:
    计算机中使用的傅里叶变换并不是其连续形式,比如说一个 N 点(N=2^c, c 为整数)的信号 f[n]经过傅里叶变换后,会得到一个 N 点的复序列,其中第 k 个点(k=0, 1, ..., N-1)代表的频率是 k*fs/N,其中 fs 为信号的采样频率
    我们假设信号 f 是一个实信号(由实数构成),那么可以由傅里叶变换的定义推导出 f(-\omega)=\bar{f}(\omega),即信号是共轭对称的,我们就可以根据正频率推导出负频率的信息,同时离散傅里叶变换是周期的,周期为 2\pi,所以我们可以根据[0,\pi]的信号推导出其它位置的信号
    通过离散傅里叶变换得到的 N 个信号相当于对连续变换的 0~2\pi 的信号进行离散,所以第 0 个点代表 0 频率,第 N-1 个点代表 2\pi 频率,而\pi 到 2\pi 频率的信号相当于-\pi 到 0 频率的信号(根据周期性),-\pi 到 0 频率的信号相当于 0 到\pi 频率的信号的共轭(实信号的共轭性)所以在只考虑幅度的情况下,0~N-1 点的信号代表:
    0, fs/N, ..., fs/2, fs/2-fs/N, ..., 0
    0, 1, ..., N/2, N/2+1, ..., N-1
    也就是从低频到高频再到低频
    二维傅里叶变换同理:

    低低 低中 低高 低中 低低
    中低 中中 中高 中中 中低
    高低 高中 高高 高中 高低
    中低 中中 中高 中中 中低
    低低 低中 低高 低中 低低

    经过一个 fftshift 就变成中间低、四周高的形式

    第二个问题:

    我看二维傅里叶变换功率谱的时候一般会取个对数,看相对量

    如果想更深入理解这些问题,可以参考:
    [1] 信号与系统 Oppenheim
    [2] 数字图像处理 冈萨雷斯
    muhahaha
        5
    muhahaha  
       2021-10-19 21:41:13 +08:00 via iPhone
    第一个问题上面已经有了相当全面的回答,第二个问题,功率一般采用 dBw 的形式,也就是楼上说的取对数,具体形式一般是 10✖️log(x)
    shq619
        6
    shq619  
       2021-10-19 22:37:22 +08:00 via iPhone
    复平面不是实数平面,所以高的在原点
    necomancer
        7
    necomancer  
       2021-10-19 22:44:58 +08:00   ❤️ 1
    公式写错了,t->v
    F(v) = \int f(t)Exp(-i 2\pi v t)d t
    很显然当 f(t) 是实函数的时候 F(-v) = conj(F(v)),f 是复数的时候没有这个性质
    然后离散傅里叶变换,加和变积分,F[k] = \sum_{m=0}^{N-1} f[m]Exp(-i 2\pi mk/N)
    输出的数组按 k 为下标的话,F[0] 就是 \sum_{m=0}^{N-1} f[m]为整个信号的加和(积分),也是所谓的零频。如果数组长度是 N 的话,那么频率 k 最大到 N//2,这是 Nyquist 定理决定的,所以傅里叶变换后的数组 F[0~N//2] 是 0 频到最大频率,而 N//2~N 是负频率,即-N//2+1, ...., -1, 所以整个数组按照频率排序的话(偶数 N )的结构是 [0,1,2,...,N//2,-N//2+1,...,-1],而 fftshift 函数会将数组重排成为(按照频率)[-N//2+1,....-1,0,1...,N//2], 不难验证当 k=-N//2 和 N//2 时二者相等。正因为 Nyquist 定理决定了傅里叶变换后频率大小小于数组一半,即|k|<N/2,以及算法的原因,傅里叶变换的输出是先 0 频,再低频到高频,然后是负频率从高负频到低负频,
    vinle
        8
    vinle  
       2021-10-22 21:45:44 +08:00
    不懂傅立叶,但帮楼上完善下 tex 的公式显示:
    ![]( https://s3.bmp.ovh/imgs/2021/10/294b90e6cd04ac98.png)
    necomancer
        9
    necomancer  
       2021-10-22 23:14:22 +08:00   ❤️ 1
    昨天有事没详细写完,今天续上:考虑一个信号 f(t),变成一个长度为 N 的数组,数组标 i 其实和 t 是对应的,比如 t 是 0-T,那么 i=0,...N-1 对应 0,dt,2dt,3dt,....T-dt,其中 dt=T/N,但如果变成频率,首先,根据时频域倒数的关系,频率的单位是 1/T,第二,根据 Nyquist 定理,最大频率不能超过 0.5/dt,所以频率范围是 -0.5/dt~0.5/dt 。
    程序里其实涉及的是数组下标的转换,在离散傅里叶变换里,输出数组的长度也是 N,比如下标 k 是 0,1,2,3,4,...N,那么按照定义,F[k] = \sum_{m=0}^{N-1} f[m]Exp(-i 2\pi mk/N),我们如果按照下标顺序也就是 0,1,2,3...计算的话,可以从 Exp(-i2\pi mk/N)里看出,当 k<N/2 时没有任何问题,我们可以让数组下标 0,1,....N/2 对应频率 0,1/T,2/T...0.5/dt,但当 k>N/2 时,按照数组下标对应规则,频率就超过 0.5/dt 了,这是不现实的,由于傅里叶变换因子存在对称性,即令 k=N/2+j (直接对应频率 0.5/dt+j/T),其中 j<N/2,那么变换因子 Exp(-i2\pi mk/N)=Exp(-i 2\pi m (1/2+j/N)) = Exp(-i \pi m -i2\pi mj/N),考虑 k'=j-N/2,则 Exp(-i2\pi mk'/N)=Exp(-i 2\pi m (j/N-1/2))=Exp(i \pi m -i2\pi mj/N),和 k=N/2+j 时是一样的(Exp(i \pi m)=-1^m,m 为整数),也就是说 k=N/2+j 对应的大于 0.5/dt 的频率其实等于一个负数频率即(j-N/2)/T=j/T-0.5/dt,这就是输出数组排序按照零频-低频-高频-负高频-负低频的原因。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3454 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 10:30 · PVG 18:30 · LAX 02:30 · JFK 05:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.