文档库 最新最全的文档下载
当前位置:文档库 › 信号的时域表示以及卷积运算(MATLAB)

信号的时域表示以及卷积运算(MATLAB)

信号的时域表示以及卷积运算(MATLAB)
信号的时域表示以及卷积运算(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_t

n1 = 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时,元素都为1

subplot(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_u

hls = exp(-0.1*(1:15)); %建立一个长度为15的向量hls

Length_h = length(hls); %把向量hls的长度赋给Length_h

lmax = max(Length_u,Length_h); %把向量u的长度与向量h的长度中的最大值赋给lmax

%if end 语句确定了nh与nu的值,用于下面的向量u与向量h中,保证两者长度相等

if Length_u>Length_h

nu=0; nh = Length_u - Length_h;

elseif Length_u

nh=0; nu = Length_h - Length_u;

else

nu=0; nh=0;

end%nh=0 nu=5

dt = 0.5;

lt = lmax;%把向量u的长度与向量h的长度中的最大值赋给lt

u = [zeros(1,lt),uls,zeros(1,nu),zeros(1,lt)];% 建立一个长度为45的向量,uls的值在中间,易于卷积

t1 = (-lt+1:2*lt)*dt;%建立了一个长度为45,步长为0.5的向量,从-7到15

h = [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,在第一部分画出要进行卷积的函数u

axis([-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

图像截图:

矩形脉冲信号与锯齿波信号的卷积

实验步骤:

>> clear

dt=0.001; 时间间隔

t=0:dt;1; 变化范围

f1=(t>0&t<1); 矩形脉冲

subplot(311); 分割版面

plot(t,f1);grid on

xlabel('t'),ylabel('f1'),title('矩形脉冲');

axis([-0.3,1.7,0,1.2]);

f2=(t>0&t<1).*t; 锯齿波

subplot(312);

plot(t,f2);grid on

xlabel('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 on

xlabel('x'),ylabel('f3'),title('卷积');

axis([-0.3,1.7,0,1.2]);

图像截图:

实验四-使用matlab实现卷积的运算

一 实验目的 1、 学习MATLAB 语言的编程方法及熟悉MATLAB 指令; 2、 深刻理解卷积运算,利用离散卷积实现连续卷积运算; 二 实验内容 1、 完成)(1t f 与)(2t f 两函数的卷积运算 其中:)4()()(), ()(221--==-t u t u t f t u e t f t 在一个图形窗口中,画出)(1t f 、)(2t f 以 及卷积结果。要求每个坐标系有标题、坐标轴名称。 p = ; %定义时间间隔 t= 0:p:10; %定义时间向量 f1=exp(-2*t).*u(t); %将f (t )表示出来 f2=u(t)-u(t-4); f=conv(f1,f2); subplot(1,2,1); plot(t,f1,t,f2); title('f1=e^-2t*u(t)'' / ''f2=u(t)-u(t-4)'); xlabel('t(sec)'); % 这行代码是给出x 坐标的标签 ylabel('f(t)'); grid on ; subplot(1,2,2); plot(f); title('f=f1*f2'); xlabel('t(sec)'); % 这行代码是给出x 坐标的标签 ylabel('f') grid on

2、 若系统模型为: )(3)()(4)(4)(' ' ' 't f t f t y t y t y +=++ 其中 )()(t u e t f t -= 求零状态响应,画出波形(函数本身画出一幅图,自己再画出一幅输入波形图)。 零状态响应: a= [1 4 4]; %将y (t )各阶导数的系数放在向量a 中 b= [1 3]; %将f (t )各阶导数的系数放在向量b 中 sys = tf(b, a); %求系统函数sys td = ; %定义时间间隔 t = 0 : td : 10; %定义时间向量 f = exp(-t).*u(t); %将f (t )表示出来 y = lsim(sys, f, t); %求系统的零状态响应y plot(t, y); %绘出零状态响应的波形 xlabel('t(sec)'); % 这行代码是给出x 坐标的标签 ylabel('y(t)'); % 这行代码是给出y 坐标的标签 grid on

matlab实现卷积运算

2、试求下列图片的卷积波形12()()f t f t * 2() f t t 1 -1 1() f t t 1 -1 列出编程步骤: p=0.01; k1=0:p:1; f1=ones(1,length(k1)); k2=-1:p:1; f2= (k2+1).*(k2<0)+(-k2+1).*(k2>=0); [f,k]=sconv(f1,f2,k1,k2,p) function [f,k]=sconv(f1,f2,k1,k2,p) 3、试求下列图片的卷积波形12()()f t f t *

1() f t t 1 0.5- 2() f t t 12 1 p=0.01; k1=-0.5:p:1; f1=ones(1,length(k1)); k2=0:p:2; f2= 0.5*k2; [f,k]=sconv(f1,f2,k1,k2,p) 4、试求下列图片的卷积波形12()()f t f t *

1() f t t 2 2 - 2() f t t 3-2 -3 21 p=0.01; k1=-2:p:2; f1= (k1==-2)+(k1==2); k2=-3:p:3; f2=(k2+3).*(k2<-2)+(-k2-1).*(k2>=-2).*(k2<=-1)+(k2-1).*(k2>=1).*(k2<=2)+(-k2+3).*(k2>2); [f,k]=sconv(f1,f2,k1,k2,p); 5、试求下列图片的卷积波形12()()f t f t *

1() f t t 5 -5 33 -2() f t t 3 -2 -3 21 p=0.01; k1=-10:p:10; f1=(k1>=-5).*(k1<=-3)+(k1>=3).*(k1<=5); k2=-3:p:3; f2=(k2+3).*(k2<-2)+(-k2-1).*(k2>=-2).*(k2<=-1)+(k2-1).*(k2>=1).*(k2<=2)+(-k2+3).*(k2>2); [f,k]=sconv(f1,f2,k1,k2,p);

利用MATLAB实现循环卷积.doc

一、实验目的 1.利用MATLAB 实现循环卷积。 2.比较循环卷积与线性卷积的区别。 二、实验条件 PC 机,MATLAB7.0 三、实验内容 1)循环卷积的定义:两个序列的N 点循环卷积定义为: )0()()()]()([1 0N n m n x m h n x n h N k N N <≤-=?∑-= 利用MATLAB 实现两个序列的循环卷积可以分三个步骤完成: (1)初始化:确定循环点数N ,测量输入2个序列的长度。 (2)循环右移函数:将序列x(n)循环右移,一共移N 次(N 为循环卷积的循环次数),最后将每次循环成的新序列组成一个矩阵V 。 (3)相乘:将x(n)移位后组成的矩阵V 与第二个序列h(n)对应相乘,即得循环卷积结果。程序如下: 程序一: clear;close all ; N=10; x1=[6 15 -6 3 5 7 0 1]; x2=[7 1 2 9 4 3 20 6]; xn1=length(x1); xxn1=0:xn1-1; xn2=length(x2); xxn2=0:xn2-1; subplot(3,1,1); stem(xxn1,x1); subplot(3,1,2); stem(xxn2,x2); x11=fft(x1,N);

x12=fft(x2,N); y11=x11.*x12; y1=ifft(y11,N); subplot(3,1,3); n=0:length(y1)-1; stem(n,y1,'.'); title('循环卷积的结果'); xlabel('n');ylabel('y1(n)'); 运行后所得图形如下: 观察所得的循环卷积结果发现并没有呈现周期性的序列,因此将程序做下列改变。程序二: clear;close all; N=40; x1=[6 15 -6 3 5 7 0 1]; x2=[7 1 2 9 4 3 20 6]; x2=[x2,x2,x2,x2]; xn1=length(x1); xxn1=0:xn1-1; xn2=length(x2); xxn2=0:xn2-1; subplot(3,1,1);

基于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);%输入任意序列并计算长度M hn=[1,1,1,1]; N=length(hn);%输入任意脉冲响应并计算长度N m=[-(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;

用matlab实现两个离散序列的卷积(不使用conv函数)

作业2.用matlab实现离散序列的卷积. N=14; n=[1:N-1]; f=1/16; signal1=5*sin(2*pi*n/8); figure(1); subplot(3,1,1) stem(n,signal1);title( ' 信号1' );xlabel( 'n' );ylabel( axis([0 15 -6 6]) long_M=5; signal2=ones(1,long_M); subplot(3,1,2) stem(signal2);title( ' 信号2' );xlabel( 'n' );ylabel( axis([0 6 -2 2]); grid on; long_N=length(signal1); fk=zeros(0,long_N+long_M+10); if (long_N>long_M) for k=1:1:long_N+long_M-1 a=0; if (k<=long_N) for i=1:1:k if (i>long_M) fk(k)=a; else fk(k)=a+signal2(i)*signal1(k-i+1); a=fk(k); end end else for i=1:1:k if (k-long_N+i>long_M) fk(k)=a; else fk(k)=a+signal2(k-long_N+i)*signal1(long_N-i+1); a=fk(k); end end end end end subplot(3,1,3) stem(fk);title( ' 卷积函数的实现' );xlabel( 'n' );ylabel( 'y(n)' ); 'y(n)' ); 幅度' );

卷积码matlab程序

卷积编码程序: function [output, len_tal] = cnv_encd(secrettext, encodetext) g = [0 0 1 0 0 1 0 0; 0 0 0 0 0 0 0 1; 1 0 0 0 0 0 0 1; 0 1 0 0 1 1 0 1]; k0 = 1; % 读入文本文件并计算文件长度 frr = fopen(secrettext, 'r'); [msg, len] = fread(frr, 'ubit1'); msg = msg'; % check to see if extra zero padding is necessary if rem(length(msg), k0) > 0 msg = [msg, zeros(size(1:k0-rem(length(msg),k0)))]; end n = length(msg)/k0; % 把输入比特按k0分组,n为所得的组数。 % check the size of matrix g if rem(size(g, 2), k0) > 0 error('Error, g is not of the right size.'); end % determine L and n0 L = size(g, 2)/k0; n0 = size(g, 1); % add extra zeros,以保证编码器是从全0开始,并回到全0状态。 u = [zeros(size(1:(L-1)*k0)), msg, zeros(size(1:(L-1)*k0))]; % generate uu, a matrix whose columns are the contents of conv. encoder at % various clock cycles. u1 = u(L*k0: -1 :1); for i = 1:n+L-2 u1 = [u1, u((i+L)*k0:-1:i*k0+1)]; end uu = reshape(u1, L*k0, n+L-1); % determine the output output = reshape(rem(g*uu, 2), 1, n0*(L+n-1)); len_tal = n0*(L + n - 1);

MATLAB实现卷积码编译码-

本科生毕业论文(设计) 题目:MATLAB实现卷积码编译码 专业代码: 作者姓名: 学号: 单位: 指导教师: 年月日

目录 前言----------------------------------------------------- 1 1. 纠错码基本理论---------------------------------------- 2 1.1纠错码基本理论 ----------------------------------------------- 2 1.1.1纠错码概念 ------------------------------------------------- 2 1.1.2基本原理和性能参数 ----------------------------------------- 2 1.2几种常用的纠错码 --------------------------------------------- 6 2. 卷积码的基本理论-------------------------------------- 8 2.1卷积码介绍 --------------------------------------------------- 8 2.1.1卷积码的差错控制原理----------------------------------- 8 2.2卷积码编码原理 ---------------------------------------------- 10 2.2.1卷积码解析表示法-------------------------------------- 10 2.2.2卷积码图形表示法-------------------------------------- 11 2.3卷积码译码原理---------------------------------------------- 15 2.3.1卷积码三种译码方式------------------------------------ 15 2.3.2V ITERBI译码原理---------------------------------------- 16 3. 卷积码编译码及MATLAB仿真---------------------------- 18 3.1M ATLAB概述-------------------------------------------------- 18 3.1.1M ATLAB的特点------------------------------------------ 19 3.1.2M ATLAB工具箱和内容------------------------------------ 19 3.2卷积码编码及仿真 -------------------------------------------- 20 3.2.1编码程序 ---------------------------------------------- 20 3.3信道传输过程仿真-------------------------------------------- 21 3.4维特比译码程序及仿真 ---------------------------------------- 22 3.4.1维特比译码算法解析------------------------------------ 23 3.4.2V ITERBI译码程序--------------------------------------- 25 3.4.3 VITERBI译码MATLAB仿真----------------------------------- 28 3.4.4信噪比对卷积码译码性能的影响 -------------------------- 28

用MATLAB实现序列圆周卷积

数字信号处理实验报告 实验项目名称:用MATLAB实现序列的圆周卷积 实验日期: 2012-11-28 实验成绩: 实验评定标准: 一、实验目的 通过本实验,掌握一些基本而且重要的离散时间信号,熟悉基本离散时间信号的MATLAB实现方法。 二、实验器材 PC机,MATLAB软件。 三、实验内容 计算两序列x1(n)={1,2,3,4,5},x2(n)={1,2,3,4,5,4,3,2,1}的圆周卷积。 四、实验结果 实验代码: clear all close all clc x1=[1,2,3,4,5,6,7,8]; x2=[1,2,3,4,5,6,7,8,7,6,5,4,3,2, 1]; N=length(x1)+length(x2); n=0:N-1 n1=0:N-2; n2=0:N-3; y1=circonvt(x1,x2,N); y2=circonvt(x1,x2,N-1);

y3=circonvt(x1,x2,N-2); x1=[x1 zeros(1,N-length(x1))]; x2=[x2 zeros(1,N-length(x2))]; Xf1=dft(x1,N); Xf2=dft(x2,N); Xf=Xf1.*Xf2; x=idft(Xf,N); x=real(x); subplot(2,3,1) stem(n,x1); title('x1(n)'); subplot(2,3,2) stem(n,x2); title('x2(n)') subplot(2,3,3); stem(n,x); title('x(n)=IDFT(X(k))'); subplot(2,3,4); stem(n,y1); title('N点圆周卷积'); subplot(2,3,5); stem(n1,y2); title('N-1点圆周卷积'); subplot(2,3,6); stem(n2,y3); title('N-2点圆周卷积'); function y=circonvt(x1,x2,N) if length(x1)>N error('N 必须 >= x1的长度') end if length(x2)>N error('N 必须 >= x2的长度') end x1=[x1 zeros(1,N-length(x1))]; x2=[x2 zeros(1,N-length(x2))]; m=[0:1:N-1]; x2=x2(mod(-m,N)+1); H=zeros(N,N); for n=1:1:N H(n,:)=cirshift(x2,n-1,N); end y=x1*H; function y=cirshift(x,m,N) if length(x)>N error('N 必须 >= x的长度') end x=[x zeros(1,N-length(x))]; n=[0:1:N-1]; n=mod(n-m,N); y=x(n+1); function [Xk]=dft(xn,N) n=[0:1:N-1];k=[0:1:N-1]; WN=exp(-j*2*pi/N); nk=n'*k; WNnk=WN.^nk; Xk= xn * WNnk; function [xn]=idft(Xk,N) %计算逆离散傅里叶变换 %[xn]=idft(Xk,N) n=[0:1:N-1];

用matlab计算序列卷积和并绘图

(一)实验目的:学会用MATLAB对信号与系统分析的方法,理解离散序列卷积和的计算对进行离散信号与系统分析的重要性。 (二)实验原理: 1、离散时间序列f1(k)和f2(k)的卷积和定义: f(k)=f1(k)*f2(k)=∑∞ -∞ = -? i i k f i f) ( 2 ) ( 1 2、在离散信号与系统分析中有两个与卷积和相关的重要结论: a、f(k)= ∑∞ -∞ = -? i i k i f) ( ) (δ=f(k)* δ(k)即离散序列可分解为一系列 幅度由f(k)决定的单位序列δ(k)及其平移序列之积。 b、对线性时不变系统,设其输入序列为f(k),单位响应为h(k),其零状 态响应为y(k),则有:y(k)= ∑∞ -∞ = -? i i k h i f) ( ) ( 3、上机:conv.m用来实现两个离散序列的线性卷积。 其调用格式是:y=conv(x,h) 若x的长度为N,h的长度为M,则y的长度L=N+M-1。 (三)实验内容 1、题一:令x(n)= {}5,4,3,2,1,h(n)={}246326, , , , ,,y(n)=x(n)*h(n),求y(n)。 要求用subplot和stem画出x(n),h(n),y(n)与n的离散序列图形。 源程序: N=5; M=6; L=N+M-1; x=[1,2,3,4,5]; h=[6,2,3,6,4,2]; y=conv(x,h); nx=0:N-1; nh=0:M-1; ny=0:L-1; subplot(131); stem(nx,x,'*k'); xlabel('n'); ylabel('x(n)'); grid on ; subplot(132); stem(nh,h,'*k'); xlabel('n'); ylabel('h(n)'); grid on ; subplot(133); stem(ny,y,'*k'); xlabel('n'); ylabel('y(n)'); grid on ; 实验结果:

MATLAB计算卷积

本科实验报告 实验名称:MATLAB计算卷积 学员:学号: 培养类型:技术类年级: 2008级 专业:电子工程所属学院:电子科学与工程学院指导教员:职称:教授 实验室:实验日期: 2010年12月23日 国防科学技术大学训练部制

实验一 MATLAB 计算卷积 一. 实验目的 通过MATLAB 卷积程序的编写, 学会使用计算机软件编程来处理信号(即信号的采样与计算)并进一步了解信号卷积计算的方法与步骤,以更好地理解信号与系统课程知识理论,加强理论与实践的结合。 二. 实验要求 使用MATLAB 编写主程序和卷积函数,实现两个信号的卷积运算。要求: 1. 程序必须对任意两个函数信号都适用; 2. 结果必须是至少两个信号的卷积。 三. 实验平台 笔记本电脑 MATLAB 软件平台 四. 实验原理 信号卷积的计算公式为 可通过图形变换的方法来计算两个信号的卷积。 用图解法求解卷积的步骤是:翻转、滑动、相乘、积分。 a. 确定卷积结果的分段时限; b. 确定每段中积分的上下限; c. 确定每段中积分函数的表达式具体实现如下图 ()()()()()c t f t g t f g t d τττ ∞-∞ =*= -?

五. 实验内容 对于信号 计算其卷积 六. 实验分析 (1)根据题目要求输入信号,观察信号和卷积结果的波形表示。 信号f 的波形为 2000007 6 6 02 0 0 other Pair 1: = 15 w here 1010 1010 2010ππτ τττ-?+≤≤=? ?-+-==?=?=?* exp()()()()(.)()() .,,./f t kt t s t s t s t s t g t s t f H z s k M H z s

用MATLAB实现线性卷积运算

北京邮电大学 实验报告 实验名称:用MATLAB实现线性卷积运算学院:信息与通信工程学院 班级: 姓名: 学号: 日期:2012年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所示。

实验二优选资料连续时间信号卷积运算的MATLAB实现

实验二连续时间信号卷积运算的M A T L A B实现 一.实验目的 (1)理解掌握卷积的概念及物理意义。 (2)理解单位冲激响应的概念及物理意义。 二.实验原理 三.实验参考程序 用MATLAB实现连续信号f1(t)和f2(t)卷积。首先利用MATLAB实现连续信号卷积的通用函数sconv(): function[f,k]=sconv(f1,f2,k1,k2,p); f=conv(f1,f2); f=f*p; k0=k1(1)+k2(1); k3=length(f1)+length(f2)-2; k=k0:p:k3*p; subplot(2,2,1); plot(k1,f1); title('f1(t)'); xlabel('t'); ylabel('f1(t)'); subplot(2,2,2); plot(k2,f2); title('f2(t)'); xlabel('t'); ylabel('f2(t)'); subplot(2,2,3); plot(k,f); h=get(gca,'position'); h(3)=*h(3); set(gca,'position',h); title('f(t)=f1(t)*f2(t)'); xlabel('t'); ylabel('f(t)'); 例2-1 已知两连续时间信号,试用MATLAB求f(t)=f1(t)*f2(t),并绘出f(t)的时域波形图。 实现上述过程的MATLAB命令如下: p=; k1=0:p:2; f1=*k1;

k2=k1; f2=f1; [f,k]=sconv(f1,f2,k1,k2,p); 运行程序结果图: 而当p=时连续时间信号的波形图为 对比上面两幅图可见,当抽样时间p 足够小时,函数sconv()的计算结果就是连续时间卷积 )(*)()(21t f t f t f =的较好的数值近似。 四.实验要求 在课本卷积部分课后习题中任选两题,完成信号的卷积运算,绘出波形。 已知两连续时间信号如图所示,使用MATLAB 求()()()12f t f t f t =*,并绘出()f t 的时域波形图。 五.实验心得 通过本次实验我学会使用MATLAB 软件,并用软件实现了的连续时间信号的卷积运算,且进一步理解了卷积的概念和物理意义,对我以后学习卷积知识有了很大的帮助。

实验五 使用matlab实现卷积的运算

实验五 使用matlab 实现卷积的运算 一 实验目的 1、 学习MATLAB 语言的编程方法及熟悉MA TLAB 指令; 2、 深刻理解卷积运算,利用离散卷积实现连续卷积运算; 二 实验内容 1、 完成)(1t f 与)(2t f 两函数的卷积运算 其中:)4()()(), ()(221--==-t u t u t f t u e t f t 在一个图形窗口中,画出)(1t f 、 )(2t f 以及卷积结果。要求每个坐标系有标题、坐标轴名称。 >> p=0.1; t=0:p:10; f1=exp(-2*t).*u(t); f2=u(t)-u(t-4); f=conv(f1,f2); subplot(1,3,1); plot(t,f1,'r'); title('f1(t)=e^-2*t*u(t)'); xlabel('t(sec)'); ylabel('f1(t)'); subplot(1,3,2); plot(t,f2,'g'); title('f2(t)=u(t)-u(t-4)'); xlabel('t(sec)'); ylabel('f2(t)'); subplot(1,3,3); plot(f); title('f(t)=f1(t)*f2(t)'); xlabel('t(sec)'); ylabel('f(t)');

05100 0.10.20.30.40.5 0.6 0.70.8 0.9f1(t)=e - 2*t*u(t)t(sec) f 1(t ) 510 0.10.20.30.4 0.50.6 0.70.80.9 1f2(t)=u(t)-u(t-4) t(sec) f 2(t ) 0200400 0.511.522.53 3.54 4.5 5f(t)=f1(t)*f2(t) t(sec) f (t ) 2、 若系统模型为: )(3)()(4)(4)(' ' ' 't f t f t y t y t y +=++ 其中 )()(t u e t f t -= 求零状态响应,画出波形(函数本身画出一幅图,自己再画出一幅输入波形图)。 a=[1 4 4]; b=[1 3]; sys=tf(b,a); td=0.01; t=0:td:10; f=exp(-t).*u(t); y=lsim(sys,f,t); plot(t,y); xlabel('t(sec)'); ylabel('y(t)');

实验三 信号卷积的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所示。 图3.1 p=1.5的sint近似波形 图3.2 p=0.01的sint近似波形

卷积神经网络CNN代码解析-matlab

卷积神经网络CNN代码解析 deepLearnToolbox-master是一个深度学习matlab包,里面含有很多机器学习算法,如卷积神经网络CNN,深度信念网络DBN,自动编码AutoEncoder(堆栈SAE,卷积CAE)的作者是Rasmus Berg Palm (rasmusbergpalm@https://www.wendangku.net/doc/808284478.html,) 代码下载:https://https://www.wendangku.net/doc/808284478.html,/rasmusbergpalm/DeepLearnToolbox 这里我们介绍deepLearnToolbox-master中的CNN部分。 DeepLearnToolbox-master中CNN内的函数: 调用关系为: 该模型使用了mnist的数字mnist_uint8.mat作为训练样本,作为cnn的一个使用样例, 每个样本特征为一个28*28=的向量。

网络结构为: 让我们来看看各个函数: 一、Test_example_CNN: (2) 三、cnntrain.m (5) 四、cnnff.m (6) 五、cnnbp.m (7) 五、cnnapplygrads.m (10) 六、cnntest.m (11) 一、Test_example_CNN: Test_example_CNN: 1设置CNN的基本参数规格,如卷积、降采样层的数量,卷积核的大小、降采样的降幅 2 cnnsetup函数初始化卷积核、偏置等 3 cnntrain函数训练cnn,把训练数据分成batch,然后调用 3.1 cnnff 完成训练的前向过程,

3.2 cnnbp计算并传递神经网络的error,并计算梯度(权重的修改量) 3.3 cnnapplygrads 把计算出来的梯度加到原始模型上去 4 cnntest 函数,测试当前模型的准确率 该模型采用的数据为mnist_uint8.mat, 含有70000个手写数字样本其中60000作为训练样本,10000作为测试样本。把数据转成相应的格式,并归一化。 设置网络结构及训练参数 初始化网络,对数据进行批训练,验证模型准确率 绘制均方误差曲线 二、Cnnsetup.m 该函数你用于初始化CNN的参数。 设置各层的mapsize大小, 初始化卷积层的卷积核、bias 尾部单层感知机的参数设置 * bias统一设置为0

离散序列卷积(matlab实现)

离散序列卷积(matlab实现)

————————————————————————————————作者:————————————————————————————————日期:

数字信号处理实验报告 实验一 离散时间序列卷积和MATLAB 实现 (一)实验目的:学会用MATLAB 对信号与系统分析的方法,理解离散序列卷积和的计算对进行离散信号与系统分析的重要性。 (二)实验原理: 1、离散时间序列f1(k)和f2(k)的卷积和定义: f(k)=f1(k)*f2(k)= ∑∞ -∞ =-? i i k f i f )(2)(1 2、在离散信号与系统分析中有两个与卷积和相关的重要结论: a 、f(k)= ∑∞ -∞ =-?i i k i f )()(δ=f(k)* δ(k)即离散序列可分解为一系列 幅度由f(k)决定的单位序列δ(k)及其平移序列之积。 b 、对线性时不变系统,设其输入序列为f(k),单位响应为h(k),其零状 态响应为y(k),则有:y(k)= ∑ ∞ -∞ =-?i i k h i f )()( 3、上机:conv.m 用来实现两个离散序列的线性卷积。 其调用格式是:y=conv(x,h) 若x 的长度为N ,h 的长度为M ,则y 的长度L=N+M-1。 (三)实验内容 1、题一:令x(n)= { }5,4,3,2,1,h(n)={}246326,,,,,,y(n)=x(n)*h(n),求y(n)。 要求用subplot 和stem 画出x(n),h(n),y(n)与n 的离散序列图形。 源程序: N=5; M=6; L=N+M-1; x=[1,2,3,4,5]; h=[6,2,3,6,4,2]; y=conv(x,h); nx=0:N-1; nh=0:M-1; ny=0:L-1; subplot(131); stem(nx,x,'*k'); xlabel('n'); ylabel('x(n)'); grid on ; subplot(132); stem(nh,h,'*k'); xlabel('n'); ylabel('h(n)'); grid on ; subplot(133); stem(ny,y,'*k'); xlabel('n'); ylabel('y(n)'); grid on ;

利用MATLAB编写卷积函数myconv.docx

一、实验目的 1 .了解MATLAB的基本操作。 2.利用MATLAB实现正弦信号采样; 3.利用MATLAB编写卷积函数my con V。 二、实验条件 PC 机,MATLAB7.0 三、实验内容 (-)函数文件与脚本文件的定义,正弦信号的釆样 函数文件代码: function seqs=mysampling(Fs z L, Fx) t=l/Fs:l/Fs:L/Fs; t1=0:0.001:L/Fs; x=sin(2*pi*Fx*t); xl=sin(2*pi*Fx*tl); plot(t1,xl),hold on;stem(t,x,1r1);hold off; 脚本文件代码: Fs=40; Fx=20; L=15; for Fx=20:10:80, mysampling(Fs, L, Fx); pause, End 运行结果:

1 08 0 6 04 02 -02 -04 06 -0 8 -1 0 0.05 0.1 0 15 02 0.25 0.3 0.35 0.4

实验屮遇到的问题及改正: function seqs=mysampling(Fs,L,Fx) t=1/Fs:1/Fs:L/Fs; x=sin(2*pi*Fx*t); plot(t z x)z hold on;stem(t z x, 1r1);hold off; 一开始并没有添加tl=0 :0.001: L/Fs;xl=sin (2*pi*Fx*tl);两行代码,想利用t=l/Fs:l/Fs:L/Fs;x=sin(2*pi*Fx*t);生成的函数直接作为需要抽样的原函数,但是t的采样间隔太大,没法生成平滑的正弦曲线,所以导致最后仿真岀来的图像中岀现不光滑的正弦曲线。经过思考找出问题后,另外编写了一个正弦函数,设定的采样间隔为0.001后,仿真出来的图像中就出现了光滑的正弦曲线。

快速卷积的MATLAB实现

快速卷积的MATLAB实现 在信号处理中,许多具体的应用是以线性卷积为基础的。当序列点数较少时可以直接计算线性卷积,然而当序列长度很长时,直接计算卷积的运算量非常庞大。快速卷积是实现卷积的一种快速算法,减少了运算量,节约了时间,给我们计算卷积提供了很大的便利。本课程设计是以Matlab为基础,完成序列的卷积和快速卷积运算的编程实现,以及相应的分析和比较。关键字:Matlab 卷积快速卷积目录 1、基于设计题目的原理简介 11、1 序列卷积的定义 11、2 快速傅里叶变换FFT概念 11、3 快速卷积方法及实现 12、程序设计及运行结果分析 32、1 题目一 32、2 题目二 42、3 题目三 73、心得体会10参考文献11专业综合课程设计成绩评定表12 1、基于设计题目的原理简介卷积是数字信号处理(DSP)系统中最常见的,也是最重要的运算之一,无论在时域或频域都离不开卷积运算,FFT是DFT的快速算法,当满足一定条件时可用来

计算线性卷积,称为快速卷积。Matlab具有强大的矩阵运算能力,方便实用的绘图功能和语言的高度集成性,在DSP开发中,使用Matlab可以快速对系统进行仿真运算。 1、1 序列卷积的定义设x(n)和h(n)是两个离散序列,进行下列求和运算: 这样,随着n的不同取值,这个求和公式就定义了一个新序列y(n),称为序列x(n)与h(n)的卷积,记为y(n)=x(n)*h(n) 。 由于DSP主要依靠计算机完成,而计算机无论在时域或频域只能处理有限长的离散信号。此时只需令上述公式中的n在一个范围内取值即可。 1、2 快速傅里叶变换FFT概念DFT就是对序列频谱的离散化,在数字信号处理中有着重要的作用,但直接计算DFT的运算量非常大,它与序列长度的平方成正比,因此制约了DFT的应用。快速傅里叶变换FFT是实现DFT的一种快速算法,能使计算机计算离散傅里叶变换所需要的乘法次数大为减少,特别是被变换的抽样点数N越多,FFT算法计算量的节省就越显著。因而FFT 也有重要的作用,下面一节要介绍的快速卷积就是其应用之一。 1、3 快速卷积方法及实现在信号处理中,许多具体的应用是以线性卷积为基础的。我们知道,当满足一定条件(L≥M+N-1)时,可以用圆周卷积来计算线性卷积。由圆周卷积定理知道,圆周卷积可以借助DFT来运算,因此DFT的快速算法FFT就可以用

相关文档
相关文档 最新文档