关键词:反卷积 MATLAB fft 频移 分母中频谱零点 卷积核
%==============================================================
![0818b9ca8b590ca3270a3433284dd417.png](https://img-blog.csdnimg.cn/img_convert/0818b9ca8b590ca3270a3433284dd417.png)
![0818b9ca8b590ca3270a3433284dd417.png](https://img-blog.csdnimg.cn/img_convert/0818b9ca8b590ca3270a3433284dd417.png)
![0818b9ca8b590ca3270a3433284dd417.png](https://img-blog.csdnimg.cn/img_convert/0818b9ca8b590ca3270a3433284dd417.png)
![0818b9ca8b590ca3270a3433284dd417.png](https://img-blog.csdnimg.cn/img_convert/0818b9ca8b590ca3270a3433284dd417.png)
代码如下:
clear all;clc;
h = [1 1 1 1] % 要求
f = [1 -2 3 -2] % 已知
g = conv(h,f) % 已知 g = h*f 这里卷积结果g知道,f知道,f视作卷积核,反卷积求h
Nf = length(f);
Nh = length(h);
N = 16;
% N = input('请输入比Nf*Nh大的数:');
Gk = fftshift(fft(g,N));
Fk = fftshift(fft(f,N));
container = repmat(zeros(size(Fk)),Nh-1,1);
for i = 1:(Nh-1)
k = i*Nf;
container(i,:) = Fk([end-k+1:end 1:end-k]); %此处是做频移,算的是上面的Fpk那个连乘 Nh-1 次的公式;container的每一行保存的都是将要连乘的频移后结果
end
Fpk = prod(container) % 此处连乘
Fek = Fk.*Fpk
hpn = ifft(ifftshift(Gk.*Fpk))
fen = ifft(ifftshift(Fek))
n = (0:15)';
fen = fen';
hpn = hpn';
table = real([n fen hpn])
运行结果如下:
![0818b9ca8b590ca3270a3433284dd417.png](https://img-blog.csdnimg.cn/img_convert/0818b9ca8b590ca3270a3433284dd417.png)
和论文中的结果是一致的
![0818b9ca8b590ca3270a3433284dd417.png](https://img-blog.csdnimg.cn/img_convert/0818b9ca8b590ca3270a3433284dd417.png)