首页 > 编程知识 正文

频域的卷积等于时域,matlab时域图

时间:2023-05-04 18:25:20 阅读:124906 作者:337

时域卷积定理:

wiki:f { fg }=f { f } f { g } f{ f * g}=f{ f}cdotf{ g} f { f } f { g } }

百度: f1(t ) f1 )) f_1(t ) leftrightarrowf_1(Omega ) f1(t)、F2 (t ) F2 () f )2(t ) ) ) omega

维客: f { f g }=

F { f } ∗ F { f } F{f cdot g}=F{f} * F{f} F{f⋅g}=F{f}∗F{f} 或者 f ∗ g = F − 1 { F { f } ⋅ F { g } } f*g=F^{-1}{F{f} cdot F{g}} f∗g=F−1{F{f}⋅F{g}}
百度: f 1 ( t ) ↔ F 1 ( ω ) f_1(t)leftrightarrow F_1(omega) f1​(t)↔F1​(ω), f 2 ( t ) ↔ F 2 ( ω ) f_2(t)leftrightarrow F_2(omega) f2​(t)↔F2​(ω): F [ f 1 ( t ) ⋅ f 2 ( t ) ] = 1 2 π F 1 ( ω ) ∗ F 2 ( ω ) F[f_1(t)cdot f_2(t)]=frac{1}{2pi}F_1(omega) * F_2(omega) F[f1​(t)⋅f2​(t)]=2π1​F1​(ω)∗F2​(ω)

总体上很相似但是在频域卷积定理上百度百科多除了一个 2 π 2pi 2π,原因未知。接下来使用matlab验证卷积定理,当前网上都是矩阵验证且使用了IFFT,并不能实实在在的观察到卷积定理,而且在真正项目编码实现的时候既然使用到卷积定理,那大部分是不想用IFFT了。
时域卷积定理:

x1=[1 2 3 4 5];x2=[2 3 4 5 6];yx1=fft(x1);yx2=fft(x2);xx=cconv(x1, x2, 5); fftxx=fftshift(fft(xx));test=fftshift(yx1).* fftshift(yx2);


频域卷积定理:

x1=[1 2 3 4 5];x2=[2 3 4 5 6];yx1=fft(x1);yx2=fft(x2);xx=x1.*x2;fftxx=fftshift(fft(xx));fftxx=fftxx*5;test = ifftshift( cconv( fftshift(yx1), fftshift(yx2),5 ) );


以上:

频域卷积定理验证时的结果形式和WIKI上的是一致的,百度百科上的可能需要该函数或者其他的一些操作。在网上很多验证失败的根本原因是函数使用不正确,要想得到验证,每一个变量fft后都需要做一次fftshift,因为fft后频率是[0,fs/2] +[-fs/2,0]的形式,而shift后则变成[-fs/2,fs/2]。其次,卷积不可直接使用conv或者conv2等线性卷积(即我们经常使用的一种卷积方式,详见matlab的conv文档),直接使用的是cconv圆周卷积,原因是:fft本身是一个无限操作,圆周卷积也可以变成一种无限操作。在频域卷积定理中,卷积之后需要乘以x1或者x2的长度(或者圆周卷积后除以x2长度,好像是圆周卷积做了x2长度个周期),x1和x2的长度肯定是相同的,因为两个之间的操作是点乘。线性卷积和循环卷积可以互换。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。