范文一:卷积计算
实验二卷积计算及定理
一、 授课目的
利用卷积方法观察分析信号、系统的频谱特性
二、授课内容
1、卷积计算
在MATLAB 中,提供了卷积函数conv ,即y=conv(x,h),调用十分方便。 n=1:50; % 定义序列的长度是50
hb=zeros(1,50); % 注意:MA TLAB 中数组下标从1 开始 hb(1)=1; hb(2)=2.5; hb(3)=2.5; hb(4)=1;
close all;
subplot(3,1,1);stem(hb);title('系统hb[n]');
m=1:50; % 定义序列的长度
T=0.001; % 定义序列的采样率
A=444.128; %设置信号有关的参数
a=50*sqrt(2.0)*pi;
w0=50*sqrt(2.0)*pi;
x=A*exp(-a*m*T).*sin(w0*m*T); %pi 是MATLAB 定义的π,信号乘可采用“.* ” subplot(3,1,2);stem(x);title('输入信号x[n]');
y=conv(x,hb);
subplot(3,1,3);stem(y);title('输出信号y[n]');
2、卷积定律验证
(1)
n=1:50; % 定义序列的长度是50
hb=zeros(1,50); % 注意:MA TLAB 中数组下标从1 开始 hb(1)=1; hb(2)=2.5; hb(3)=2.5; hb(4)=1;
m=1:50; % 定义序列的长度
T=0.001; % 定义序列的采样率
A=444.128; %设置信号有关的参数
a=50*sqrt(2.0)*pi;
w0=50*sqrt(2.0)*pi;
x=A*exp(-a*m*T).*sin(w0*m*T); %pi 是MATLAB 定义的π,信号乘可采用“.* ” y=conv(x,hb);
k=-25:25;
X=x*(exp(-j*pi/12.5)).^(n'*k);
magX=abs(X); % 绘制x(n) 的幅度谱
subplot(3,2,1);stem(magX);title('入信号的幅度谱');
angX=angle(X); % 绘制x(n) 的相位谱
subplot(3,2,2);stem(angX) ; title ('输入信号的相位谱')
Hb=hb*(exp(-j*pi/12.5)).^(n'*k);
magHb=abs(Hb); % 绘制hb(n) 的幅度谱
subplot(3,2,3);stem(magHb);title('系统响应的幅度谱');
angHb=angle(Hb); % 绘制hb(n) 的相位谱
subplot(3,2,4);stem(angHb) ; title ('系统响应的相位谱') ;
n=1:99; k=1:99;
Y=y*(exp(-j*pi/12.5)).^(n'*k);
magY=abs(Y); % 绘制y(n) 的幅度谱
subplot(3,2,5);stem(magY);title('输出信号的幅度谱');
angY=angle(Y); % 绘制y(n) 的相位谱
subplot(3,2,6);stem(angY) ; title ('输出信号的相位谱')
(2)
n=1:50; % 定义序列的长度是50
hb=zeros(1,50); % 注意:MA TLAB 中数组下标从1 开始 hb(1)=1; hb(2)=2.5; hb(3)=2.5; hb(4)=1;
m=1:50; % 定义序列的长度
T=0.001; % 定义序列的采样率
A=444.128; %设置信号有关的参数
a=50*sqrt(2.0)*pi;
w0=50*sqrt(2.0)*pi;
x=A*exp(-a*m*T).*sin(w0*m*T); %pi 是MATLAB 定义的π,信号乘可采用“.* ” y=conv(x,hb);
k=-25:25;
X=x*(exp(-j*pi/12.5)).^(n'*k);
Hb=hb*(exp(-j*pi/12.5)).^(n'*k);
n=1:99; k=1:99;
Y=y*(exp(-j*pi/12.5)).^(n'*k);
XHb=X.*Hb;
Subplot(2,1,1);stem(abs(XHb));title('x(n)的幅度谱与hb(n)幅度谱相乘');
Subplot(2,1,2);stem(abs(Y));title('y(n)的幅度谱');
范文二:MATLAB计算卷积
本 科 实 验 报 告
学 员:学培养类型:专 业:指导教员:实 验 室:实验名称: 号:
技术类 年 级: 2008级
电子工程 所属学院:电子科学与工程学院 职 称: 教授 实验日期: 2010年12月23日
国防科学技术大学训练部制
实验一 MATLAB 计算卷积
一. 实验目的
通过MATLAB 卷积程序的编写, 学会使用计算机软件编程来处理信号(即信号的采样与计算) 并进一步了解信号卷积计算的方法与步骤, 以更好地理解信号与系统课程知识理论,加强理论与实践的结合。 二. 实验要求
使用MATLAB 编写主程序和卷积函数,实现两个信号的卷积运算。要求:
1. 程序必须对任意两个函数信号都适用; 2. 结果必须是至少两个信号的卷积。 三. 实验平台
笔记本电脑 MATLAB 软件平台 四. 实验原理
信号卷积的计算公式为
c (t ) =f (t ) *g (t ) =
?
∞-∞
f (τ) g (t -τ) d τ
可通过图形变换的方法来计算两个信号的卷积。 用图解法求解卷积的步骤是:翻转、滑动、相乘、积分。 a. 确定卷积结果的分段时限; b. 确定每段中积分的上下限;
c. 确定每段中积分函数的表达式具体实现如下图
五. 实验内容
对于信号
?exp(2πf 0t +πkt 2) 0≤t ≤τ
s 0(t ) =?
0 other? Pair 1: s (t ) = s 0(t -τ) + s 0(t -1. 5τ) g (t ) =s 0(t )
where f 0=1. 0?10H z , τ=10?10
7
-6
*
s , k =2. 0?10M H z /s
6
计算其卷积 六. 实验分析
(1)根据题目要求输入信号,观察信号和卷积结果的波形表示。 信号f 的波形为
function f
21.5
10.50-0.5-1-1.5-2
00.20.40.60.811.2x 10
-5
信号g 的波形为
function g
10.8
0.60.40.20-0.2-0.4-0.6-0.8-10
0.2
0.4
0.6
0.8
1
1.2x 10
-5
卷积结果的波形为
the result of conv
-50
-100
-150
-200
-250
-300
00.511.522.5x 10
-5
由图形可知,卷积后结果信号的长度为两输入信号长度之和;且卷积结果(经db 转换)每一点都是两输入信号翻转平移后重叠区域的面积。
说明卷积函数编写正确,卷积结果波形符合理论。 七. 学习心得
通过编写MATLAB 程序计算卷积,使我对信号之间计算卷积的方法和步骤有了更深的理解。同时这次实验使我对MATLAB 这一数学软件有了进一步的理解,它除了功能强大且语言简单易懂外,尤其适合对信号的处理和计算。此次实验告诉我们在动手计算解决问题的同时要学会运用功能强大的计算机软件来解决问题并做仿真验证以进一步研究。 八. 程序源码
主程序:%UNTITLED Summary of this function goes here
% Detailed explanation goes here clear all
% Parameters' definition
Tp=10.e-6; % transmitted pulse width fc=1.e+7; % carrier frequency Fs=200.e+6; % sampling frequency kr=2.e+12; % chirp rate
tr=0:1/Fs:Tp; % discrete time array
%Functions' definition
s=exp(j*2*pi*fc*tr+j*pi*kr*(tr).^2);
f=exp(j*2*pi*fc*(tr-Tp)+j*pi*kr*(tr-Tp).^2)+exp(j*2*pi*fc*(tr-1.5*Tp)+j*pi*kr*(tr-1.5*Tp).^2); g=conj(s);
% Processing
y=conv_myself(f,g); y=y/max(y); y=20*log10(abs(y));
% plot result
figure(1); plot(tr,f); title('function f'); figure(2); plot(tr,g); title('function g');
tc=0:1/Fs:2*Tp;
figure(3); plot(tc,y);title('the result of conv'); grid; 卷积程序
function w=conv_myself(f,g) len=length(f)+length(g)-1; fn=zeros(1,len); gn=zeros(1,len); fn(length(g):end)=f; for m=1:length(g)
g1(m)=g(length(g)-m+1); end
gn(1:length(g))=g1; for n=1:len
gn1=circshift(gn,[0,n-1]); w(n)=sum(fn.*gn1); end
范文三:关于卷积计算
这里说到的卷积计算,只是指我们对图像进行某种滤波处理或者是边缘检测、锐化等应用要用到的运算。通常,要进行卷积的话就必须要有一个模板(掩模),这些模板的实际就是在卷积计算是所用到的点乘系数,下面会详细说明。当然,以上说的只是一种理解,而不是卷积本身的概念。下面举例说明一下卷积运算。
假设一图像(矩阵)为:
1 2 3
4 5 6
7 8 9
现在要对其进行锐化,采用用Roberts 算子和Sobel 算子,其中Roberts 算子
采用的计算模板为
,根据其计算公式,以上述中 的图(矩阵)的中间的点(5)为例,该点用Roberts 的模板计算过程如下: g (i , j ) =|f (i +1, j +1) -f (i , j ) |+|f (i +1, j ) -f (i , j +1) |
后的值为6。在计算的时候,只要把矩阵中的点与模板的点一一对应即可:
1 2 3
4 5 6
7 8 9
在要进行处理的点5中,对应模板上的位置,就得出5的系数是-1,6和8的 g(i,j) = |-5 + 9| + |-6 + 8| = 4 + 2 = 6,也就是说,5 这点通过卷积计算之系数是0,9的系数是1(针对x 模板而言,如果是针对y 模板,则5和9的系数是0,6的系数是-1,8的系数是1),然后求两模板运算结果的绝对值之和,参照Robert 算子的公式。
然后到Sobel 算子,它的模板比Roberts 的要复杂一些,但运算的方法是一样的。 ?-101??-1-2-1? ??0?d x =?-202?d =00y ??? ??21??-101???1?
采用上面所说的对应方法,根据dx 和dy ,可得1和7的系数是-1, 4的系
数是-2,6的系数是2,3和9的系数是1,其余为0(针对x 模板),Sobel 算子的Roberts 最大的一个不同就是,前者计算的当前位置是模板的中心位置,后者计算的当前位置是左上角,一般来说,模板采取都是m ×m (m 是奇数),所以大部分模板的计算当前位置都是模板的中心位置(我们接触到的模板就只有Robert 算子不是奇数×奇数的)。至于模板,题目应该会给定,但上面所说到的这两个模板,大家最好还是记一记。而在空间平滑滤波增强中,中值滤波和邻域平均,这两者与卷积的计算有相似之处,但卷积是不同的。其中两者同样具有模板的概念,但中值滤波只是在模板覆盖的点里求中值,领域平均则是求平均值,具体参看书本60页到64页。。
下面是点5进行卷积的结果
g(i,j) = |-1-2×4-7+3+2×6+9 | + |-1 + 7+2×8+9-2×2-3|
=9+24=33
利用上面说到的办法,把矩阵所有的点都进行一次卷积运算,然后得出新的矩阵便是题目的答案。需要说明的一点就是,边缘的点,是不能直接利用模板运算的。
?-101? ? d x =?-202??1 2 3 ??-101??4 5 6
7 8 9
如上图,由于1所处的位置不足以形成一个九宫格,所以这进行计算之前,要先对原图像进行扩展,一般是采用加零法,扩展之后如下:
0 0 0 0 0
0 1 2 3 0
0 4 5 6 0
0 7 8 9 0
0 0 0 0 0
经过扩展之后,1这个点便可以进行计算了。除了加零法,还可以使用复制法,就是说扩展的一圈上的点与边缘的点是一样的,如:
1 1 2 3 3
1 1 2 3 3
4 4 5 6 6
7 7 8 9 9
7 7 8 9 9
然而,在实际应用中,扩展图像会对图像边缘的滤波结果带来一定的不良影响,这种影响会随着模板(掩模)尺寸的增大而加大。因此最好的一个方法还是使滤波模板中心距原图像边缘的距离不小于(n-1)/2个像素或点,这里的n 是指模板的尺寸,如3×3的模板,n 就是3。在考试的时候,如果题目就此情况没有说明要求的话,建议问问老师。
还需要注意的一点就是,任何一点运算后的值只保留在最终结果中,而不是将这个运算结果替代原来的值。例如,5经运算之后的值是33,但对6这点运算时,5这个点取值不是33,它依然取原来的值5。也就是说,卷积运算结果与图像的点的遍历顺序无关。
范文四:利用FFT计算卷积
利用FFT 计算卷积
一.线卷积的作用及定义
线卷积包括卷积积分和卷积和。 1.线卷积的作用
求解线性系统对任意激励信号的零态响应。 2.卷积积分
y (t ) =
?
∞-∞
x (τ) h (t -τ) d τ=x (t ) *h (t )
3.卷积和
离散系统的时域分析是,已知离散系统的初始状态和输入信号(激励),求离散系统的输出(响应),两种方法:递推解法和离散卷积法。
∞
卷积和:y (n ) =
∑
m =-∞
x (m ) h (n -m ) =x (n ) *h (n )
二.圆周卷积的定义
圆周移位:一周期为N 的周期序列, 可视为一主值序列在圆周上的循环移位。周期序列在时间轴上右移m
反时针左移
转称为圆周移位。
时域圆周卷积(循环卷积)
N -1
y (n ) =x (n ) ?h (n ) =
∑
m =0
x (m ) h ((n -m ))N R N (n )
条件:两序列实现圆卷积的条件是:长度相等,如果不相等, 可通过增补零值来使之相等。
特点:卷积求和范围只在0≤m ≤N -1有限区间进行;卷积时不作反褶平移, 而是反褶圆移
步骤:量置换→反褶→圆移→相乘→求和。 三.两者的关系
有限长序列的圆卷积和线卷积的关系
在一般情况下,两序列的圆卷积和线卷积是不相等的,这是因为:线卷积是
平移, 结果长度为L =N 1+N 2-1;而圆卷积是圆移,结果长度为L =N 1
=N 2
。只有
在两卷积的结果长度相时,二者才有相同的结果。解决方法是:在作圆卷积时,通过加零的方法,使两序列的长度都增加到L =N 1+N 2-1,此时,圆卷积的结果和线卷积同。
四.利用FFT 计算卷积
工程实际需要解决的卷积:y (n ) =x (n ) *h (n ) ,但其计算量很大。
而圆卷积为:y (n ) =x (n ) ?h (n ) ,便于采用FFT 算法, 故计算速度快。若将线卷积的两个序列用增补零的方法将长度取为一致,此时两序列的离散线卷积和圆周卷积结果是相等的,这样就则可以通过圆卷积来快速计算线卷积。
1、 利用FFT 计算卷积的步骤
(1)设两序列原长度分别为:N 和M ,将长度增加到L ≥N +M -1(L 为2的整数次幂);
(2)用FFT 法求加长序列的DFT 频谱; (3)计算两序列DFT 频谱的乘积;
(4)用IFFT 求DFT 频谱乘积的逆变换,便得两序列的离散线卷积。
2、分段快速卷积
设x (n ) 为长序列,h (n ) 为短序列,长度为M ,则两序列的离散线卷积可以写成如
y (n ) =x (n ) *h (n ) =
下
N -1
形
2N -1
式
(K +1) n -1
,
∑x (m ) h (N
m =0
-m ) +
∑x (m ) h (N
m =N
-m ) + +
∑x (m ) h (N
m =kN
-m ) +
上述每个子段长度为N 。为便于圆卷积计算,将长度通过补零加长为:L =N +M -1
x (n
0 n h (n
根据各子段x k (n )增补零的部位不一样而分两种算法。
(1) 重叠相加法
在各子段x k (n )的尾部增加M -1 个零,则前一子段的尾部与后一子段的首部有M -1个项是重叠的,对重叠部分的卷积须作相加计算,故称重叠相加法。 (2) 重叠舍去法
该方法是在各子段的首部增加项数, 其中第一子段前部增补M -1个零, 而以后的各子段, 其前部不是增补零, 而是重复利用前一段的后M -1个项。此时, 由于各子段的前M -1个项重复采用了前一子段的后M -1个项,卷积结果会产生局部失真,因此,须将这前M -1个项舍去,故称重叠舍去法。
范文五:用DFT计算线性卷积
实验一. 用DFT计算线性卷积
1( 实验要求
1.1令w(n)为一正弦加白噪声信号,长度为500,h(n)是一个低通FIR滤波器,试用DFT与叠接相加法计算线性卷积。h(n)使用fir1.m设计:
h=fir1(10,0.3,hanning(11)); %设计低通滤波器,得到h(n);
1.2设计一个按照时间抽取的基2快速傅里叶变换(基2FFT-DIT)。
2( 实验原理
w(n)为长序列,将其分解为若干个子序列,利用叠接相加法进行卷积。
设x(n)为一个M点序列,h(n)为一个L点序列,y(n)=x(n)*h(n),即y(n)是x(n)和h(n)的线性卷积,那么y(n)是一(M+L-1)点的序列。又由于DFT对应循环卷积而不是线性卷积,能否用DFT来计算两个序列的线性卷积呢,答案是肯定的。
由DFT的性质有:
xnhnIDFTXkHk()()[()()],,
式中x(n),y(n)都是N点的序列,循环卷积的结果也是N点序列,显然X(k),H(k)也是N点序列,现希望
ynxnhnIDFTXkHkIDFTYk()()()[()()][()],,,, 因为y(h)是(M+L-1)点序列,因此,Y(k)也必须是(M+L-1)点序列,相应的X(k),H(k)也都应当是M+L-1点序列,而且X(K),H(K)对应的时域序列x(n),h(n)也必须是M+L-1点的序列。只有这样,由Y(k)作逆变换所得到的y(n)才能保证x(n)和h(n)的线性卷积,具体步骤如下:
,,1) 对M点序列x(n)及L点序列h(n)分别作扩展,构成新序列,,他们的长度xn()hn()
都是M+L-1点,即
xnnM()0,1,,1,,?,
,xn(),, 0,2nMML,,,?,
hnnL()0,1,,1,,?,
,hn(),, 0,2nLML,,,?,
~,,,,~2) 认为,各是周期序列,的一个周期,周期长度为M+L-1,可得 hn()xn()hn()xn()
,,,ynxnhnNML()()(),1,,,,,
而
,ynynxnhn()()()*(),,
3) 若用DFT求y(n),则
,,,ynynIDFTXkHk()()[()()],,
,,,,Xn()Hn()式中,分别是,的DFT。 xn()hn()
对于长序列的卷积,可以把长序列分成短序列分别作卷积,再按一定的规则首位相加。
相应的方法有叠接相加法和叠接舍去法。
3( 实现代码及结果
h=fir1(10,0.3,hanning(11)); N=500;p=0.05;f=1/16; u=randn(1,N)*sqrt(p); s=sin(2*pi*f*[0:N-1]); x=u(1:N)+s; y=fftfilt(h,x); subplot(211)
plot(x);
subplot(212)
plot(y);
clc;close all;clear;format compact; %输入数据并计算常量
xn=[0,1,2,3,4,5,6,7];%可取任意序列
M=nextpow2(length(xn)), N=2^M, for m=0:N/2-1;%旋转因子指数范围
WN(m+1)=exp(-j*2*pi/N)^m;%计算旋转因子
end
A=[xn,zeros(1,N-length(xn))]; %数据输入
disp('输入到各存储单元的数据:'),disp(A); %数据倒序操作
J=0;%给倒序数赋初值
for I=0:N-1;%按序交换数据和算倒序数
if I
T=A(I+1);A(I+1)=A(J+1);A(J+1)=T;
end
%算下一个倒序数
K=N/2;
while J>=K;
J=J-K;K=K/2;
end
J=J+K;
end
disp('倒序后各存储单元的数据:'),disp(A); %分级按序依次进行蝶形运算
for L=1:M;%分级计算
disp('运算级次:'),disp(L);
B=2^(L-1);
for R=0:B-1;%各级按序蝶算
P=2^(M-L)*R;
for K=R:2^L:N-2;%每序依次计算
T=A(K+1)+A(K+B+1)*WN(P+1);
A(K+B+1)=A(K+1)-A(K+B+1)*WN(P+1);
A(K+1)=T;
end
end
disp('本级运算后各存储单元的数据:'),disp(A); end
disp('输出各存储单元的数据:'),Xk=A,
disp('调用fft函数运算的结果:'),fftxn=fft(xn,N),