转 matlab卷积函数介绍 conv filter conv2
最近在做控制算法實(shí)現(xiàn)的時候,對于其中參雜的各種差分、卷積很頭疼,就在網(wǎng)上搜集了些資料,匯總于此,以做備忘。
在MATLAB中,可以用函數(shù)y=filter(p,d,x)實(shí)現(xiàn)差分方程的仿真,也可以用函數(shù) y=conv(x,h)計(jì)算卷積。
(1)即y=filter(p,d,x)用來實(shí)現(xiàn)差分方程,d表示差分方程輸出y的系數(shù),p表示輸入x的系數(shù),而x表示輸入序列。輸出結(jié)果長度數(shù)等于x的長度。
實(shí)現(xiàn)差分方程,先從簡單的說起:
filter([1,2],1,[1,2,3,4,5]),實(shí)現(xiàn)y[k]=x[k]+2*x[k-1]
y[1]=x[1]+2*0=1 (x[1]之前狀態(tài)都用0)
y[2]=x[2]+2*x[1]=2+2*1=4
(2)y=conv(x,h)是用來實(shí)現(xiàn)卷級的,對x序列和h序列進(jìn)行卷積,輸出的結(jié)果個數(shù)等于x的長度與h的長度之和減去1。
卷積公式:z(n)=x(n)*y(n)= ∫x(m)y(n-m)dm.
程序一:以下兩個程序的結(jié)果一樣
(1)
h = [3 2 1 -2 1 0 -4 0 3]; % impulse responsex = [1 -2 3 -4 3 2 1]; % input sequencey = conv(h,x);n = 0:14;subplot(2,1,1);stem(n,y);xlabel('Time index n'); ylabel('Amplitude');title('Output Obtained by Convolution'); grid;(2)
x1 = [x zeros(1,8)];y1 = filter(h,1,x1);subplot(2,1,2);stem(n,y1);xlabel('Time index n'); ylabel('Amplitude'); title('Output Generated by Filtering'); grid;程序二:filter和conv的不同
x=[1,2,3,4,5];h=[1,1,1];y1=conv(h,x)y2=filter(h,1,x)y3=filter(x,1,h)結(jié)果:y1 = 1 3 6 9 12 9 5y2 = 1 3 6 9 12? y3 = 1 3 6可見:filter函數(shù)y(n)是從n=1開始,認(rèn)為所有n<1都為0;而conv是從卷積公式計(jì)算,包括n<1部分。
因此filter 和conv 的結(jié)果長短不同程序三:濾波后信號幅度的變化
num=100; %總共1000個數(shù) x=rand(1,num); %生成0~1隨機(jī)數(shù)序列 x(x>0.5)=1; x(x<=0.5)=-1; h1=[0.2,0.5,1,0.5,0.2]; h2=[0,0,1,0,0];y1=filter(h1,1,x);y2=filter(h2,1,x);n=0:99;subplot(2,1,1);stem(n,y1);subplot(2,1,2); stem(n,y2);MATLAB中提供了卷積運(yùn)算的函數(shù)命令conv2,其語法格式為:
C = conv2(A,B)
C = conv2(A,B)返回矩陣A和B的二維卷積C。若A為ma×na的矩陣,B為mb×nb的矩陣,則C的大小為(ma+mb-1)×(na+nb-1)。
例:
A=magic(5) A = 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 >> B=[1 2 1 ;0 2 0;3 1 3] B = 1 2 1 0 2 0 3 1 3 >> C=conv2(A,B) C = 17 58 66 34 32 38 15 23 85 88 35 67 76 16 55 149 117 163 159 135 67 79 78 160 161 187 129 51 23 82 153 199 205 108 75 30 68 135 168 91 84 9 33 65 126 85 104 15 27MATLAB圖像處理工具箱提供了基于卷積的圖象濾波函數(shù)filter2,filter2的語法格式為:
Y = filter2(h,X)
其中Y = filter2(h,X)返回圖像X經(jīng)算子h濾波后的結(jié)果,默認(rèn)返回圖像Y與輸入圖像X大小相同。例如:
其實(shí)filter2和conv2是等價的。MATLAB在計(jì)算filter2時先將卷積核旋轉(zhuǎn)180度,再調(diào)用conv2函數(shù)進(jìn)行計(jì)算。
Fspecial函數(shù)用于創(chuàng)建預(yù)定義的濾波算子,其語法格式為:
參數(shù)type制定算子類型,parameters指定相應(yīng)的參數(shù),具體格式為:
type=’average’,為均值濾波,參數(shù)為n,代表模版尺寸,用向量表示,默認(rèn)值為[3,3]。
type= ‘gaussian’,為高斯低通濾波器,參數(shù)有兩個,n表示模版尺寸,默認(rèn)值為[3,3],sigma表示濾波器的標(biāo)準(zhǔn)差,單位為像素,默認(rèn)值為0.5
總結(jié)
以上是生活随笔為你收集整理的转 matlab卷积函数介绍 conv filter conv2的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux C函数之时间函数
- 下一篇: 利用matlab实现卷积实验报告,mat