无法将repmat和symmetry的MATLAB代码转换为Python代码

无法将repmat和symmetry的MATLAB代码转换为Python代码,python,matlab,python-2.7,numpy,Python,Matlab,Python 2.7,Numpy,MATLAB代码: n = 2048; d = 1; order = 2048; nn = [-(n/2):(n/2-1)]'; h = zeros(size(nn),'single'); h(n/2+1) = 1 / 4; odd = mod(nn,2) == 1; h(odd) = -1 ./ (pi * nn(odd)).^2; f_kernel = abs(fft(h))*2; filt = f_kernel(1:order/2+1)'; w = 2*pi*(0:size(filt,2)

MATLAB代码:

n = 2048;
d = 1;
order = 2048;
nn = [-(n/2):(n/2-1)]';
h = zeros(size(nn),'single');
h(n/2+1) = 1 / 4;
odd = mod(nn,2) == 1;
h(odd) = -1 ./ (pi * nn(odd)).^2;
f_kernel = abs(fft(h))*2;
filt = f_kernel(1:order/2+1)';
w = 2*pi*(0:size(filt,2)-1)/order;
filt(w>pi*d) = 0;                     
filt = [filt , filt(end-1:-1:2)]; 
filt = repmat(filt',[1 1024]);
Python代码:

import numpy as np
import numpy.matlib
from numpy.matlib import repmat
d = 1
filt_length = 2048
nn = np.linspace(-1024,1023,2048)
nn = np.transpose(nn)
h = np.zeros((2048))
h[1024] = 0.25
odd = (nn%2)
for i in range(0,2048) :
    if odd[i] == 1 :
    h[i] = -1/((np.pi*nn[i])**2)       

f_kernel = abs(fft(h))*2
filt = np.transpose(f_kernel[0:1024])
w = (np.pi)*np.linspace(0,1,1025)

但是,我无法将最后3行MATLAB代码转换为Python。有什么建议吗?MATLAB代码的最后第二步创建一个大小为2048的斜坡滤波器(1024步从0到1,1024步从1到0)。最后一个repmat将filt的大小设置为(20481024)。

如果我在我的计算机上,我会启动Octave和IPython会话,并开始逐行复制代码。我会使用更小的尺寸来轻松观看结果。我会特别注意形状。因为我的Matlab已经生锈了,所以用这种方法比用我的头脑更容易。而且更可靠

np.arange
linspace
更易于使用<1d阵列不需要代码>转置<代码>np。重复或
np。平铺
可能会执行repmat的作业。我记不清repmat的确切功能。起初我会复制循环,但在代码运行时我会尝试替换它们<代码>fft可能需要
scipy