matlab filter2函数怎么用(关于matlab filter这个函数到底怎么用)
本文目录
关于matlab filter这个函数到底怎么用
filter是一维
数字滤波器
使用方法:
Y
=
filter(B,A,X)
,输入X为滤波前序列,Y为滤波结果序列,B/A
提供滤波器系数,B为分子,
A为分母
整个滤波过程是通过下面差分方程实现的:
a(1)*y(n)
=
b(1)*x(n)
+
b(2)*x(n-1)
+
...
+
b(nb+1)*x(n-nb)
-
a(2)*y(n-1)
-
...
-
a(na+1)*y(n-na)
=
filter(B,A,X,Zi),输入X为滤波前
序列
,Y为滤波结果序列,B/A
提供滤波器系数,B为分子,
A为分母,
《Simulink与信号处理》
并输入Zi指定X的初始状态,Zf为最终状态矢量
《Simulink与信号处理》
filter(B,A,X,,DIM)
或
filter(B,A,X,Zi,DIM)指定X的
维数
DIM进行操作
举例
k=-100:100;
》》
uk=;
》》
a=[1
-5
6];
》》
b=[2
-1];
》》
x=uk;
》》
y=filter(b,a,x)
用MATLAB怎么实现离散信号的卷积啊 编程
在MATLAB中,可以用函数y=filter(p,d,x)实现差分方程的仿真,也可以用函数 y=conv(x,h)计算卷积。
(1)即y=filter(p,d,x)用来实现差分方程,d表示差分方程输出y的系数,p表示输入x的系数,而x表示输入序列。输出结果长度数等于x的长度。
实现差分方程,先从简单的说起:
filter(
y之前状态都用0)
y=2+2*1=4
(2)y=conv(x,h)是用来实现卷级的,对x序列和h序列进行卷积,输出的结果个数等于x的长度与h的长度之和减去1。
卷积公式:z(n)=x(n)*y(n)= ∫x(m)y(n-m)dm.
程序一:以下两个程序的结果一样
(1)h = ; % impulse resp***e
x = ; % input sequence
y = 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 = ;
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=;
h=;
y1=conv(h,x)
y2=filter(h,1,x)
y3=filter(x,1,h)
结果:y1 = 1 3 6 9 12 9 5
y2 = 1 3 6 9 12
y3 = 1 3 6
可见:filter函数y(n)是从n=1开始,认为所有n《1都为0;而conv是从卷积公式计算,包括n《1部分。
因此filter 和conv 的结果长短不同
程序三:滤波后信号幅度的变化
num=100; %总共1000个数
x=rand(1,num); %生成0~1随机数序列
x(x》0.5)=1;
x(x《=0.5)=-1;
h1=;
h3=;
y1=filter(h1,1,x);
y2=filter(h3,1,x);
n=0:99;
subplot(2,1,1);
stem(n,y1);
subplot(2,1,2);
stem(n,y2);
MATLAB中提供了卷积运算的函数命令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=
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 27
MATLAB图像处理工具箱提供了基于卷积的图象滤波函数filter2,filter2的语法格式为:
Y = filter2(h,X)
其中Y = filter2(h,X)返回图像X经算子h滤波后的结果,默认返回图像Y与输入图像X大小相同。例如:
其实filter2和conv2是等价的。MATLAB在计算filter2时先将卷积核旋转180度,再调用conv2函数进行计算。
Fspecial函数用于创建预定义的滤波算子,其语法格式为:
h = fspecial(type)
h = fspecial(type,parameters)
参数type制定算子类型,parameters指定相应的参数,具体格式为:
type=’average’,为均值滤波,参数为n,代表模版尺寸,用向量表示,默认值为。
type= ’gaussian’,为高斯低通滤波器,参数有两个,n表示模版尺寸,默认值为,sigma表示滤波器的标准差,单位为像素,默认值为0.5
用matlab频域低通滤波,频域高通滤波处理彩色图像的程序
程序如下:
clear all;
clc;
I=imread(’up4-Amp.png’);
OutImg=I;
R=I(:,:,1);
G=I(:,:,2);
B=I(:,:,3);
R=medfilt2(R,);
G=medfilt2(G,);
B=medfilt2(B,);
I1=cat(3,R,G,B); % 对彩色图像R,G,B三个通道分别进行3×3模板的中值滤波 cat函数用于连接两个矩阵或数组
R=filter2(fspecial(’average’,3),R)/255;
G=filter2(fspecial(’average’,3),G)/255;
B=filter2(fspecial(’average’,3),B)/255;
I2= cat(3,R,G,B); %对彩色图像R,G,B三个通道分别进行3×3模板的均值滤波
figure,imshow(I);
title(’原图’)
figure,
imshow(I1);
title(’中值滤波’)
figure,imshow(I2);
title(’均值滤波’)
扩展资料:
注意事项
1、在频域滤波,由于是点乘,所以滤波模板矩阵和图像矩阵必须尺寸一样。
2、因为尺寸一样,它们的原点必须要对齐。
3、因在进行离散傅里叶变换后,在频域点乘,相当于在时域卷积,但是这个时候实际上是对时域周期矩阵进行卷积。直接在时域卷积,matlab默认是在边界补0。
4、Matlab freqz2()这个函数可以自动得到一个指定尺寸的,对应于时域的频域模板。
5、图像经过傅里叶变换后,它的原点在左上角。而模板经过freqz2后,原点在中心,所以只要平移其中的一个就好了。
6、在对原图像进行傅里叶变换之前,按照一定规则补0就好了。
解释一下matlab里的fir2函数
fir2(n,f,m)
函数fir2用来设计多通带任意响应FIR滤波器,该滤波器的幅频特性由向量对f和m确定,f为归一化频率向量,m为对应频率点上的幅度。当设计的滤波器在频率为π的幅度响应不是0时,滤波器的阶数n为偶数;