свертка синусового сигнала с прямоугольным импульсом - PullRequest
3 голосов
/ 03 марта 2012

Я хотел бы выполнить операцию свертки синусового сигнала и прямоугольный пульс в сципе. Я свернул синусовый сигнал с косинусом и нанес это на график, но я хотел бы знать, как создать массив с прямоугольным импульсом, что-то похожее на это выражение Matlab

y = rectpulse(x,nsamp)

чтобы я мог их свести. Я использую это, чтобы создать свой синус и косинус сигнал

x=r_[0:50] (my array)
y01=sin(2*pi*x/49)
y02=cos(2*pi*x/49)

Итак, я попытался создать nu.zeros (50) и вручную изменить нули с позиция 15-25 от 0.0. до 0,9, так что это выглядит как прямоугольник, но свертка на массиве пазухи, и этот массив «прямоугольник» странно, Это должно быть ноль, когда нет пересечения, но я получаю синус сигнал взамен, вот код:

from scipy import *
from pylab import *

x = r_[0:50]
y1 = sin(2*pi*x/49)
#y2 = cos(2*pi*x/49)
y2 = np.zeros(50)
for i in range(15,25):
    y2[i] = 0.9
#print len(y1),len(y2)
y3 = convolve(y2,y1,mode="same")
subplot(2,2,1)
plot(x,y1)
hold(True)
plot(x,y2)
hold(True)
subplot(2,2,2)
print len(x),len(y3)
plot(x,y3)
hold(True)
show()

Я заранее прошу прощения, я чувствую, что это самая легкая вещь, но я мог не найти ссылки на то, как создать прямоугольный импульс.

1 Ответ

2 голосов
/ 05 марта 2012

Вы очень хорошо подготовили построение свертки и затем проанализировали ее, чтобы увидеть, что это не то, что вы ожидаете, +1!Тем не менее, я думаю, что ваше беспокойство связано с функцией convolve.Поскольку вы передали ему параметр mode="same", он отсекает ту часть свертки, которая равна нулю, и оставляет вас с "интересной" частью.Вы прекрасно сконструировали функцию rect(), хотя я согласен с вами, должен быть альтернативный способ, чтобы где-то оскорблять.Когда я допускаю построение всей свертки, я получаю:

Convolution

Из этого кода:

from scipy import *
from pylab import *

x = r_[0:50]
y1 = sin(2*pi*x/49)
#y2 = cos(2*pi*x/49)
y2 = np.zeros((y1.shape))
for i in range(15,25):
    y2[i] = 0.9
#print len(y1),len(y2)
#y3 = convolve(y2,y1,mode="same")
y3 = convolve(y2,y1)
subplot(2,2,1)
plot(x,y1)
hold(True)
plot(x,y2)
hold(True)
subplot(2,2,2)
print len(x),len(y3)
xx = r_[0:len(y3)]
print len(xx),len(y3)
plot(xx,y3)
hold(True)
show()

Что я и ожидал, учитывая документация для этой функции.Дайте мне знать, если есть что-то еще, что я пропустил!

...