循环卷积python代码

zhuxianfeng 2020-06-01

     最近舍友要写一份与循环卷积有关的报告,但是发现网上的都是matlab的循环卷积的代码,没有找到python的循环卷积代码,于是我就直接根据原理帮舍友用python实现了这个。

     用的序列是x1=[1,2,3,4],x2=[1,1,1,1,0,0,0,0],以下是x1和x2的循环卷积的结果图。

循环卷积python代码

     话不多说,放代码了!

# -*- coding:utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
#x1=[6,5,6,3,5,7,0,1]
#x2=[7,1,2,9,4,3,20,1,2,3,5]
x1=[1,2,3,4]
x2=[1,1,1,1,0,0,0,0]

#确定循环卷积序列的长度N
N=max(len(x1),len(x2))

#补0
if len(x1)>len(x2):
    for i in range(len(x2),len(x1)):
        x2.append(0)
else:
    for i in range(len(x1),len(x2)):
        x1.append(0)

#序列x1周期延拓,以y轴为对称轴对称变换,截取0~N-1的序列
temp_x1=[]
temp_x1.append(x1[0])
for i in range(1,len(x1)):
    temp_x1.append(x1[N-i])
print(temp_x1)

#针对变化后的x1进行0~N-1的循环移动,获得一个N*N的cycle_matrix矩阵
x1=temp_x1
cycle_matrix=[]
cycle_matrix.append(x1)
for step in range(1,N):
    temp=[]
    for i in range(0,N):
        temp.append(0)
    for i in range(0,N):
        temp[(i+step)%N]=x1[i]
    cycle_matrix.append(temp)
print(cycle_matrix)

#矩阵相乘,获得循环卷积结果序列result
cycle_matrix=np.array(cycle_matrix)
x2=np.array(x2)
result=np.matmul(cycle_matrix,np.transpose(x2))
result=list(result)
nnum=[]
for i in range(0,N):
    nnum.append(i)
print(result,nnum)

#画图
plt.bar (nnum,result,width=0.04,color =‘r‘)
plt.xlabel (‘n‘)
plt.ylabel (‘y‘)
plt.title (‘result‘)
plt.show ()

相关推荐