MATLAB离散卷积的实现_代码编写_实现两列数的卷积
现有两列数:
x=[4 5 6];
b=[1 2 3];
自己编写代码计算其卷积:x[n]*b[n]
一、实验目的:实现
1.理解离散卷积的计算;
2.使用filter函数将数字信号进行滤波,可以将表示成离散序列的该信号x(n)与数字滤波器的冲激响应h(n)进行卷积,其结果与conv函数进行对比;
3.使用matlab编写程序计算离散函数的卷积
二、实验原理
“离散卷积”是两个离散序列和之间按照一定的规则将它们的有关序列值分别两两相乘再相加的一种特殊的运算。具体可用公式表示为
其中y (n)就是经过卷积运算以后所得到的一个新的序列。根据上式,在运算过程中,要使序列x (n)“不动”,并将自变量改为i ,以表示与卷积结果的自变量n有所区别。而将另外个序列h (n)的自变量改为i以后,再取它的翻转。为求两者的卷积y (n),先将h (-i)在相同的i下与x (i)的每一个值两两相乘再相加,就得到了n = 0时的卷积值y(0)。接下来,将h(-i)向右移动自变量的一个间隔,构成h(1 - i),同样在相同的i下与x (i)的各个值两两相乘再相加,就得到卷积值y(1), .....如此反复,直到所有的序列值都算完为止。其中要注意,对于n≥0的卷积值y(n),要把h(- i)向右移,而对于n < 0的卷积值,要把h(-i)向左移。
三、实验设计及操作
1.使用conv函数计算卷积:
Conv用来计算卷积和多项式乘法,用法:w = conv(u,v),返回向量u和v的卷积。
代码:
a=1; x=[4 5 6]; b=[1 2 3]; y_conv=conv(x,b) |
输出:
y_conv =
4 13 28 27 18
2. 使用filter函数计算卷积
a=1;%y的系数 x=[4 5 6];%输入 b=[1 2 3];%x[n]的系数 y_filter=filter(x,a,b) %使用filter函数 |
结果:y_filter =
4 13 28
3.编写程序计算卷积:
其中y (n)就是经过卷积运算以后所得到的一个新的序列。根据上式,在运算过程中,要使序列x (n)“不动”,并将自变量改为i ,以表示与卷积结果的自变量n有所区别。而将另外个序列h (n)的自变量改为i以后,再取它的翻转。为求两者的卷积y (n),先将h (-i)在相同的i下与x (i)的每一个值两两相乘再相加,就得到了n = 0时的卷积值y(0)。接下来,将h(-i)向右移动自变量的一个间隔,构成h(1 - i),同样在相同的i下与x (i)的各个值两两相乘再相加,就得到卷积值y(1), .....如此反复,直到所有的序列值都算完为止。其中要注意,对于n≥0的卷积值y(n),要把h(- i)向右移,而对于n < 0的卷积值,要把h(-i)向左移。
代码如下:
a=1;%y的系数 x=[4 5 6];%输入 b=[1 2 3];%x[n]的系数 %y_conv=conv(x,b) %使用matlab自带卷积计算结果 %y_filter=filter(x,a,b) %使用filter函数计算结果 x_input=zeros(1,5); %输入向量初始化,用0填充 b_input=zeros(1,5); %系数初始化 for i = 1:1:3 %将x和b前三位设置为正确的数,后两位用0填充,便于相乘 x_input(i)=x(i); b_input(i)=b(i); end y_my_conv=zeros(1,5); %便于位移操作,先将数组定义为长度为5,以0填充的数组 |
for n = 1:1:5 %因为y[n]=sum(x[m]*b[n-m]),共有5个n,故依次计算 b_input_temp = fliplr(b_input); %反转b的数组b_input,并存储 b_input_temp = circshift(b_input_temp,n); %平移b数组,右移n位 y_my_conv(n) = my_conv_n(x_input,b_input_temp);%计算出n时的输出,函数见下面 end y_my_conv %输出结果 function [result]=my_conv_n(param1,param2) %定义卷积函数 result=sum(param1.*param2); %卷积结果为两列数点乘求和 end |
结果如下:
四、实验结果
五、实验总结和提升
1.通过本次实验,更加理解了卷积的应用和意义
2.学习使用matlab在数字信号处理中的应用,这能提高对数字信号处理的质量和效率, MATLAB的应用优势和数字信号处理算法理论,对基于MATLAB的数字信号处理平台架构和处理目标详细分析,最后对数字信号处理中MATLAB的应用进行探究。
MATLAB软件的应用在数字信号处理中发挥积极作用,其与高级语言程序相比有着比较突出的优势,能进行快速地数学计算和数值仿真,并且具有相当多的工具箱,如本次使用到的conv函数和filter函数。matlab能够实现各种对于数字信号处理的功能,有效节省编程时间,大大提高编程的效率。通过此次使用MATLAB软件进行的实验,我对于MATLAB的使用积累了经验,收获很多。
六、源代码
a=1;%y的系数
x=[4 5 6];%输入
b=[1 2 3];%x[n]的系数
y_conv=conv(x,b) %使用matlab自带卷积计算结果
y_filter=filter(x,a,b) %使用filter函数计算结果x_input=zeros(1,5); %输入向量初始化,用0填充
b_input=zeros(1,5); %系数初始化
for i = 1:1:3 %将x和b前三位设置为正确的数,后两位用0填充,便于相乘x_input(i)=x(i);b_input(i)=b(i);
endy_my_conv=zeros(1,5); %便于位移操作,先将数组定义为长度为5,以0填充的数组
for n = 1:1:5 %因为y[n]=sum(x[m]*b[n-m]),共有5个n,故依次计算b_input_temp = fliplr(b_input); %反转b的数组b_input,并存储b_input_temp = circshift(b_input_temp,n); %平移b数组,右移n位y_my_conv(n) = my_conv_n(x_input,b_input_temp);%计算出n时的输出,函数见下面
end
y_my_conv %输出结果
function [result]=my_conv_n(param1,param2) %定义卷积函数 result=sum(param1.*param2); %卷积结果为两列数点乘求和
end
MATLAB离散卷积的实现_代码编写_实现两列数的卷积相关推荐
- MATLAB离散卷积的实现_自己编写代码_实现两列数的卷积
一.实验目的 1.了解熟悉MATLAB中conv.filter函数的使用: 2.回忆卷积,深入了解conv原理,从差分方程和矩阵两个角度重构conv函数. 二.实验原理 卷积是两个变量在某范围内相乘后 ...
- 扫描功能代码编写_干净的代码编写功能或方法
扫描功能代码编写 This article is the second of a clean code series, you can find the first part about Clean ...
- 数据库代码编写_如何将您的职业转变为数据科学-即使您今天不编写代码。
数据库代码编写 by Sam Chow, PhD 由周星驰博士 如何将您的职业转变为数据科学-即使您今天不编写代码. (How to transition your career into Data ...
- vb杨辉三角代码编写_「二次开发」——基于VB.NET的NX UG软件二次开发基础
前几期中为大家介绍了CATIA软件.AutoCAD软件基于VB.NET的二次开发,本期再来为大家介绍一下NX UG软件基于VB.NET的二次开发. NX UG软件版本:NX 12.0.0.27 开发软 ...
- 程序员代码编写_我如何不编写协作写作应用程序的代码
程序员代码编写 葵仓,句,但更有趣 (Twaikura, haikus but funnier) As easy as ABC: some stranger on the Internet start ...
- matlab 两列数 画图,excel表格数据进行画图-怎样在excel绘图将两列数据分别作为横轴纵轴...
在EXCEL里怎么用数据作图? 准备/材料:装有windows 10的电脑一台,Microsoft Office 家庭和学生版 2016 excel软 1.创建一Excel表,并且填入内容. 2.圈出 ...
- python代码编写_高质量Python代码编写的5个优化技巧
如今我使用 Python 已经很长时间了,但当我回顾之前写的一些代码时,有时候会感到很沮丧.例如,最早使用 Python 时,我写了一个名为 Sudoku 的游戏(GitHub地址:https://g ...
- 读书笔记_代码大全_第14章_组织直线型代码_第15章_使用条件语句
组织直线型代码 + 使用条件语句 希望我的读书笔试能带你翻过18页的书 http://www.cnblogs.com/jerry19880126/ <代码大全>第14章和第15章的内容比较 ...
- C++_程序内存模型_内存四区_代码区_全局区_每种区域都存放什么样的变量---C++语言工作笔记028
然后我们再来看,c++的内存模型,中的四个区域. 代码区放函数体的二进制形式的代码,由操作系统管理 全局区,放全局变量和静态变量,以及常量 栈区,由编译器自动分配释放,存放函数的参数值,局部变量 堆区 ...
最新文章
- java基于servlet的文件上传
- 离线轻量级大数据平台Spark之读取CSV文件实例
- python的for循环语句_干货丨Python的循环语句基础讲解!
- [css] 当拿到一个新的项目,让你对这个项目的css做下架构设计,你该如何下手?
- hive 创建访问用户_hive创建角色并赋权
- html载入hta文件,HTA文件去除html控件认证和接收命令行参数
- ps图像压缩插件:TinyPNG and TinyJPG for Mac 支持ps2021
- Visual Studio中C++工程的环境配置方法
- Android 浏览器启动应用程序
- 深度学习中的“卷积”与数学中的“卷积”有何不同
- 趣谈网络协议(一):综述及二层到三层
- wps中的相交_如何在wps中添加交叉引用 - 卡饭网
- 产品配件类目税目分类_汽车用品税收分类编码
- java 单个session过期_session过期的三种方法
- 【转】所需即所获:像 IDE 一样使用 vim
- Intellij IDEA 使用教程(史上最全,持续更新)
- 暗原色先验单一输入图像去雾
- 网络带宽测试工具iperf3(arm<->PC)
- 2018 蓝桥杯 C++ A组 1-7
- use after free double free利用