數字訊號處理中講到圓周卷積,試著寫了下matlab程式。
根據圓周卷積的公式:
x1(m)不需要變,痛點是我們如何將x2((n-m))表示出來,既要沿著y軸反轉,還要周期拖延,並且用矩形序列將0-N-1數去讀取出來就ok了。
靈活運用了mod函數的功能,就可以達到目的。
這裡順便說下mod與rem的區別,對於整數和0,mod與rem是完全一樣的,但對於負數就有區別了,區別在於它們的定義:
rem(X,Y) if Y~= 0, returns X - n.*Y where n= fix(X./Y)
mod(X,Y) if Y~= 0, returns X - n.*Y where n= floor(X./Y)
通過例子就可以明白點:
mod(4,3)=1 rem(4,3)=1
mod(4,-3)=2 rem(4,-3)=1
mod(-4,3)=-1 rem(-4,3)=-1
mod(-4,-3)=-2 rem(-4,-3)=-1
為了將x軸0-4對應值為x=[1 2 3 4 5]反轉成-4-0的對應值[5 4 3 2 1],周期拓延為0-4的y=[1 5 4 3 2]就可以應用mod函數
因為矩陣的下表為1不是0,所以
y=x(mod(-[0:4],5)+1);便達到了目的也就是y=x(1 5 4 3 2);
同樣的y=x(abs(mod([0:4],-5))+1)也是可以的,而對於rem就沒有那麼方便了。
這樣就是n=0情況
而n=1是y=x(mod([0:4]-1,5)+1);
同理n=2是y=x(mod([0:4]-2,5)+1);......
剩下的就各自相乘,然後相加就好了,或用rem,mod!
另外畫圖的時間,發現一些對座標軸的操作還是挺有用的,上網搜了搜,總結下有用的:
1.僅僅想讓座標軸顯示XXXX
set(gca,'Xtick',[0:1:N]);或讓特定的數字顯示 set(gca,'Xtick',[a b c d]);或set(gca,'xtivklabel',{'a','b','c'});甚至也可以是
set(gca,'xticklabel',sprintf(' ',get(gca,'xtick')));
2.讓座標軸有如同尺子一樣的小格子,set(gca,'xminortick','on')還可以決定該tick的方向向外還是向內set(gca,'tickdir','out/in');
該tick的長度set(gca,'ticklength',[A B])(這裡沒搞清楚的是B代表什嗎?A是長度)。
3.反轉座標軸以及座標軸的位置
set(gca,'xdir',reverse)
將x軸放在上面且y軸左邊之類等等的
set(gca,'xaxisLocation','top') set(gca,'yaxisLocation','right')
4一些座標軸需要協商數學公式以及上下座標之類的。
a的下標:a_{} a的上標:a^{}
latex挺好的一個總結,這裡