3

scipyで正弦波信号と矩形パルスの畳み込み演算を行いたいと思います。余弦信号で正弦信号を畳み込み、それをグラフにプロットしましたが、この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) を作成しようとし、0.0 から 15-25 の位置からゼロを手動で変更しました。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()

事前にお詫び申し上げます。これが最も簡単なことだと思いますが、矩形パルスの作成方法に関する参考文献が見つかりませんでした。

4

1 に答える 1

2

畳み込みを非常にうまくプロットし、それを分析して、それが期待したものではないことを確認しました, +1! ただ、ご懸念は機能に関係していると思いますconvolve。パラメータを渡したので、mode="same"ゼロに等しい畳み込みの部分を切り落とし、「興味深い」部分を残します。あなたはrect()関数をうまく構築しましたが、scipyのどこかに別の方法が組み込まれている必要があることに同意します。畳み込み全体をプロットできるようにすると、次のようになります。

畳み込み

このコードから:

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()

この関数のドキュメントを考えると、これは私が期待することです。他に見逃したものがある場合はお知らせください。

于 2012-03-05T14:51:00.820 に答える