【问题标题】:fourier inverse of a rectangular pulse using numpy使用 numpy 对矩形脉冲进行傅立叶逆变换
【发布时间】:2018-04-19 15:45:22
【问题描述】:

我无法解释 Python 中矩形脉冲的傅里叶逆变换的结果。我正在使用库 numpy.fft 中的函数 irfft。

这是我的代码:

import numpy as np
import matplotlib.pyplot as plt

n_on =  100
n_off = n_on

Y = np.concatenate(( np.ones(n_on), np.zeros(n_off) ))

y = np.fft.irfft(Y)

plt.figure()
plt.subplot(131)
plt.plot(Y, '.')
plt.title("Y")
plt.subplot(132)
plt.plot(y)
plt.title("y")
plt.subplot(133)
plt.plot(np.fft.ifftshift(y))
plt.title("ifftshift(y)")
plt.grid()

这会产生以下图像

因为我想模拟一个以原点为中心的矩形脉冲(信号 Y),所以我使用 irfft 函数对其进行逆变换,因为我知道时域信号是一个实函数(一个 sinc 函数以原点为中心),这就是信号 y。但是看看我是如何得到某种 fftshifted 信号而不是得到正确的 sinc 信号的,这就是我为什么要对绘制最右边信号的结果进行 ifftshift 以获得更合适的 sinc 函数的原因。

问题是,在使用 irfft 时获得 sinc 的 fftshift 版本是否合理?我在 irfft 的文档中没有遇到任何让我期待的东西。我真的不知道这是 irfft 函数的正确行为还是我做错了什么。

【问题讨论】:

    标签: python numpy signal-processing fft dft


    【解决方案1】:

    我认为您的y 信号的峰值接近x=0 和x=400 是正确的,但是,我并不完全清楚您要达到的目标。

    您的Y 向量似乎代表了一个频谱,它是一个顶帽函数。通过将此传递给numpy.fft.irfft,您实际上将您的频谱视为由相等幅度的正频率和负频率组成,您只提供正(和零)频率。如果您有这种形式的连续频谱,那么傅里叶逆变换将是一个以t=0 为中心的sinc() 函数。

    对于离散傅里叶变换,这并不完全正确,但它是一个很好的近似值,除了在t=0 处发生的环绕。这意味着傅里叶逆变换的负时间部分放在时间窗口的末尾,正如您在中间 (y) 图中观察到的那样。如果你想改变这个时域函数,你可以做的是在你的Y向量中引入一个线性相位变化(使它成为一个复数序列)。

    但是,如果您要生成一个以给定时间值为中心的 sinc() 函数,则使用 numpy.sinc() 直接在时域中执行此操作一定要容易得多,并且无需任何傅立叶变换。也许在您的应用程序中,您需要频域中的已知带宽,但这应该可以直接转换为 sinc() 函数的宽度(时域中的宽度与频域中的宽度成反比) .

    【讨论】:

    • 感谢您的回答。我不是想生成一个 sinc 函数,正如你所指出的那样,它当然很容易构建;我正在测试一些转换来调试另一个脚本。我相信这里的关键点是你提到的环绕效果,实际上这是我的问题:你说第二张图像(y信号)是正确的,那么这意味着样本从 x=200 开始到 x=400 对应于负数。你同意吗?
    • 感谢您的澄清。我认为您对负时间样本基本上是正确的,但是它们是否从 200 开始是不明确的,因为离散时间傅里叶变换假设一个严格的周期性波形。当然,y 数组的最后一个元素将是最接近零的负时间。
    • 另一个想法是,如果要生成时域波形,可以使用类似 (sin(t)/(Nsin(t/N)) 的解析结果,随着 N 趋于无穷大,它趋向于 sinc(t)。根据您的其他脚本的行为方式,我不确定您是否会更好地使用分析结果或(数字)FFT 的结果。
    • 我用 FFT 来理解函数的行为,这就是我用一个著名的傅里叶对来做的原因(以便能够检查我的结果)。无论如何,我认为您指出环绕效应的回答以及您对负时间样本的进一步评论解释了这些图像。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多