簡體   English   中英

無法將MATLAB轉換為repmat和對稱性的Python代碼

[英]Unable to convert MATLAB to Python code for repmat and symmetry

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)

但是,我無法將MATLAB代碼的最后3行轉換為Python。 有什么建議么? MATLAB代碼的倒數第二步創建一個大小為2048的漸變濾波器(在1024步中從0到1,在另外1024步中從1到0)。 最后一個repmat使filt的大小為(2048,1024)。

如果我在計算機上,則將啟動Octave和IPython會話,並開始逐行復制代碼。 我會使用較小的尺寸輕松查看結果。 我會特別注意形狀。 因為我的Matlab生銹了,所以用這種方法比在腦海中容易做。 而且更可靠。

np.arangelinspace更易於使用。 transpose維數組不需要transpose np.repeatnp.tile可能會執行repmat's工作。 我不記得repmat是做什么的。 最初,我會復制循環,但是在代碼正常工作時,我會嘗試替換它們。 fft可能需要scipy

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM