实验三 信号卷积的MATLAB实现
实验报告信号卷积实验
一、实验目的1. 理解卷积的概念及其物理意义。
2. 掌握卷积运算的原理和方法。
3. 通过实验加深对卷积运算在实际应用中的理解。
二、实验原理1. 卷积的定义:卷积是一种线性运算,它描述了两个信号在时域上的相互作用。
对于两个连续时间信号f(t)和g(t),它们的卷积定义为:F(t) = ∫f(τ)g(t-τ)dτ其中,F(t)是卷积结果,f(τ)是信号f(t)的任意时刻的值,g(t-τ)是信号g(t)在时刻t-τ的值。
2. 卷积的性质:卷积具有交换律、结合律和分配律等性质。
其中,交换律是指f(t)和g(t)的卷积与g(t)和f(t)的卷积相等;结合律是指三个信号f(t)、g(t)和h(t)的卷积可以分别进行两两卷积后再进行一次卷积;分配律是指一个信号与两个信号的卷积等于该信号分别与两个信号卷积后的和。
三、实验内容1. 实验一:连续时间信号卷积实验(1)选用信号:选取两个连续时间信号f(t)和g(t),其中f(t)为矩形脉冲信号,g(t)为指数衰减信号。
(2)卷积计算:根据卷积的定义,计算f(t)和g(t)的卷积F(t)。
(3)结果分析:观察F(t)的波形,分析卷积结果的物理意义。
2. 实验二:离散时间信号卷积实验(1)选用信号:选取两个离散时间信号f[n]和g[n],其中f[n]为单位阶跃信号,g[n]为矩形脉冲信号。
(2)卷积计算:根据离散时间信号卷积的定义,计算f[n]和g[n]的卷积F[n]。
(3)结果分析:观察F[n]的波形,分析卷积结果的物理意义。
3. 实验三:MATLAB仿真实验(1)选用信号:选取两个连续时间信号f(t)和g(t),其中f(t)为正弦信号,g(t)为余弦信号。
(2)MATLAB编程:利用MATLAB的信号处理工具箱,编写程序实现f(t)和g(t)的卷积运算。
(3)结果分析:观察MATLAB仿真得到的卷积结果,分析其物理意义。
四、实验结果与分析1. 实验一:连续时间信号卷积实验(1)实验结果:通过计算得到f(t)和g(t)的卷积F(t)的波形。
连续时间信号卷积运算的MATLAB实现课程设计
信号与通信综合设计项目题目:连续时间信号的卷积运算学院:电子与信息工程学院专业:通信工程班级:姓名:学号:联系方式:指导教师:报告成绩:摘要卷积积分是信号与系统的时域分析的重要方法之一。
为了对其计算进行一定的简化,本文运用MATLAB的数值计算法通过实例计算,验证了函数的有效性,并且展示了MATLAB在卷积积分方面的优越性。
关键词:MATLAB;卷积积分;信号与系统AbstractConvolution is one of the most important methods of time domain analysis of signals and systems. In order to simplify its calculation, this paper uses MATLAB's numerical calculation method to verify the validity of the function by example calculation, and shows the advantages of MATLAB in convolution integral.Keywords:MATLAB;Convolution points;Signals and systems目录摘要 (I)Abstract (II)目录 ............................................................................................................................................ I II一、设计任务及要求 (1)1.1课程设计目的 (1)1.2 设计要求 (1)1.3应解决问题 (1)二、卷积定义以及原理 (1)三、MATLAB设计卷积仿真 (1)3.1思路 (1)3.2步骤 (2)四、卷积的MATLAB设计源程序 (2)4.1方案一 (2)步骤一:函数sconv编辑如下: (2)步骤二:定义阶跃函数heaviside (3)步骤三:定义主函数 (3)步骤四:结果运行MATLAB后,图形如下: (3)4.2方案二 (4)五、总结 (6)参考文献 (7)谢辞 (8)一、设计任务及要求1.1课程设计目的(1)进一步熟悉常用MATLAB 命令;(2)提高综合运用所学的理论知识,独立分析和解决问题的能力;(3)进一步熟悉MATLAB 的正确使用方法。
MATLAB实验报告卷积
实验报告学院:机电班级:姓名:学号:实验名称:连续时间信号卷积运算的MATLAB实现1.实验目的:掌握卷积的概念及计算方法2.熟悉通过调用conv()函数求解连续时间信号卷积的数值分析法实验环境:MATLAB 6.5.1软件实验要求:1、已知信号f1(t)=t/2*[ε(t)- ε(t-2)], f2(t)= [ε(t)- ε(t-1)],通过调用conv()函数编程实现卷积计算y(t)= f1(t)* f2(t),画出波形。
2、已知信号f(t)=e-t *ε(t), h(t)= t2 *e-2t *ε(t),y(t)=f(t)* h(t)(1)用符号分析法编程实现计算y(t)的理论解;(2)过调用conv()函数编程实现卷积计算y(t)的数值解并画图实验程序及结果:第一题:M文件(1) function f=uCT(t)f=(t>=0);主程序:k1=0:p:2;k2=0:p:1;f1=k1/2.*[uCT(k1)-uCT(k1-2)]; f2=uCT(k2)-uCT(k2-1);y=conv(f1,f2)*p;k0=k1(1)+k2(1);k3=length(f1)+length(f2)-2; k=k0:p:k3*p+k0;subplot(311)plot(k1,f1);xlabel('t')ylabel('f1(t)')axis([-0.5 2.5 -0.5 1.5])grid onsubplot(312);plot(k2,f2)grid onaxis([-0.5 2.5 -0.5 1.5]) xlabel('t')ylabel('f2(t)')subplot(313)axis([-0.5 4 -0.5 1.5])grid onxlabel('t')ylabel('f1(t)*f2(t)')实验结果:第二题:M文件function f=uCT(t)f=(t>=0);主程序:syms tao>> t=sym('t','positive');>> f=exp(-t);>> h=t^2*exp(-2*t);>> fh_tao=subs(f,t,tao)*subs(h,t,t-tao); >> yt=int(fh_tao,0,t)yt =-(-2*exp(t)+t^2+2*t+2)/exp(t)^2p=0.01;k1=0:p:3;k2=0:p:12;f=exp(-k1).*uCT(k1);h=(k2).^2.*exp(-2.*k2).*uCT(k2);y=conv(f,h)*p;k0=k1(1)+k2(1);k3=length(f)+length(h)-2;k=k0:p:k3*p+k0;subplot(221)plot(k1,f);xlabel('t')ylabel('f(t)')grid onaxis([-0.5 3.5 -0.5 1.5])subplot(222)plot(k2,h);xlabel('t')ylabel('h(t)')grid onaxis([-0.5 11 -0.05 0.2])subplot(223)plot(k,y);grid onxlabel('t')ylabel('f(t)*h(t)数值')axis([-0.5 15 -0.01 0.1])subplot(224)yt =-(-2.*exp(k)+k.^2+2.*k+2)./exp(k).^2; plot(k,yt);grid onxlabel('t')ylabel('f(t)*h(t)理论') axis([-0.5 15 -0.01 0.1]) 实验结果:。
信号卷积在 MATLAB 中的实现
信号卷积在 MATLAB 中的实现宋德周【摘要】The core digital signal processing algorithm is the Discrete Fourier Transform (DFT), is the DFT to the signal in the digital domain and frequency domain are realized discrete,general-purpose computer which can handle discrete signal. Discrete Fourier transform, in communications, voice processing, image processing, radar, medical imaging and other fields is widely used, but this is by convolution and correlation operations on continuous signals and sequences based on spectral analysis. Volume integral for the circular convolution, linear convolution. This paper analyzes under what circumstances can use cyclic convolution operation instead of linear convolution and the corresponding program codes in MATLAB to achieve this on two sequences of arbitrary input cyclic convolution, the keyboard sequence can input the final results and waveform display.%核心的数字信号处理算法是离散傅立叶变换(DFT),是在数字域和频率域对信号的DFT 实现离散,通用计算机可以处理离散信号。
信号的时域表示以及卷积运算(MATLAB)
信号的时域表示【实验目的】利用MATLAB 实现信号的时域表示利用MATLAB 实现图形表示【实验内容(步骤)】软件仿真实验在此部分只需写出代码及相应的注释。
例题实验:clear;%清除工作空间的变量clf;%清除图形clc;%清除命令窗口中的命令t0=-1;%给t0赋值1,作为横轴的最小值tf=5;%给tf赋值5,作为横轴的最大值dt=0.05;%作为冒号表达式的步长t1=0;t=t0:dt:tf; %建立向量Len_t = length(t);%把向量t的长度赋值给Len_tn1 = floor((t1-t0)/dt);%选出t=0在向量t中对应的元素序号x1 = zeros(1,Len_t);%建立一个与t等长的一维零矩阵x1(n1) = 1/dt;%选出t=0在向量t中对应的元素subplot(2,2,1),stairs(t,x1),grid on%把图形窗口分割成2*2的四个部分,第一个部分用stairs函数画出单位冲击函数axis([-1,5,0,22])%控制坐标轴,横轴在-1到5之间,纵轴在0到22之间title('1.冲击信号');%给第一个图形命名% x2 = [zeros(1,n1-1),ones(1,Len_t-n1+1)];% x2 = (t>0);% x2 = 1/2*(sign(t-0)+1);%利用符号函数实现单位阶跃函数x2 = stepfun(t,t1);%建立一个向量x2,当t<t1时,元素都为0,当t>=t1时,元素都为1subplot(2,2,3),stairs(t,x2),grid on%在图形窗口的第三个部分画出单位阶跃函数axis([-1,5,0,1.1]) %设置显示的坐标轴的最大最小值title('2.单位阶跃信号'); %给第二个图形命名alpha = -0.5;%为x3中的alpha赋值omega = 10;%为x3中的omega赋值x3 = exp((alpha+j*omega)*t);%产生了一个复指数信号subplot(2,2,2),plot(t,real(x3)),grid on%在图形窗口的第二部分画出复指数信号的实部title('3.复指数跃信号(实部)'); %命名subplot(2,2,4),plot(t,imag(x3)),grid on%在图形窗口中的第四部分画出复指数信号的虚部title('4.复指数跃信号(虚部)'); %命名【实验结果及分析】图像截图:10HZ和16HZ的周期方波实验:实验步骤:t = linspace(-10,10,100); 产生一百个元素y = (square(t) + 1)./2; y的函数subplot(211); 分割成两块,进入第一块界面plot(t./(2*pi*10),y,'r-');grid on 产生10HZ 的方波axis([0,0.3,-1.2,1.2]);xlabel('t'),ylabel('y1'),title('10Hz');subplot(212); 进入第二块界面plot(t./(2*pi*16),y,'c-');grid on 产生16HZ 的方波axis([0,0.3,-1.2,1.2]);xlabel('t'),ylabel('y2'),title('16Hz');图像截图:连续信号的卷积实验实验步骤:clear %清除Workspace中的变量clc %清除Command Window中的命令uls=ones(1,10); %建立一个1*10的矩阵Length_u = length(uls); %把向量uls的长度赋给Length_uhls = exp(-0.1*(1:15)); %建立一个长度为15的向量hlsLength_h = length(hls); %把向量hls的长度赋给Length_hlmax = max(Length_u,Length_h); %把向量u的长度与向量h的长度中的最大值赋给lmax%if end 语句确定了nh与nu的值,用于下面的向量u与向量h中,保证两者长度相等if Length_u>Length_hnu=0; nh = Length_u - Length_h;elseif Length_u<Length_hnh=0; nu = Length_h - Length_u;elsenu=0; nh=0;end%nh=0 nu=5dt = 0.5;lt = lmax;%把向量u的长度与向量h的长度中的最大值赋给ltu = [zeros(1,lt),uls,zeros(1,nu),zeros(1,lt)];% 建立一个长度为45的向量,uls的值在中间,易于卷积t1 = (-lt+1:2*lt)*dt;%建立了一个长度为45,步长为0.5的向量,从-7到15h = [zeros(1,2*lt),hls,zeros(1,nh)];% 建立一个长度为45的向量,hls的值在末尾一段hf = fliplr(h);%将h进行反褶运算y = zeros(1,3*lt);%建立一个1*45的零矩阵for k = 0:2*lt%设置循环31次p = [zeros(1,k),hf(1:end-k)];%p是长度为45的向量,由向量hf平移k个单位而来y1 = u.*p*dt;%卷积中的相乘yk = sum(y1);%卷积中的积分(求和)y(k+lt+1) = yk;%给y中的元素赋值subplot(4,1,1);stairs(t1,u)%分割图形窗口为4*1,在第一部分画出要进行卷积的函数uaxis([-lt*dt,2*lt*dt,min(u),max(u)]),hold on%设置坐标轴的最值,并让图形等待ylabel('u(t)')%给y轴命名subplot(4,1,2);stairs(t1,p)%在图形窗口的第二部分画出要进行卷积的函数h(k-t)axis([-lt*dt,2*lt*dt,min(p),max(p)])%控制坐标轴的最值ylabel('h(k-t)')%给y轴命名subplot(4,1,3);stairs(t1,y1)%在图形窗口的第三部分画出u(t)*h(k-t)的阶梯状图形axis([-lt*dt,2*lt*dt,min(y1),max(y1)+eps])%控制坐标轴的最值ylabel('s=u*h(k-t)')%给y轴命名subplot(4,1,4);stem(k*dt,yk)%在图形窗口的第四部分画出卷积结果的点状图 axis([-lt*dt,2*lt*dt,floor(min(y)+eps),ceil(max(y+eps))])%控制坐标轴的最值hold on,ylabel('y(k)=sum(s)*dt')%给y轴命名pause(1),%每次循环暂停一秒,方便看清各个图形的变化End图像截图:矩形脉冲信号与锯齿波信号的卷积实验步骤:>> cleardt=0.001; 时间间隔t=0:dt;1; 变化范围f1=(t>0&t<1); 矩形脉冲subplot(311); 分割版面plot(t,f1);grid onxlabel('t'),ylabel('f1'),title('矩形脉冲');axis([-0.3,1.7,0,1.2]);f2=(t>0&t<1).*t; 锯齿波subplot(312);plot(t,f2);grid onxlabel('t'),ylabel('f2'),title('锯齿波');axis([-0.3,1.7,0,1.2]);f3=conv(f1,f2);f3=f3*dt; 实现卷积功能n=length(f1)+length(f2)-2;x=0:dt:n*dt;subplot(313);plot(x,f3);grid onxlabel('x'),ylabel('f3'),title('卷积');axis([-0.3,1.7,0,1.2]);图像截图:。
matlab卷积程序
matlab卷积程序
在MATLAB中,你可以使用conv函数来进行卷积运算。
下面是一个简单的示例,其中输入信号x和冲激响应h都被定义为向量。
matlab复制代码:
% 定义输入信号x和冲激响应h
x = [1 2 3 4];
h = [0.5 0.5];
% 使用conv函数进行卷积
y = conv(x, h);
% 打印结果
disp(y);
在这个例子中,conv函数将输入信号x和冲激响应h进行卷积,并将结果存储在向量y中。
然后,disp函数用于打印向量y的值。
请注意,卷积运算的结果通常比输入信号和冲激响应都要长。
在上面的例子中,输入信号x的长度为4,冲激响应h 的长度为2,而卷积结果y的长度为5。
这是因为卷积运算涉及到将h翻转并与x的每个元素相乘,然后将这些乘积相
加。
因此,卷积结果的长度通常是输入信号和冲激响应长度之和减去1。
对于二维卷积(如在图像处理中),你可以使用conv2函数。
这个函数的工作方式与conv函数类似,但它接受二维矩阵作为输入,并返回一个二维矩阵作为输出。
信号卷积在 MATLAB 中的实现
信号卷积在 MATLAB 中的实现宋德周【期刊名称】《移动信息》【年(卷),期】2015(000)001【摘要】The core digital signal processing algorithm is the Discrete Fourier Transform (DFT), is the DFT to the signal in the digital domain and frequency domain are realized discrete,general-purpose computer which can handle discrete signal. Discrete Fourier transform, in communications, voice processing, image processing, radar, medical imaging and other fields is widely used, but this is by convolution and correlation operations on continuous signals and sequences based on spectral analysis. Volume integral for the circular convolution, linear convolution. This paper analyzes under what circumstances can use cyclic convolution operation instead of linear convolution and the corresponding program codes in MATLAB to achieve this on two sequences of arbitrary input cyclic convolution, the keyboard sequence can input the final results and waveform display.%核心的数字信号处理算法是离散傅立叶变换(DFT),是在数字域和频率域对信号的DFT 实现离散,通用计算机可以处理离散信号。
信号与系统卷积的原理及应用matlab实验
信号与系统卷积的原理及应用matlab实验一、信号与系统基础概念信号是指随时间或空间变化的物理量,可以是电压、电流、声音等。
系统是指对输入信号进行处理的设备或算法,可以是滤波器、放大器等。
二、卷积的定义卷积是一种信号处理方法,用于描述一个信号经过另一个信号响应后产生的输出。
数学上,卷积可以表示为两个函数之间的积分运算,即:y(t) = ∫x(τ)h(t-τ)dτ其中,y(t)表示输出信号,x(t)表示输入信号,h(t)表示系统的单位响应。
三、卷积定理卷积定理是指在频域中进行卷积运算时,等价于对两个函数进行乘法运算后再进行逆变换。
即:F{f*g} = F{f}·F{g}其中,f和g分别为两个函数,在频域中表示为F{f}和F{g}。
四、离散卷积与离散卷积定理在数字信号处理中,使用离散卷积来描述一个序列经过另一个序列响应后产生的输出序列。
离散卷积可以表示为:y[n] = ∑x[k]h[n-k]其中,y[n]表示输出序列,x[k]表示输入序列,h[n-k]表示系统的单位响应。
离散卷积定理是指在频域中进行离散卷积运算时,等价于对两个序列进行乘法运算后再进行逆变换。
即:DFT{f*g} = DFT{f}·DFT{g}其中,f和g分别为两个序列,在频域中表示为DFT{f}和DFT{g}。
五、matlab实验1. 实验目的通过matlab实现离散卷积的计算,并观察离散卷积定理的效果。
2. 实验步骤(1)生成两个长度为N的随机序列x和h。
(2)使用matlab自带函数conv计算x和h的离散卷积y1,并绘制其图像。
(3)将x和h分别进行N点FFT变换得到X和H,在频域中计算它们的乘积Y2=X·H。
(4)将Y2进行N点IFFT变换得到y2,并绘制其图像。
(5)比较y1和y2的差异,观察离散卷积定理的效果。
3. 实验结果与分析实验结果如下图所示:从图中可以看出,y1和y2基本重合,说明离散卷积定理在频域中成立。
用MATLAB实现线性卷积运算
北京邮电大学实验报告实验名称:用MATLAB实现线性卷积运算学院:信息与通信工程学院班级:姓名:学号:日期:2018年5月一、实验原理1、算法产生背景DFT 是连续傅里叶变换在时域和频域上都离散的形式,将时域信号的采样变换为在离散时间傅里叶变换频域的采样。
在形式上,变换两端<时域和频域上)的序列是有限长的。
DFT 具备明确且合理的物理含义,适合应用于数字系统,同时可以方便地由计算机进行运算。
对于线性非移变离散系统,可由线性卷积表示时域输入输出关系,即(> (>*(> ynxnhn通常采用循环卷积降低运算量,但实际中往往无法满足对信号处理的实时性要求。
因此,产生了重叠相加法和重叠保留法两种典型的算法,用以快速计算线性卷积,成为了DFT 的一个重要应用。
2、算法基本思想1)重叠相加法重叠相加法是将待过滤的信号分割成长为N 的若干段,如图1 所示,每一段都可以和有限时宽单位取样响应作卷积,再将过滤后的各段重叠相加。
具体算法实现原理如图2 所示,建立缓存序列,每次输入N 点序列,通过计算x(n> 和h(n> 的循环卷积实现线性卷积运算,将缓存的M-1 点序列和卷积结果相加,并输出前N 点作为计算结果,同时缓存后M-1 点,如此循环,直至所有分段计算完毕,则输出序列y(n>为最终计算结果。
2)重叠保留法重叠保留法相当于将x�l(n>和h(�n>作循环卷积,然后找出循环卷积中相当于线性卷积的部分。
在这种情况下,将序列y(n>分为长为N的若干段(如图3所示>,每个输入段和前一段有M-1个重叠点。
此时只需要将发生重叠的前M-1个点舍去,保留重叠的部分并输出,则可获得序列y(n>,算法如图4所示。
二、流程图设计1、重叠相加法2、重叠保留法三、MATLAB源代码1、重叠相加源码2.重叠保留源码2、四、实验结果与分析对两种算法采用同一序列进行测试分析。
MATLAB信号卷积
利用MATLAB实现信号的时域卷积一.引言具有强大的图形处理功能及符号运算功能,为实现信号的可视化以及时域分析提供了强有力的工具,所以我们要利用编程辅助分析与计算。
现在我们利用编程辅助计算连续时间信号、离散时间信号的卷积。
我们利用编制一个M 函数,该函数可以计算离散序列和的卷积,此程序要计算,返回的非零点对应向量,还将绘制出序列,和的时域波形图;我们要验证并调用这个函数计算“”这两个序列的卷积和运算,并绘制图像。
现在我们再利用MATLAB编制一个计算连续时间信号卷积积分的M 函数,此函数要计算出两个连续信号和的卷积积分的近似值,并绘制、和的时域波形图。
编完之后,我们利用函数求“”这两个连续时间信号的卷积积分运算,并绘制图形。
二.基本原理对于信号的时域卷积有:(1)离散时间信号的卷积和:它的定义为,离散时间信号和的卷积和为:页脚内容1设序列在区间非零,序列在非零,那么就有的非零区间就为并且区间长度为,则只需计算序列的非零区间就可以表示整个序列.那么由上可知,在利用的函数的时候就要注意其卷积后的区间长度已经发生变化,在绘制卷积后的图像的时候就要有意识的先减去扩大的区间长度,不然绘制的卷积后的时域图像就是错误的,和横坐标不是正确的对应关系,并且我们在使用函数的时候要先构造和,让它们有限,才能返回序列的非零样值时间序列。
对于连续的时间信号和的卷积积分其定义为:那么可以用分段求和来实现,即:令则有当足够小的时候,的结果就是连续时间信号的较好的近似值。
所以当用MATLAB 实现和的卷积积分的时候要先对和以的间隔进行采样,得到它们的离散序列和,构造它们相应的时间向量;调用系统的函数计算卷积,计算的近似页脚内容2值;最后构造的时间向量,并用命令将波形图画出来。
三.实现方法(1)先编制一个M函数dconv(),能是实现两个序列的卷积和,并绘制这两个序列的时域波形图和卷积之后的波形图。
编程思路如框图1:对应好卷积后的时间向量,用框图1程序如下所示:function xn=dconv(x1,x2) %任意两序列卷积x11=-5:length(x1)-6; %设定x1(n)的时间向量页脚内容3x22=-5:length(x2)-6; %设定x2(n)的时间向量subplot(131),stem(x11,x1,’fill’),grid on; %画x1(n)的图像title('x1(n)=u(n)-u(n-4)');xlabel('n');ylabel('x(n)');set(gca,'xtick',-20:20);axis([(min(x11)-1),(max(x11)+1),(min(x1)-1),(max(x1)+1)]) subplot(132),stem(x22,x2,’fill’),grid on; %画x2(n)的图像title('x2(n)=u(n)-u(n-4)');xlabel('n');ylabel('x(n)');set(gca,'xtick',-20:20);axis([(min(x22)-1),(max(x22)+1),(min(x2)-1),(max(x2)+1)]) xmin1=min(x11);xmax1=max(x11);xmin2=min(x22);xmax2=max(x22);t=(xmax2+xmax1)-(xmin2+xmin1)+1;页脚内容4页脚内容5xx=-10:(t-6-5); %设定x(n)的时间向量 xn=conv(x1,x2) %求x(n)=x1(n)*x2(n)subplot(133),stem(xx,xn,’fill ’),grid on; %画x(n)的图像title('x(n)=x1(n)*x2(n)') xlabel('n'); ylabel('x(n)');set(gca,'xtick',-100:100);axis([(min(xx)+5),(max(xx)-7),(min(xn)-0.5),(max(xn)+0.5)]) end(2)再编制一个M 函数ddconv(n),求两个连续时间信号的卷积,能是实现两个连续信号的卷积和,并绘制这两个信号的时域波形图和卷积之后的波形图。
基于Matlab实现线性卷积等
线性卷积与循环卷积一、作品目的通过matlab的强大功能展示线性卷积和循环卷积过程中方方面面的计算和变化,让大家对这两种卷积有一个更加完美的认识。
二、概念简介卷积是一种典型的乘累加运算。
1.线性卷积线性卷积是对线性移不变(LSI)系统的输入输出关系的描述,体现系统的特性。
线性卷积的表达式为一般情况,现实的系统为因果系统,有k<0时,恒有h(k)=0,则若x(n)是一个N点序列,h(n)是一个m点序列,则卷积的结果y(n)将是L=N+M-1点的序列。
2.循环卷积设x1(n) 和x2(n) 是两个长度为L、M的有限长序列,它们的N 点循环卷积x3(n) 定义为:注意:其中N>=Max{L,M}如果其中一个序列(或者两个序列)的长度没有所求N点循环卷积的长度长,那在该序列后面补零,直到长度达到N。
三、设计思路及程序1. 线性卷积:(1)以输入序列x(n)=[5,4,3,2,1],脉冲响应h(n)=[1,1,1,1]为列进行演示。
(2)计算输入序列和脉冲响应的长度。
(3)画出补零后的输入序列和脉冲响应(4)设计一个循环,在循环中实现反转、位移和计算。
并画出反转后的图像变化和卷积图像,将每一次移位结果保存为fig图。
(5)最后将上一步所生成的所有fig图合起来生成一张gif图程序展示:clear;clc;close all;(1)(2)xn=[5,4,3,2,1];M=length(xn);%输入任意序列并计算长度Mhn=[1,1,1,1];N=length(hn);%输入任意脉冲响应并计算长度Nm=[-(M-1):M+N-2];%设置代换变量的范围以便x(m)翻转和移位(3)xm=[zeros(1,M-1),xn,zeros(1,N-1)];%补零以便与m对应绘图subplot(2,2,1);stem(m,xm,'r.');%%绘输入序列x(m) ylabel('x(m)'); grid on;title('(a)输入序列x(m)');hm=[zeros(1,M-1),hn,zeros(1,M-1)];%补零以便与m对应绘图subplot(2,2,2);stem(m,hm,'r.');%绘脉冲响应ylabel('h(m)'),grid,title('(b)脉冲响应h(m)');%%加标签网格和标题yn=zeros(1,2*M+N-2);%卷积输出初始化(4)for n=0:M+N-2;%逐个计算卷积输出if n==0;xmfy=[fliplr(xn),zeros(1,M+N-2)];%实现翻转else for k=M:-1:1;xmfy(k+n)=xmfy(k+n-1);endxmfy(n)=0;xmfy;%实现翻转后移位并显示endsubplot(2,2,3);stem(m,xmfy,'b.');%%绘制翻转移位序列ylabel('x(n-m)'), grid,title('(c)x(n-m)');%%加标签网格和标题yn(M+n)=sum(xmfy.*hm);%计算第n位输出并与m位置对应subplot(2,2,4);stem(m,yn,'r.');%%绘制卷积输出序列axis([min(m),max(m),min([0,conv(xn,hn)]),max([0,c onv(xn,hn)])]);%%控制绘图坐标ylabel('y(n)');grid on;title('(d)卷积输出y(n)');%%加标签网格和标题pause(.5);drawnow,picname=[num2str(n) '.fig'];%保存的文件名:如i=1时,picname=1.fighold on % 写后面的字时,不把前面的字冲掉saveas(gcf,picname)endyn;stepall=M+N-2;(5)for i=1:stepallpicname=[num2str(i) '.fig'];open(picname)set(gcf,'outerposition',get(0,'screensize'));% matlab窗口最大化frame=getframe(gcf);im=frame2im(frame);%制作gif文件,图像必须是index索引图像[I,map]=rgb2ind(im,20);if i==1imwrite(I,map,'xianxingjuanji.gif','gif', 'Loopcount',inf,'DelayTime',0.5);elseif i==stepallimwrite(I,map,'xianxingjuanji.gif','gif','WriteMo de','append','DelayTime',0.5);elseimwrite(I,map,'xianxingjuanji.gif','gif','WriteMode','append','DelayTime',0.5); end;close allend实验结果展示:2. 循环卷积(1)以输入序列x(n)=[5,4,3,2,1],脉冲响应h(n)=[1,1,1,1]为列进行演示。
实验三 信号卷积的MATLAB实现
实验三信号卷积的MATLAB实现一、实验名称:信号卷积的MATLAB实现二、实验目的:1.增加学生对卷积的认识2.了解MATLAB这个软件的一些基础知识3.利用MATLAB计算信号卷积4.验证卷积的一些性质三、实验原理:用MATLAB实现卷积我们先必须从信号下手,先把信号用MATLAB语句描述出来,然后再将这些信号带入到我们写好的求卷积的函数当中来计算卷积。
在本章中我们将信号分为连续信号和离散序列两种来实现卷积并验证卷积的一些性质。
MATLAB强大的图形处理功能及符号运算功能,为我们实现信号的可视化提供了强有力的工具。
在MATLAB中通常有两种方法来表示信号,一种是用向量来表示信号,另一种则是用符号运算的方法来表示信号。
用适当的MATLAB 语句表示出信号后,我们就可以利用MATLAB的绘图命令绘制出直观的信号波形。
连续时间信号,是指自变量的取值范围是连续的,且对于一切自变量的取值,除了有若干不连续点以外,信号都有确定的值与之对应的信号。
从严格意义上来讲,MATLAB并不能处理连续信号,在MATLAB中,是用连续信号在等时间间隔点的样值来近似地表示连续信号的,当取样时间间隔足够小时,这些离散的样值就能较好地近似出连续信号。
在MATLAB中连续信号可用向量或符号运算功能来表示。
1.向量表示法对于连续时间信号f(t),我们可以用两个行向量f和t来表示,其中向量t是行如t=t1:p:t2的MATLAB命令定义的时间范围向量,t1为信号起始时间,t2为中止时间,p为时间间隔。
向量f为连续信号f(t)在向量t所定义的时间点上的样值。
例如对于连续信号f(t)=sin(t),我们可以用如下两个向量来表示:t=-10:1.5:10;f=sin(t)用上述向量对连续信号表示后,就可以用plot命令来绘出该信号的时域波形。
Plot命令可将点与点间用直线连接,当点与点间的距离很小时,绘出的图形就成了光滑的曲线。
命令如下:plot(t,f)title(‘f(t)=sint’)xlabel(‘t’)axis([-10,10,-1.1,1.1])绘制的信号波形如图3.1所示,当把时间间隔p取得更小(如0.01)时,就可得到sint较好的近似波形,如图3.2所示。
信号与系统Matlab实验作业
实验一典型连续时间信号和离散时间信号一、实验目的掌握利用Matlab画图函数和符号函数显示典型连续时间信号波形、典型时间离散信号、连续时间信号在时域中的自变量变换。
二、实验内容1、典型连续信号的波形表示(单边指数信号、复指数信号、抽样信号、单位阶跃信号、单位冲击信号)1)画出教材P28习题1-1(3) ()[(63)(63)]t=----的波形图。
f t e u t u t2)画出复指数信号()()j t f t e σω+=当0.4, 8σω==(0<t<10)时的实部和虚部的波形图。
t=0:0.01:10;f1='exp(0.4*t)*cos(8*t)';f2='exp(0.4*t)*sin(8*t)';figure(1)ezplot(f1,t);grid on;figure(2)ezplot(f2,t);grid on;3)画出教材P16图1-18,即抽样信号Sa(t)的波形(-20<t<20)。
t=-10:0.01:10;f='sin(t)/t';ezplot(f,t);grid on;4)用符号函数sign画出单位阶跃信号u(t-3)的波形(0<t<10)。
t=0:0.01:10;f='(sign(t-3)+1)/2';ezplot(f,t);grid on;5)单位冲击信号可看作是宽度为∆,幅度为1/∆的矩形脉冲,即t=t 1处的冲击信号为11111 ()()0 t t t x t t t otherδ∆⎧<<+∆⎪=-=∆⎨⎪⎩画出0.2∆=, t 1=1的单位冲击信号。
t=0:0.01:2;f='5*(u(t-1)-u(t-1.2))';ezplot(f,t);grid on;axis([0 2 -1 6]);2、典型离散信号的表示(单位样值序列、单位阶跃序列、实指数序列、正弦序列、复指数序列)编写函数产生下列序列:1)单位脉冲序列,起点n0,终点n f,在n s处有一单位脉冲。
MATLAB信号卷积
利用MATLAB实现信号的时域卷积一.引言具有强大的图形处理功能及符号运算功能,为实现信号的可视化以及时域分析提供了强有力的工具,所以我们要利用编程辅助分析与计算.现在我们利用编程辅助计算连续时间信号、离散时间信号的卷积。
我们利用编制一个M函数,该函数可以计算离散序列和的卷积,此程序要计算,返回的非零点对应向量,还将绘制出序列,和的时域波形图;我们要验证并调用这个函数计算“”这两个序列的卷积和运算,并绘制图像.现在我们再利用MATLAB编制一个计算连续时间信号卷积积分的M函数,此函数要计算出两个连续信号和的卷积积分的近似值,并绘制、和的时域波形图。
编完之后,我们利用函数求“"这两个连续时间信号的卷积积分运算,并绘制图形。
二.基本原理对于信号的时域卷积有:(1)离散时间信号的卷积和:它的定义为,离散时间信号和的卷积和为:设序列在区间非零,序列在非零,那么就有的非零区间就为并且区间长度为,则只需计算序列的非零区间就可以表示整个序列。
那么由上可知,在利用的函数的时候就要注意其卷积后的区间长度已经发生变化,在绘制卷积后的图像的时候就要有意识的先减去扩大的区间长度,不然绘制的卷积后的时域图像就是错误的,和横坐标不是正确的对应关系,并且我们在使用函数的时候要先构造和,让它们有限,才能返回序列的非零样值时间序列。
对于连续的时间信号和的卷积积分其定义为:那么可以用分段求和来实现,即:令则有当足够小的时候,的结果就是连续时间信号的较好的近似值。
所以当用MATLAB 实现和的卷积积分的时候要先对和以的间隔进行采样,得到它们的离散序列和,构造它们相应的时间向量;调用系统的函数计算卷积,计算的近似值;最后构造的时间向量,并用命令将波形图画出来.三.实现方法(1)先编制一个M函数d conv(),能是实现两个序列的卷积和,并绘制这两个序列的时域波形图和卷积之后的波形图.编程思路如框图1:从外部获取两个序列做这两个序列的时间向量利用stem命令将这两个序列的图画出来框图1程序如下所示:function xn=d conv(x1,x2) %任意两序列卷积x11=-5:l ength(x1)—6;%设定x1(n)的时间向量x22=-5:l ength(x2)—6;%设定x2(n)的时间向量subpl ot(131),stem(x11,x1,'fill’),grid on;%画x1(n)的图像titl e(’x1(n)=u(n)-u(n-4)');xlabel(’n');ylabel('x(n)');set(gca,’xtick',-20:20);axis([(min(x11)-1),(max(x11)+1),(min(x1)-1),(max(x1)+1)])subpl ot(132),stem(x22,x2,'fill’),grid on; %画x2(n)的图像titl e('x2(n)=u(n)—u(n-4)');xlabel(’n’);ylabel('x(n)’);set(gca,'xtick',—20:20);axis([(min(x22)—1),(max(x22)+1),(min(x2)-1),(max(x2)+1)]) xmin1=min(x11);xmax1=max(x11);xmin2=min(x22);xmax2=max(x22);t=(xmax2+xmax1)-(xmin2+xmin1)+1;xx=-10:(t-6-5); %设定x(n)的时间向量xn=conv(x1,x2)%求x(n)=x1(n)*x2(n)subpl ot(133),stem(xx,xn,’fill’),grid on; %画x(n)的图像titl e(’x(n)=x1(n)*x2(n)')xlabel('n');ylabel('x(n)’);set(gca,’xtick’,-100:100);axis([(min(xx)+5),(max(xx)—7),(min(xn)-0.5),(max(xn)+0.5)])end(2)再编制一个M函数dd conv(n),求两个连续时间信号的卷积,能是实现两个连续信号的卷积和,并绘制这两个信号的时域波形图和卷积之后的波形图。
用MATLAB实现信号的时域卷积
用MATLAB 实现信号的时域卷积摘要:利用抽样方法绘制连续信号和离散信号.编制函数计算连续时间信号,离散时间信号的卷积.关键字:MATLAB ;离散卷积;连续卷积实验原理:卷积运算在信号与系统分析中具有非常重要的意义,是信号与系统分析的基本方法之一.线性是不变系统的零状态响应就可以通过求解驶入激励信号与系统单位冲击响应的卷积运算获得.在连续时间系统中,卷积运算成为卷积积分,表示为在离散时间系统中,卷积运算称为卷积和,表示为:实验任务与实现方法:⑴ 编制计算离散时间序列卷积核的M 函数()dconv ,该函数课计算两离散序列()n x 1和()n x 2的卷积和()()()n x n x n x 21*=.程序计算出卷积和()n x 的同时,还绘制出序列()n x 1、()n x 2和()n x 的时域波形图,并返回()n x 的非零样值点的对应向量.任务〔1〕程序:function dconv<x1,x2,y1,y2>%任意两序列卷积x1=input<'请输入x1='>;x2=input<'请输入x2='>;y1=input<'请输入y1='>;y2=input<'请输入y2='>;subplot<131>,stem<x1,y1>,gridon ,title<'y1'>,axis<[<min<x1>-1>,<max<x1>+1>,<min<y1>-1>,<max<y1>+1>]>subplot<132>,stem<x2,y2>,gridon ,title<'y2'>,axis<[<min<x2>-1>,<max<x2>+1>,<min<y2>-1>,<max<y2>+1>]>%_____________________________________________xmin1=min<x1>;xmax1=max<x1>;xmin2=min<x2>;xmax2=max<x2>;t=<xmax2+xmax1>-<xmin2+xmin1>+1;xx=0:<t-1>;ft=conv<y1,y2>subplot<133>,stem<xx,ft>,grid on ,title<'*'>axis<[<min<xx>+0.5>,<max<xx>+0.5>,<min<ft>-0.5>,<max<ft>+0.5>]>⑵ 调用()dconv 来完成下面两离散序列的卷积和运算,并绘制图形:任务〔2〕程序:function f=ddconv<m1,m2>%-----------------------------%离散序列1t1=m1-5;t2=m1+5;t=t1:t2; %横坐标n=length<t>;tt=t1:m1; %起始到跳变n1=length<tt>;f1=[zeros<1,n1-1>,ones<1,n-n1+1>];%subplot<141>,stem<t,f1>,grid on,title<'阶跃函数序列 u<n-m1> '>,axis<[t1 t2 -0.2 1.5]>%-------------------------------%离散序列2p1=m1-5;p2=m1+5;p=p1:p2; %横坐标z=length<p>;pp=p1:m2; %起始到跳变z1=length<pp>;f2=[zeros<1,z1-1>,ones<1,z-z1+1>];%subplot<142>,stem<p,f2>,grid on,title<'离散阶跃序列 u<n-m2> '>,axis<[p1 p2 -0.2 1.5]>%------------------------------------%两离散序列相减k=min<min<t>,min<p>>:max<max<t>,max<p>>; %共同横坐标s1=zeros<1,length<k>>;s2=s1;s1<find<<k>=min<t>>&<k<=max<t>>==1>>=f1;s2<find<<k>=min<p>>&<k<=max<p>>==1>>=f2;f=s1-s2;subplot<131>,stem<k,f>,grid on,title<'x<n>=u<n>-u<n-4>'>axis<[<min<min<t>,min<p>>-1>,<max<max<t>,max<p>>+1>,<min<f>-0.5>,<max <f>+0.5>]>subplot<132>,stem<k,f>,grid on,title<'h<n>=u<n>-u<n-4>'>axis<[<min<min<t>,min<p>>-1>,<max<max<t>,max<p>>+1>,<min<f>-0.5>,<max <f>+0.5>]>%----------------------------xmin1=min<k>;xmax1=max<k>;xmin2=min<k>;xmax2=max<k>;t=<xmax2+xmax1>-<xmin2+xmin1>+1;xx=0:<t-1>;ft=conv<f,f>subplot<133>,stem<xx,ft>,grid on,title<'h<n>*x<n>'>axis<[<min<xx>+0.5>,<max<xx>+0.5>,<min<ft>-0.5>,<max<ft>+0.5>]>⑶编制计算连续时间信号卷积积分的M函数()sconv,该函数在计算出两信号()t f1和()t f 2的卷积积分()t f的数值近似的同时,还绘制出()t f1、()tf2和()t f的时域波形图. 实现方法:与第〔4〕任务用同一个程序.⑷调用函数()sconv来完成下面两连续时间信号的卷积积分运算,并绘制图形:()()121--⎪⎭⎫⎝⎛+=tutut e,()()()[]221--=tututth任务〔3、4〕程序:function sconv<>%u<t>m1=0;t1=m1-10;t2=m1+10;t=t1:0.01:t2;n=length<t>;tt=t1:0.01:m1;n1=length<tt>;f1=[zeros<1,n1-1>,ones<1,n-n1+1>];%subplot<131>,plot<t,f1>,grid on,title<'ÀëÉ¢½×Ô¾ÐòÁÐ u<t> '>,axis<[t1 t2 -0.2 1.5]>%u<t+1/2>tx1=t-1/2;fx1=f1;%subplot<241>,stairs<tx1,fx1>,grid on,title<' u<t+1/2> '>,axis<[t1 t2 -0.2 1.5]>%u<t-1>tx2=t+1;fx2=f1;%subplot<242>,stairs<tx2,fx2>,grid on,title<' u<t-1> '>,axis<[t1 t2 -0.2 1.5]>k=min<min<tx1>,min<tx2>>:0.01:max<max<tx1>,max<tx2>>;s1=zeros<1,length<k>>;s2=s1;s1<find<<k>=min<tx1>>&<k<=max<tx1>>==1>>=fx1;s2<find<<k>=min<tx2>>&<k<=max<tx2>>==1>>=fx2;e=s1-s2;subplot<131>,stairs<k,e>,grid on,title<'e<t>=u<t+1/2>-u<t-1>'>axis<[<min<min<tx1>,min<tx2>>+5>,<max<max<tx1>,max<tx2>>-5>,<min<e>-0 .5>,<max<e>+0.5>]>tx3=t;fx3=f1;%subplot<243>,stairs<tx3,fx3>,grid on,title<' u<t> '>,axis<[t1 t2 -0.2 1.5]>tx4=t+2;fx4=f1;%subplot<244>,stairs<tx4,fx4>,grid on,title<' u<t-2> '>,axis<[t1 t2 -0.2 1.5]>k1=min<min<tx3>,min<tx4>>:0.01:max<max<tx3>,max<tx4>>;s3=zeros<1,length<k1>>;s4=s1;s3<find<<k1>=min<tx3>>&<k1<=max<tx3>>==1>>=fx3;s4<find<<k1>=min<tx4>>&<k1<=max<tx4>>==1>>=fx4;h=s3-s4;%subplot<236>,stairs<k1,h>,grid on,title<' u<t>-u<t-2>'>%axis<[<min<min<tx3>,min<tx4>>+5>,<max<max<tx3>,max<tx4>>-5>,<min<h>-0.5>,<max<h>+0.5>]>h<t>=1/2*t*[u<t>-u<t-2>]kk1=length<k1>;ont=0:0.01:kk1;ks=min<min<k1>,min<ont>>:0.01:max<max<k1>,max<ont>>;s5=zeros<1,length<ks>>;s6=s5;s5<find<<ks>=min<ont>>&<ks<=max<ont>>==1>>=ont;s6<find<<ks>=min<k1>>&<ks<=max<k1>>==1>>=h;ffu=1/2*<s5.*s6>;subplot<132>,stairs<ks,ffu>,grid on,title<'1/2*t*[u<t>-u<t-2>]'>axis<[-5,5,<min<ffu>-0.5>,<max<ffu>+0.5>]>xmin1=min<k>;xmax1=max<k>;xmin2=min<ks>;xmax2=max<ks>;ttx=<xmax2+xmax1>-<xmin2+xmin1>+0.01;xx=0:0.01:<ttx-0.01>;ft=conv<e,ffu>;subplot<133>,stairs<xx,ft>,grid on,title<'h<n>*x<n>'>axis<[15,55,<min<ft>-0.5>,<max<ft>+0.5>]>实验总结:通过本次实验学会了用MATLAB实现线性系统的时域分析.能自己完成的东西一定要自己独立完成,这样收获的东西才是自己的.。
matlab画卷积 教程
function [f,k]=dconv(f1,f2,k1,k2) %the function of compute f=f1*f2 %f: 卷积序列f(k)对应的非零样值向量 %k: 序列f(k)的对因序号向量 %f1: 序列f1(k)非零样值向量 %f2: 序列f2(k)非零样值向量 %k1: 序列f1(k)的对应序号向量 %k2: 序列f2(k)的对应序号向量
需要注意的是,调用conv( )函数计算序列卷 积时,该函数将向量f1和f2以外的序列样值 均视为零,因此,当序列f1(k)或f2(k)为无限 长序列时调用conv( )函数就可能出现误差。 如果碰到无限长序列时候,我们必须将其 截断才能求带入到conv( )函数中。此时,函 数将把截断区域外的区间视为零,故conv( ) 计算出的卷积只有部分是真实的
%在子图1绘f1(t)时域
%在子图2绘f2(t)时域
subplot(2,2,3) plot(k,f) %画卷积f(t)的时域波形 title('f(t)=f1(t)*f2(t)') xlabel('t') ylabel('f(t)')
给定下面两个连续信号,我们调用sconv( ) 函数来求两连续信号的卷积。 f1(t)=2[U(t)-U(t-4)] f2(t)=U(t)-U(t-2) MATLAB命令如下: p=0.01; k1=0:p:4; f1=2*ones(1,length(k1)) k2=0:p:2; f2=ones(1,length(k2)) %f1,f2 两个信号的向量表示 [f,k]=sconv(f1,f2,k1,k2,p) %子函数调用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三信号卷积的MATLAB实现一、实验名称:信号卷积的MATLAB实现二、实验目的:1.增加学生对卷积的认识2.了解MATLAB这个软件的一些基础知识3.利用MATLAB计算信号卷积4.验证卷积的一些性质三、实验原理:用MATLAB实现卷积我们先必须从信号下手,先把信号用MATLAB语句描述出来,然后再将这些信号带入到我们写好的求卷积的函数当中来计算卷积。
在本章中我们将信号分为连续信号和离散序列两种来实现卷积并验证卷积的一些性质。
MATLAB强大的图形处理功能及符号运算功能,为我们实现信号的可视化提供了强有力的工具。
在MATLAB中通常有两种方法来表示信号,一种是用向量来表示信号,另一种则是用符号运算的方法来表示信号。
用适当的MATLAB 语句表示出信号后,我们就可以利用MATLAB的绘图命令绘制出直观的信号波形。
连续时间信号,是指自变量的取值范围是连续的,且对于一切自变量的取值,除了有若干不连续点以外,信号都有确定的值与之对应的信号。
从严格意义上来讲,MATLAB并不能处理连续信号,在MATLAB中,是用连续信号在等时间间隔点的样值来近似地表示连续信号的,当取样时间间隔足够小时,这些离散的样值就能较好地近似出连续信号。
在MATLAB中连续信号可用向量或符号运算功能来表示。
1.向量表示法对于连续时间信号f(t),我们可以用两个行向量f和t来表示,其中向量t是行如t=t1:p:t2的MATLAB命令定义的时间范围向量,t1为信号起始时间,t2为中止时间,p为时间间隔。
向量f为连续信号f(t)在向量t所定义的时间点上的样值。
例如对于连续信号f(t)=sin(t),我们可以用如下两个向量来表示:t=-10:1.5:10;f=sin(t)用上述向量对连续信号表示后,就可以用plot命令来绘出该信号的时域波形。
Plot命令可将点与点间用直线连接,当点与点间的距离很小时,绘出的图形就成了光滑的曲线。
命令如下:plot(t,f)title(‘f(t)=sint’)xlabel(‘t’)axis([-10,10,-1.1,1.1])绘制的信号波形如图3.1所示,当把时间间隔p取得更小(如0.01)时,就可得到sint较好的近似波形,如图3.2所示。
图3.1 p=1.5的sint近似波形图3.2 p=0.01的sint近似波形2.符号运算表示法如果信号可以用一个符号表达式来表示它,则我们可用ezplot命令绘制出信号的波形。
例如对于连续信号f(t)=/2t e ,我们可以用符号表达式表示为:syms tf=sym(‘exp(-t/2)’)f= exp(-t/2)然后用ezplot命令绘制其波形:ezplot(f,[-6, 6])该命令绘制的信号波形如图3.3所示图3.3 指数信号波形利用上面两种表达方式我们可以描述出很多种连续信号,常用的信号有:阶跃信号,门信号,斜线信号,指数信号等等。
接下来我们看看离散时间信号,一般说来,离散时间信号用f(k)表示,其中变量k为整数,代表离散的采样时间点。
f(k)可表示为:f(k)={...f(-2),f(-1),f(0),f(1),f(2)…}↑k=0在MATLAB中,用一个向量f即可表示一个有限长度的序列。
但是,这样的向量并没有包含其对应的时间序号信息。
所以,要完整地表示一个离散信号需要用两个向量。
如序列:f(k)={1,2,-1,3,2,4,-1}↑k=0在MATLAB中应表示为:k=[-3,-2,-1,0,1,2,3]或是k=-3:3;f= [1, 2,-1, 3, 2, 4,-1]在用MATLAB表示离散序列并将其可视化时,我们要注意以下几点:第一,与连续时间信号不同,离散时间信号无法用符号运算来表示;第二,由于在MATLAB中,矩阵的元素个数是有限的,因此,MATLAB无法表示无限序列;第三,在绘制离散信号波形时,要使用专门绘制离散数据的stem命令,而不是plot命令。
如对于上面定义的二向量f和k,可用如下stem命令绘图:stem (k, f),得到对应序列波形图,如图3.4所示。
图3.4 随机序列的波形同样的,单位阶跃序列,正弦序列,离散时间指数序列等的离散信号我们都可以用类似的方法描述并绘制出图形。
信号的时域变换包括信号的平移、反折、倒相及信号的尺度变换。
我们就分别介绍连续时间信号和离散时间信号的各种时域变换。
1、连续信号的时域变换如前所述,MATLAB可以有两种方法来表示连续信号。
用这两种方法均可实现连续信号的时域变换,但用符号运算的方法则较为简便。
(1).移位对于连续信号f(t),若有常数t0>0,延时信号f(t-t0)是将原信号沿正t轴方向平移时间t0,而f(t+t0)是将原信号沿负t轴方向移动时间t0。
我们可用下面的命令来实现连续信号的平移及其结果可视化,其中f是用符号表达式表示的连续时间信号,t是符号变量,subs命令则将连续信号中的时间变量t用t-t0替换:y=subs(f,t,t-t0); ezplot(y)(2).反折连续信号的反折,是指将信号以纵坐标为轴反折,即将信号f(t)中的自变量t 换为-t。
实现如下:y=subs(f,t,-t); ezplot(y)(3).尺度变换连续信号的尺度变换,是指将信号的横坐标进行展宽或压缩变换,即将信号f(t)中的自变量t换为at,当a>1时,信号f(at)以原点为基准,沿横轴压缩到原来的1/a;当0<a<1时,就展宽至原来的1/a倍。
实现如下:y=subs(f,t,*t); ezplot(y)(4).倒相连续信号的倒相是指将信号f(t)以横轴为对称轴对折得到-f(t)。
实现如下:y=-f; ezplot(y)对于以上的命令,可在画图命令之后加入坐标轴的调整的命令(即加入axis( )命令),以使画出的图形更清晰、直观。
2、离散时间序列的时域变换与连续信号不同的是,在MATLAB中,离散序列的时域变换不能用符号运算来实现,而必须用向量表示的方法,即在MATLAB中离散序列的变换需表示成两个向量的变换。
1).离散序列反折离散序列的反折,即是将表示离散序列的两向量以零时刻的取值为基准点,以纵轴为对称轴反折,向量的反折可用MATLABA中的fliplr函数来实现,具体实现如下:function [f,k]=lsfz(f1,k1)f=fliplr(f1);k=-fliplr(k1); %调用此函数实现向量f1和k1的反折stem(k,f,’filled’)axis([min(k)-1,max(k)+1,min(f)-0.5,max(f)+0.5])2).离散序列的平移离散序列的平移可看作是将离散序列的时间序号向量平移,而表示对应时间序号点的序列样值不变,当序列向左移动k0个单位时,所以时间序号向量都减小k0个单位,反之则增加k0个单位。
实现如下:function [f,k]=lsyw(ff,kk,k0)k=kk+k0;f=ff;stem(k,f,’filled’)axis([min(k)-1,max(k)+1,min(f)-0.5,max(f)+0.5])3).离散序列的倒相离散序列的倒相可看作是将表示序列样值的向量取反,而对应的时间序号向量不变,得到的离散时间序列。
实现如下:function [f,k]=lsdx(ff,kk)f=-ff;k=kk;stem(k,f,’filled’)axis([min(k)-1,max(k)+1,min(f)-0.5,max(f)+0.5])这些时域变换,我们可以把我们在第一节中描述过的信号带入其中,来看看信号时域变换的结果如何。
除此以外,我们通过时域变换也可以锻炼我们描述信号的能力,一些复杂信号,往往都是一些简单信号经过一系列的时域变换得到。
前面的内容,其实是给以下的学习做的准备,我们在了解如何描述信号以后,接下来就只要把信号带入卷积运算中就可以了。
在MATLAB中,conv( )函数可以帮助我们快速求出两个离散序列的卷积和。
conv函数的调用格式为:f=conv(f1,f2)其中f1为包含序列f1(k)的非零样值点的行向量,f2为包含序列f2(k)的非零样值点的行向量,向量f则返回序列f(k)=f1(k)*f2(k)的所有非零样值点行向量。
在求信号卷积之前,我们先来看看在MATLAB中conv( )这个程序是如何来实现的。
我们可以通过看它的流程图来了解,流程图如图3.5所示:图3.5 conv( )函数流程图由于conv是针对离散时间序列的函数,我们先从离散的信号入手[12]。
1、离散时间信号的卷积我们试举一例来看conv的功能,已知序列f1(k)和f2(k)如下所示:f1(k)=1,(0≤k≤2) f2(k)=k,(0≤k≤3)则调用conv( )函数求上述两序列的卷积和的MATLAB命令为:f1=ones(1,3);f2=0:3;f=conv(f1,f2)运行结果为:f=0 1 3 6 5 3由这个例子可以看出,函数conv( )不需要给定序列f1(k)和f2(k)非零样值点的时间序号,也不返回序列f(k)=f1(k)*f2(k)的非零样值点的时间序号。
因此,要正确地标识出函数conv( )的计算结果向量f,我们还必须构造序列f1(k)、f2(k)及f (k)的对应序号向量。
我们可以看出f(k)的序号向量k是由序列f1(k)和f2(k)的非零样值点的起始序号及他们的时域宽度决定的。
在此,我们自己可以构造一个实用一点的函数dconv( ),该函数实现的功能为:可以在计算出卷积f (k)的同时,还可以绘出序列f1(k)、f2(k)及f (k)在时域内的波形图。
并返回f (k)的非零样值点的对应向量。
程序如下所示:function [f,k]=dconv(f1,f2,k1,k2)%the function of compute f=f1*f2%f: 卷积序列f(k)对应的非零样值向量%k: 序列f(k)的对因序号向量%f1: 序列f1(k)非零样值向量%f2: 序列f2(k)非零样值向量%k1: 序列f1(k)的对应序号向量%k2: 序列f2(k)的对应序号向量f=conv(f1,f2) %计算序列f1与f2的卷积和fk0=k1(1)+k2(1); %计算序列f非零样值的起点位置k3=length(f1)+length(f2)-2; %计算卷积和f的非零样值的宽度k=k0:k0+k3 %确定卷积和f非零样值的序号向量subplot(2,2,1)stem(k1,f1) %在子图1绘序列f1(k)时域波形图title('f1(k)')xlabel('k')ylabel('f1(k)')subplot(2,2,2)stem(k2,f2) %在子图2绘序列f2(k)时波形图title('f2(k)')xlabel('k')ylabel('f2(k)')subplot(2,2,3)stem(k,f); %在子图3绘序列f(k)的波形图title('f1(k)与f2(k)的卷积和f(k)')xlabel('k')ylabel('f(k)')对于下面两个离散序列,我们可以调用dconv( )函数来求离散序列的卷积。