Professional Documents
Culture Documents
DIRAC e Convolution
DIRAC e Convolution
Back
Convolution
Convolutionisthemostimportantandfundamentalconceptinsignalprocessingandanalysis.Byusingconvolution,wecan
constructtheoutputofsystemforanyarbitraryinputsignal,ifweknowtheimpulseresponseofsystem.
Howisitpossiblethatknowingonlyimpulseresponseofsystemcandeterminetheoutputforanygiveninputsignal?Wewillfindout
themeaningofconvolution.
RelatedTopics:WindowFilters
Download:conv1d.zip,conv2d.zip
Definition
ImpulseFunctionDecomposition
ImpulseResponse
BacktotheDefinition
Convolutionin1D
C++ImplementationforConvolution1D
Convolutionin2D
SeparableConvolution2D
C++AlgorithmforConvolution2D
Definition
First,let'sseethemathematicaldefinitionofconvolutionindiscretetimedomain.Laterwewillwalkthroughwhatthisequationtells
us.
(Wewilldiscussindiscretetimedomainonly.)
wherex[n]isinputsignal,h[n]isimpulseresponse,andy[n]isoutput.*denotesconvolution.Noticethatwemultiplythetermsofx[k]
bythetermsofatimeshiftedh[n]andaddthemup.
Thekeystoneofunderstandingconvolutionislaidbehindimpulseresponseandimpulsedecomposition.
ImpulseFunctionDecomposition
Inordertounderstandthemeaningofconvolution,wearegoingtostartfromtheconceptofsignaldecomposition.Theinputsignal
isdecomposedintosimpleadditivecomponents,andthesystemresponseoftheinputsignalresultsinbyaddingtheoutputofthese
componentspassedthroughthesystem.
Ingeneral,asignalcanbedecomposedasaweightedsumofbasissignals.Forexample,inFourierSeries,anyperiodicsignal
(evenrectangularpulsesignal)canberepresentedbyasumofsineandcosinefunctions.Buthere,weuseimpulse(delta)functions
forthebasissignals,insteadofsineandcosine.
Examinethefollowingexamplehowasignalisdecomposedintoasetofimpulse(delta)functions.Sincetheimpulsefunction,[n]
is1atn=0,andzerosatn0.x[0]canbewrittento2[n].And,x[1]willbe3[n1],because[n1]is1atn=1andzerosatothers.In
sameway,wecanwritex[2]byshifting[n]by2,x[2]=1[n2].Therefore,thesignal,x[n]canberepresentedbyadding3shifted
andscaledimpulsefunctions.
Ingeneral,asignalcanbewrittenassumofscaledandshifteddeltafunctions
ImpulseResponse
Impulseresponseistheoutputofasystemresultingfromanimpulsefunctionasinput.
Anditisdenotedash[n].
http://www.songho.ca/dsp/convolution/convolution.html 1/7
20/08/2015 Convolution
Ifthesystemistimeinvariant,theresponseofatimeshiftedimpulsefunctionisalsoshiftedassameamountoftime.
Forexample,theimpulseresponseof[n1]ish[n1].Ifweknowtheimpulseresponseh[n],thenwecanimmediatelygettheimpulse
responseh[n1]byshiftingh[n]by+1.Consequently,h[n2]resultsfromshiftingh[n]by+2.
Ifthesystemislinear(especiallyscalarrule),ascaledininputsignalcausesanidenticalscalingintheoutputsignal.
Forinstance,theimpulseresponseof3[n]isjustmultiplyingby3toh[n].
Iftheinputhas3components,forexample,a[n]+b[n1]+c[n2],thentheoutputissimplyah[n]+bh[n1]+ch[n2].Thisiscalled
additivepropertyoflinearsystem,thus,itisvalidonlyonthelinearsystem.
BacktotheDefinition
Bycombiningthepropertiesofimpulseresponseandimpulsedecomposition,wecanfinallyconstructtheequationofconvolution.In
linearandtimeinvariantsystem,theresponseresultingfromseveralinputscanbecomputedasthesumoftheresponseseachinput
actingalone.
Forexample,ifinputsignalisx[n]=2[n]+3[n1]+1[n2],thentheoutputissimplyy[n]=2h[n]+3h[n1]+1h[n2].
Therefore,wenowclearlyseethatiftheinputsignalis ,thentheoutputwillbe
.Noteoneconditionconvolutionworksonthelinearandtimeinvariantsystem.
Tosummarize,asignalisdecomposedintoasetofimpulsesandtheoutputsignalcanbecomputedbyaddingthescaledand
shiftedimpulseresponses.
Furthermore,thereisanimportantfactunderconvolutiontheonlythingweneedtoknowaboutthesystem'scharacteristicsisthe
impulseresponseofthesystem,h[n].Ifweknowasystem'simpulseresponse,thenwecaneasilyfindouthowthesystemreactsfor
anyinputsignal.
Convolutionin1D
Let'sstartwithanexampleofconvolutionof1dimensionalsignal,thenfindouthowtoimplementintocomputerprogramming
algorithm.
x[n]={3,4,5}
h[n]={2,1}
x[n]hasonlynonzerovaluesatn=0,1,2,andimpulseresponse,h[n]isnotzeroatn=0,1.Otherswhicharenotlistedareallzeros.
http://www.songho.ca/dsp/convolution/convolution.html 2/7
20/08/2015 Convolution
Input:x[n] ImpulseResponse:h[n]
Onethingtonotebeforewemoveon:Trytofigureoutyourselfhowthissystembehaves,byonlylookingattheimpulseresponseof
thesystem.Whentheimpulsesignalisenteredthesystem,theoutputofthesystemlookslikeamplifierandechoing.Atthetimeis
0,theintensitywasincreased(amplified)bydoubleandgraduallydecreasedwhilethetimeispassed.
Fromtheequationofconvolution,theoutputsignaly[n]willbe .
Let'scomputemanuallyeachvalueofy[0],y[1],y[2],y[3],...
Noticethaty[0]hasonlyonecomponent,x[0]h[0],andothersareomitted,becauseothersareall
zerosatk0.Inotherwords,x[1]h[1]=x[2]h[2]=0.Theaboveequationsalsoomitthetermsif
theyareobviouslyzeros.
Ifnislargerthanandequalto4,y[n]willbezeros.Sowestopheretocomputey[n]andadding
these4signals(y[0],y[1],y[2],y[3])producestheoutputsignaly[n]={6,11,14,5}.
Output:y[n]
Let'slookmorecloselytheeachoutput.Inordertoseeapatternclearly,theorderofadditionisswapped.Thelasttermcomesfirst
andthefirsttermgoestothelast.And,allzerotermsareignored.
y[0]=x[0]h[0]
y[1]=x[1]h[0]+x[0]h[1]
y[2]=x[2]h[0]+x[1]h[1]
y[3]=x[3]h[0]+x[2]h[1]
Canyouseethepattern?Forexample,y[2]iscalculatedfrom2inputsamplesx[2]andx[1],and2impulseresponsesamplesh[0]
andh[1].Theinputsamplestartsfrom2,whichissameasthesamplepointofoutput,anddecreased.Theimpulseresponsesample
startsfrom0andincreased.
Basedonthepatternthatwefound,wecanwriteanequationforanysampleoftheoutput
whereiisanysamplepointandkisthenumberofsamplesinimpulseresponse.
Forinstance,ifanimpulseresponsehas4samples,thesampleofoutputsignalat9is
y[9]=x[9]h[0]+x[8]h[1]+x[7]h[2]+x[6]h[3]
Noticethefirstsample,y[0]hasonlyoneterm.Basedonthepatternthatwefound,y[0]iscalculatedas:
y[0]=x[0]h[0]+x[1]h[1].Becausex[1]isnotdefined,wesimplypadittozero.
C++ImplementationforConvolution1D
Implementingtheconvolutionalgorithmisquitesimple.Thecodesnippetisfollowing
http://www.songho.ca/dsp/convolution/convolution.html 3/7
20/08/2015 Convolution
for(i=0;i<sampleCount;i++)
{
y[i]=0;//settozerobeforesum
for(j=0;j<kernelCount;j++)
{
y[i]+=x[ij]*h[j];//convolve:multiplyandaccumulate
}
}
However,youshouldconcernseveralthingsintheimplementation.
Watchouttherangeofinputsignal.Youmaybeoutofboundofinputsignal,forexample,x[1],x[2],andsoon.Youcanpadzeros
forthoseundefinedsamples,orsimplyskiptheconvolutionattheboundary.Theresultsattheboththebeginningandendedges
cannotbeaccurateanyway.
Second,youneedroundingtheoutputvalues,iftheoutputdatatypeisintegerandimpulseresponseisfloatingpointnumber.And,
theoutputvaluemaybeexceededthemaximumorminimumvalue.
Ifyouhaveunsigned8bitintegerdatatypeforoutputsignal,therangeofoutputshouldbebetween0and255.Youmustcheckthe
valueisgreaterthantheminimumandlessthanthemaximumvalue.
Downloadthe1Dconvolutionroutineandtestprogram.
conv1d.zip
Convolutionin2D
2Dconvolutionisjustextensionofprevious1Dconvolutionbyconvolvingbothhorizontalandverticaldirectionsin2dimensional
spatialdomain.Convolutionisfrequentlyusedforimageprocessing,suchassmoothing,sharpening,andedgedetectionofimages.
Theimpulse(delta)functionisalsoin2Dspace,so[m,n]has1wheremandniszeroandzerosatm,n0.Theimpulseresponse
in2Disusuallycalled"kernel"or"filter"inimageprocessing.
Thesecondimageis2Dmatrixrepresentationofimpulsefunction.Theshadedcenterpointistheoriginwherem=n=0.
Onceagain,asignalcanbedecomposedintoasumofscaledandshiftedimpulse(delta)functions
Forexample,x[0,0]isx[0,0][m,n],x[1,2]isx[1,2][m1,n2],andsoon.Notethatthematricesarereferencedhereas[column,
row],not[row,column].Mishorizontal(column)directionandNisvertical(row)direction.
And,theoutputoflinearandtimeinvariantsystemcanbewrittenbyconvolutionofinputsignalx[m,n],andimpulseresponse,h[m,
n]
Noticethatthekernel(impulseresponse)in2Discenteroriginatedinmostcases,whichmeansthecenterpointofakernelish[0,0].
Forexample,ifthekernelsizeis5,thenthearrayindexof5elementswillbe2,1,0,1,and2.Theoriginislocatedatthemiddle
ofkernel.
Examineanexampletoclarifyhowtoconvolvein2Dspace.
Let'ssaythatthesizeofimpulseresponse(kernel)is3x3,andit'svaluesarea,b,c,d,...
Noticetheorigin(0,0)islocatedinthecenterofkernel.
Let'spickasimplestsampleandcomputeconvolution,forinstance,theoutputat(1,1)willbe
http://www.songho.ca/dsp/convolution/convolution.html 4/7
20/08/2015 Convolution
Itresultsinsumof9elementsofscaledandshiftedimpulseresponses.Thefollowingimageshowsthegraphicalrepresentationof
2Dconvolution.
Noticethatthekernelmatrixisflippedbothhorizontalandvertical
directionbeforemultiplyingtheoverlappedinputdata,becausex[0,0]
ismultipliedbythelastsampleofimpulseresponse,h[1,1].Andx[2,2]
ismultipliedbythefirstsample,h[1,1].
2DConvolution
Exercisealittlemoreabout2Dconvolutionwithanotherexample.Supposewehave3x3kerneland3x3inputmatrix.
Input Kernel Output
ThecompletesolutionforthisexampleishereExampleof2DConvolution
Bytheway,thekernelinthisexampleiscalledSobelfilter,whichisusedtodetectthehorizontaledgelinesinanimage.Seemore
detailsinthewindowfilters.
SeparableConvolution2D
Inconvolution2DwithMNkernel,itrequiresMNmultiplicationsforeachsample.Forexample,ifthekernelsizeis3x3,then,9
multiplicationsandaccumulationsarenecessaryforeachsample.Thus,convolution2Disveryexpensivetoperformmultiplyand
accumulateoperation.
However,ifthekernelisseparable,thenthecomputationcanbereducedtoM+Nmultiplications.
Amatrixisseparableifitcanbedecomposedinto(M1)and(1N)matrices.
Forexample
And,convolutionwiththisseparablekernelisequivalentto
(ProofofSeparableConvolution2D)
Asaresult,inordertoreducethecomputation,weperform1Dconvolutiontwiceinsteadof2Dconvolutionconvolvewiththeinput
andM1kernelinverticaldirection,thenconvolveagainhorizontaldirectionwiththeresultfromthepreviousconvolutionand1N
kernel.Thefirstvertical1DconvolutionrequiresMtimesofmultiplicationsandthehorizontalconvolutionneedsNtimesof
http://www.songho.ca/dsp/convolution/convolution.html 5/7
20/08/2015 Convolution
multiplications,altogether,M+Nproducts.
However,theseparable2Dconvolutionrequiresadditionalstorage(buffer)tokeepintermediatecomputations.Thatis,ifyoudo
vertical1Dconvolutionfirst,youmustpreservetheresultsinatemporarybufferinordertousethemforhorizontalconvolution
subsequently.
Noticethatconvolutionisassociativetheresultissame,eveniftheorderofconvolutionischanged.So,youmayconvolve
horizontaldirectionfirstthenverticaldirectionlater.
Gaussiansmoothingfilterisawellknownseparablematrix.Forexample,3x3Gaussianfilteris
3x3GaussianKernel
C++AlgorithmforConvolution2D
Weneed4nestedloopsfor2Dconvolutioninsteadof2loopsin1Dconvolution.
//findcenterpositionofkernel(halfofkernelsize)
kCenterX=kCols/2;
kCenterY=kRows/2;
for(i=0;i<rows;++i)//rows
{
for(j=0;j<cols;++j)//columns
{
for(m=0;m<kRows;++m)//kernelrows
{
mm=kRows1m;//rowindexofflippedkernel
for(n=0;n<kCols;++n)//kernelcolumns
{
nn=kCols1n;//columnindexofflippedkernel
//indexofinputsignal,usedforcheckingboundary
ii=i+(mkCenterY);
jj=j+(nkCenterX);
//ignoreinputsampleswhichareoutofbound
if(ii>=0&&ii<rows&&jj>=0&&jj<cols)
out[i][j]+=in[ii][jj]*kernel[mm][nn];
}
}
}
}
Theabovesnippetcodeissimpleandeasiestwaytounderstandhowconvolutionworksin2D.Butitmaybetheslowest
implementation.
Takealookatarealexampleconvolutionwith256x256imageand5x5Gaussianfilter.
http://www.songho.ca/dsp/convolution/convolution.html 6/7
20/08/2015 Convolution
Thesourceimageisuncompressedraw,8bit(unsignedchar)grayscaleimage.Andagain,Gaussiankernelisseparable
5x5GaussianKernel
Onmysystem(AMD643200+2GHz),normalconvolutiontookabout10.3msandseparableconvolutiontookonly3.2ms.Youcan
seehowmuchseparableconvolutionisfastercomparedtonormalconvolution.
Download2Dconvolutionapplicationandsourcecodehere:conv2d.zip
TheprogramusesOpenGLtorenderimagesonthescreen.
20082014SongHoAhn()
Back
http://www.songho.ca/dsp/convolution/convolution.html 7/7