利用MATLAB 求解卷积的方法分类 求法一:

求有序列A (n )=1 n=3,4,5,6,7,8,9,,10,11,1,2.B(n)=1 n=2,3,4,5,6,7,8,9,. 代码:

n1=3;n2=12;

>> m1=2;m2=9;

>> a=ones(1,(n2-n1+1));

>> b=ones(1,(m2-m1+1));

>> c=conv(a,b);

>> nc1=n1+m1;nc2+m2+n2;

nc1=n1+m1;nc2=m2+n2;

>> kc=nc1:nc2;

>> kc,c

stem(kc,c),text(18,6,'非平凡法')

>> CC=[zeros(1,kc(1)),c];

kc=0:(n2+m2);

>> stem(kc,CC),text(18,6,'非平凡法')

求法二:

N1=3;N2=12;

a=ones(1,N2+1);a(1:N1)=0;

M1=2;M2=9;

b=ones(1,M2+1);b(1:M1)=0;

c=conv(a,b);

kc=0:(N2+M2);

kc,c

subplot(2,1,1),stem(kc,c),text(20,6,'0 起点法')

求法三:

求有限序列与无限序列的卷积

clear

>> M=4;

>> h=[0.1,0.35,-0.42,-0.05,0.15];

>> N=10000;

>>rng default %恢复matlab 启动时默认的全局随机流。

>> u=randsrc(1,N);

>>tic

>> y_filter=filter(h,1,u);

>> t_filter=toc;

>> tic

>> ct=[u(1),zeros(1,M)];

>> ut=toeplitz(ct,u);

>> y_toe=h*ut;

>> t_toe=toc;

>> %卷积指令法

>> tic

>> y_conv=conv(h,u);

>> t_conv=toc;

>> y_conv(N+1:end)=[];

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)

[Y,Zf] = filter(B,A,X,Zi),输入X 为滤波前序列,Y 为滤波结果序列,B/A 提供滤波器系数,B 为分子, A 为分母,

在MATLAB 中,可以用函数y=filter(p,d,x)实现差分方程的仿真,也可以用函数 y=conv(x,h)计算卷积,用y=impz(p,d,N)求系统的冲激响应。

实现差分方程

先从简单的说起:

filter([1,2],1,[1,2,3,4,5])

实现 y[k]=x[k]+2*x[k-1]

y[1]=x[1]+2*0=1%(x[1]之前状态都用0)

y[2]=x[2]+2*x[1]=2+2*1=4

a. 下面程序是用来实现h 和x 的卷积得,分别用了filter 和conv 函数,两者函数得出的结果一样。

h = [3 2 1 -2 1 0 -4 0 3]; % impulse response

x = [1 -2 3 -4 3 2 1]; % 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;

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;

要实现下式的冲击响应和阶跃响应,可以分别采用三种方法。

y[n]+0.75y[n-1]+0.125y[n-2]=x[n]-x[n-1]。

b. 单位冲激响应:

(1)用filter 函数

a1=[1,0.75,0.125];

b1=[1,-1];

n=0:20;

x1=[1 zeros(1,20)];

y1filter=filter(b1,a1,x1);

stem(n,y1filter);

title('y1filter');

xlabel('x');

ylabel('y');

(2)用conv 函数

a1=[1,0.75,0.125];

b1=[1,-1];

x1=[1 zeros(1,10)];

[h]=impz(b1,a1,10);

y1conv=conv(h,x1);

n=0:19;

stem(n,y1conv,'filled')

(3)用impz 函数

a1=[1,0.75,0.125];

b1=[1,-1];

impz(b1,a1,21);

c. 单位阶跃响应:

(1)用filter 函数

a1=[1,0.75,0.125];

b1=[1,-1];

n=0:20;

x2=ones(1,21);

y1filter=filter(b1,a1,x2);

stem(n,y1filter);

title('y1filter_step');

xlabel('x');

ylabel('y');

(2)用conv 函数

a1=[1,0.75,0.125];

b1=[1,-1];

x2=ones(1,21);

[h]=impz(b1,a1,20);

y1=conv(h,x2);

y1conv=y1(1:21); %为何y1conv 要取y1中1:21的值,解释见

n1=0:20; %y2à单位阶跃响应à用conv 函数中注释

stem(n1,y1conv,'filled');

title('y1conv');

xlabel('n');

ylabel('y1[n]');

(3)用impz 函数

a=[1,0.75,0.125];

b=1;

impz(b,a)

即y=filter(p,d,x)用来实现差分方程,d 表示差分方程输出y 的系数,p 表示输入x 的系数,而x 表示输入序列。输出结果长度数等于x 的长度。

而y=conv(x,h)是用来实现卷级的,对x 序列和h 序列进行卷积,输出的结果个数等于x 的长度与h 的长度之和减去1。

y=impz(p,d,N)是用来实现冲击响应的,d 和p 的定义见filter ,N 表示冲击响应输出的序列个数。

