Свертка с использованием функции conv () в Matlab - PullRequest
0 голосов
/ 27 октября 2018

Это дополнительный вопрос этот вопрос .

Согласно документации ,

len(output) = len(input) + len(kernel) - 1

Итак, я разобрался

  • В случае conv(u,v,"full"):

    len(pad) = len(kernel) - 1
    

Например, согласно командной строке Matlab:

    u = [1 2 1 3]
    v = [2 0 1]
    w = [2 4 3 8 1 3]

Coz,

    len(w) = len(u) + len(v) - 1 
           = 4 + 3 - 1 
           = 6 

    len(pad) = len(v) - 1
             = 3 - 1
             = 2

Итак, согласно расчету:

0 0 1 2 1 3 0 0
1 0 2
---------------
0 0 2 = 2

. . . . . .
. . . . . .

0 0 1 2 1 3 0 0
          1 0 2
-------------------
          3 0 0 = 3
  • В случае conv(u,v,"same"):

    u = [1 2 1 3]
    v = [2 0 1]
    w = [4 3 8 1]
    

Coz,

    len(w) = len(u) 
           = 4 

    len(pad) = floor(len(v) / 2)
             = floor(3 / 2)
             = 1

Итак, согласно расчету:

0 1 2 1 3 0
1 0 2
-----------
0 0 4 = 4

. . . . . .
. . . . . .

0 1 2 1 3 0
      1 0 2
---------------
      1 0 0 = 1     

Но проблема возникает в случае следующего примера:

    u = [1 2 1 3 1]
    v = [2 0 1 0]

Следующий в порядке:

  • В случае conv(u,v,"full"):

    w = [2 4 3 8 3 3 1 0]       
    
    len(w) = len(u) + len(v) - 1 
           = 5 + 4 - 1 
           = 8 
    
    len(pad) = len(v) - 1
             = 4 - 1
             = 3
    

Итак,

0 0 0 1 2 1 3 1 0 0 0
0 1 0 2
---------------------
0 0 0 2 = 2

. . . . .
. . . . .

0 0 0 1 2 1 3 1 0 0 0
              0 1 0 2
---------------------------
              0 0 0 0 = 0

Но, у следующего есть проблемы:

  • В случае conv(u,v,"same"):

    w = [3 8 3 3 1]
    

Coz,

    len(w) = len(u) 
           = 5 

    len(pad) = floor(len(v) / 2)
             = floor(4 / 2)
             = 2

Итак, согласно расчету:

0 0 1 2 1 3 1 0 0
0 1 0 2
---------------
0 0 0 4 = 4

0 0 1 2 1 3 1 0 0
  0 1 0 2
---------------
  0 1 0 2 = 3

0 0 1 2 1 3 1 0 0
    0 1 0 2
---------------
    0 2 0 6 = 8

0 0 1 2 1 3 1 0 0
      0 1 0 2
-----------------
      0 1 0 2 = 3

0 0 1 2 1 3 1 0 0
        0 1 0 2
-------------------
        0 3 0 0 = 3

0 0 1 2 1 3 1 0 0
          0 1 0 2
-------------------
          0 1 0 0 = 1

т.е. output = [4 3 8 3 3 1], что не соответствует выходу Matlab.

Что здесь происходит?

...