边缘卷积计算

2022-05-29 10:11:54 浏览数 (1)

代码语言:javascript复制
import numpy as np#导入NumPy工具包,主要用于数组相关操作
#定义一维数组卷积计算函数
def MyConvolve(input,kernel):
    #对h[n]进行180°翻转
    kernel_flipped=np.array([kernel[len(kernel)-1-i] for i in range(len(kernel))])
    len_input=len(input)#x[n]的长度
    len_kernel=len(kernel)#h[n]的长度
    #对输入数组进行零填充来解决卷积计算过程中的边缘对齐
    padding=np.zeros(len_kernel-1,dtype='int')#填充数值为0
    temp_pad=np.append(padding,input)#通过数组合并的方式进行填充
    input_pad=np.append(temp_pad,padding)#0填充后的数组
    #定义一个数组保存卷积结果,数组长度为:x[n]的长度 h[n]的长度-1
    con_array=np.array(range(len_input len_kernel-1))#对x[n]与h[n]进行卷积计算
    for m in range(len(con_array)):
        sum_con=0
        for n in range(len(kernel_flipped)):
            sum_con=sum_con input_pad[n m]*kernel_flipped[n]
        con_array[m]=sum_con#输出卷积结果
    print("Input Signal:",input)
    print("Convolution Kernel:",kernel)
    print("Convolution:",con_array)
if __name__=='__main__':
    input=[1,3,5,7,9,11,13]
    kernel=[2,4,6,8]
    kernel_flipped=kernel[::-1]
    MyConvolve(input,kernel)
    MyConvolve(input,kernel_flipped)

Input Signal: [1, 3, 5, 7, 9, 11, 13] Convolution Kernel: [2, 4, 6, 8] Convolution: [ 2 10 28 60 100 140 180 190 166 104] Input Signal: [1, 3, 5, 7, 9, 11, 13] Convolution Kernel: [8, 6, 4, 2] Convolution: [ 8 30 62 100 140 180 220 140 74 26]

算法:边缘卷积计算是在输入信号x[n]的前后部分添加一些采样点并将这些采样点的值皆设为0再进行卷积计算。

0 人点赞