使用matlab如何求卷积,利用MATLAB求解卷积的方法分类相关推荐

  1. matlab里面求线性方程组,利用matlab求线性方程组.doc

    利用matlab求线性方程组.doc MATLAB语言课成论文利用MATLAB求线性方程组姓名郭亚兰学号12010245331专业通信工程班级2010级通信工程一班指导老师汤全武学院物电学院完成日期2 ...

  2. 利用Matlab进行灰色预测,利用matlab进行灰色预测.pdf

    利用matlab进行灰色预测,灰色预测matlab程序,灰色预测模型matlab,matlab灰色预测,matlab灰色预测代码,matlab灰色预测工具箱,灰色预测的matlab程序,matlab灰 ...

  3. matlab ploty,matlab绘制函数 如何利用matlab的ploty

    最近有网友提出"matlab绘制函数 如何利用matlab的ploty"等问题,小小知识站提取了各大知名网站有关"matlab绘制函数 如何利用matlab的ploty& ...

  4. matlab怎么求三次微分,matlab课设三阶微分方程多种方法求解.doc

    matlab课设三阶微分方程多种方法求解 目录 一.课程设计题目及意义 -------- 1 页 二.课程设计任务及要求 --------2 页 三.课程设计详细过程及结果 --------3至10页 ...

  5. matlab或_如何利用MATLAB计算圆周率

    圆周率是圆的周长与直径的比值,一般用希腊字母π表示,是一个在数学及物理学中普遍存在的数学常数.π也等于圆形之面积与半径平方之比.是精确计算圆周长.圆面积.球体积等几何形状的关键值. MATLAB中的表 ...

  6. matlab怎么求标准化特征向量,matlab特征向量标准化

    % S1: S2: S3: S4: AHP 的 matlab 程序实现构造比较矩阵 求特征根和特征向量 求得最大特征根的特征向量 做一致性检验 clear; A=[1 1.2 1.5 1.5; % . ...

  7. matlab 断层 体三维重建,利用MATLAB实现CT断层图像的三维重建

    利用MATLAB实现CT断层图像的三维重建 2期 曾 筝等:利用MATLAB实现CT断层图像的三维重建 25 因此,本文介绍了基于MATLAB进行三维表面重建及体重建的方法,实现起来灵活.方便,便于掌 ...

  8. matlab最小错误率决策,利用MATLAB实现最小错误率贝叶斯判别

    利用MATLAB实现最小错误率贝叶斯判别 摘要:matlab软件平台为用户提供了强大的科学计算与可视化功能,具有简单.易用的用户环境,尤其适合矩阵数据的计算处理.根据matlab的特点,将其与模式识别 ...

  9. matlab 曲线拟合求导,基于matlab曲线拟合的数据预测分析

    龙源期刊网 http://www.doczj.com/doc/2f22f716cbaedd3383c4bb4cf7ec4afe05a1b148.html 基于matlab曲线拟合的数据预测分析 作者: ...

  10. matlab模拟线圈电磁场,利用MATLAB的PDE工具箱对电场和磁场进行模拟

    中学物理Vol. 32 No.巧 疑的态度,认为弊大于利,笔者认为这些想法不无道理,只是大家的关注点应该在于如何更好发挥它的优势,而避免它的不足.在实践的过程中笔者有以下心得和体会,与大家分享: 3, ...

最新文章

  1. 里程碑!SpaceX 载人首飞发射成功,马斯克填补美国载人飞行近十年空白
  2. 一次SQLSERVER触发器编写感悟
  3. python编程入门p-Python是什么?简单了解pythonp-入门
  4. stm32f4之GPIO
  5. ALGORITHM IMPORTANT QUESTIONS
  6. Beyond的歌里最多是唏嘘吗? - Python分词+词频
  7. 为了更高效的开发代码,这里列出了一些webstorm的快捷键和zencoding
  8. html%3c arial%3e,【博客园】样式美化+网站统计访问+添加网易云背景音乐
  9. 操作系统的 (program)loader(程序加载器)
  10. 【机器人】关于驱动器与控制器的工作机制
  11. Java实现经典坦克大战及源代码下载
  12. Windows下C语言多线程函数_beginthread简单入门应用例子
  13. iOS清理缓存的简单实现
  14. 什么是SDK? SDK是什么意思?(转)
  15. 计算机里s大小,衣服上的S,M,L代表m或l多大
  16. MUI中微信支付必须用自有的 Android程序签名详解、打包、发布到Google play步骤
  17. RLC振荡原理与RC Snubber吸收电路
  18. html怎么进入阅读模式,怎么用浏览器看小说进入阅读模式
  19. 将DXSDK的帮助文档加入到VS6的MSDN中
  20. GitHub中的repositories如何删除?

热门文章

  1. PHP里面用ichartjs,ichartjs插件的使用
  2. 【源码】手把手教你用Python实现Vivado和ModelSim仿真自动化
  3. matlab,python 写kml文件(点,线,多边形)
  4. Matlab2017a/b激活license.lic文件
  5. 总线通信协议-PCIe
  6. 奋斗了四年的 NB-IOT 怎么让 Cat.1 成了最靓的仔?
  7. 用AI「驯服」人类幼崽,手头有娃的可以试试
  8. 读书笔记:《稻盛和夫 阿米巴经营 人人都是经营的主角》
  9. 华为性格测试通关指南
  10. 高等数学学习笔记——第五十七讲——平面与直线的位置关系