我无法将一些MATLAB代码转换为python。我试图通过将基本信号的移位副本添加到更长的信号中来构建信号。在MATLAB中工作的代码是
function [time, signal] = generateRandomSignal(pulse,data,samples,Tb)
N = length(data);
time = linspace(0,N*Tb,samples*N);
signal = zeros(1,length(time));
k = 1;
for n = 1:N
window = k:k+samples-1;
signal(window) = signal(window) + data(n)*pulse;
k = k + samples;
end
在使用变量切片的python中,较大的数组没有工作,所以我改变了但现在我得到了我认为应该工作的但是我不断得到关于不一致的数组大小的错误,即使我在检查大小时调试器看起来应该可以工作。
from numpy import *
def generateRandomSignal(pulse,data,samples,Tb):
N = data.size;
time = linspace(0,N*Tb,samples*N);
signal = zeros((1,time.size));
k = 0;
for n in range(0,N):
signal[k:k+samples] = signal[k:k+samples].copy() + data[n]*pulse[:].copy();
k = k + samples;
return time, signal
在Python中执行此操作的正确方法是什么?
编辑:最小预期输入和输出
Input
data = [1, -1, 0, 1, 1]
pulse = [1, 1, 1]
samples = 3. #length of pulse
Tb = 0.1
Output
signal = [1, 1, 1, -1, -1, -1, 0, 0, 0, 1, 1, 1, 1, 1, 1]
time = vector of 15 points evenly spaced from 0 to 0.3. (Not the problem)
EDIT2错误
ValueError: operands could not be broadcast together with shapes (1920,) (1,4410)
这是产生的实际错误。 (1,4410)是脉冲阵列的正确形状,但我不知道1920来自哪里或空逗号意味着什么
答案 0 :(得分:3)
将signal
的定义更改为signal = zeros(time.size)
。与Matlab不同,NumPy的一维数组的形状为(N,)
,而不是(N,1)
。
答案 1 :(得分:0)
我不明白为什么你应该在信号中有0个索引:
signal [0,k:k + samples] = signal [0,k:k + samples] .copy()+ data [n] * pulse [:]。copy();