使用 DFT 的系统响应

信息处理 自由度 卷积
2022-02-13 00:49:27

假设我们有两个序列,输入序列x(n)=[0121]和给定系统的脉冲响应h(n)=[0,1,1,1]. 我需要找到这个系统对给定输入序列的响应。之后,我需要计算给定序列的线性卷积。

如果我们将响应表示为y(n)我们有y(n)=h(n)x(n),这意味着,由于卷积定理,在频域我们有Y(k)=H(k)X(k). 由此,我们可以发现y(n)=IDFT(Y(k)).

考虑到我需要找到给定序列的卷积这一事实,这意味着y(n)=h(n)x(n),这意味着它应该产生与我使用 DFT 执行此操作时相同的结果。但是,我的最终结果根本不匹配。

x(n)=[0121]X(k)=[4,2,0,2]h(n)=[0,1,1,1]H(k)=[1,1,3,1]Y(k)=X(k)H(k)=[4,2,0,2]y(n)=[0,1,2,1]

另一方面,给定序列的卷积给出以下结果:

y(n)=h(n)x(n)=[0,0,1,1,0,1,1]

不仅结果是完全错误的,而且我得到的向量的维度也不相同。我究竟做错了什么?任何帮助表示赞赏!

1个回答

它将匹配循环卷积模N, 在哪里N这里是 4。对于有限长度的序列,2 个序列的 DFT 的乘积等效于 2 个序列的循环卷积的 DFT。

>> cconv([0,1,2,1], [0,1,-1,1], 4)

ans =

 0     1     2     1

>>ifft(fft([0,1,2,1]).*fft([0,1,-1,1]))

ans =

 0     1     2     1