【数字信号处理】卷积编程实现 ( 卷积计算原理 | 卷积公式计算 | 使用 matlab 计算卷积 | 使用 C 语言实现卷积计算 )
文章目录
- 一、卷积计算原理
- 二、卷积计算
- 1、计算 y(0)
- 2、计算 y(1)
- 3、计算 y(2)
- 三、使用 matlab 计算卷积
- 四、使用 C 语言实现卷积计算
一、卷积计算原理
对于 线性时不变系统 ( LTI - Linear time-invariant ) 来说 ,
假设 x(n)x(n)x(n) 是 LTI 系统的 " 输入序列 " , y(n)y(n)y(n) 是 " 输出序列 " ,
则有 :
y(n)=∑m=−∞+∞x(m)h(n−m)=x(n)∗h(n)y(n) = \sum^{+\infty}_{m = -\infty} x(m) h(n-m) = x(n) * h(n)y(n)=m=−∞∑+∞x(m)h(n−m)=x(n)∗h(n)
线性时不变系统 ( LTI - Linear time-invariant ) 的
" 输出序列 "
等于
" 输入序列 " 与 " 系统单位脉冲响应 " 的 线性卷积 ;
输出序列 的元素个数 : 输出序列元素个数=输入序列元素个数+单位脉冲响应序列元素个数−1输出序列元素个数 = 输入序列元素个数 + 单位脉冲响应序列元素个数 - 1输出序列元素个数=输入序列元素个数+单位脉冲响应序列元素个数−1
二、卷积计算
给定 输入序列 :
x(n)={1,2}[0,1]x(n) = \{1,2\}_{[0, 1]}x(n)={1,2}[0,1]
单位脉冲响应 :
h(n)={1,2}[0,1]h(n) = \{1,2\}_{[0, 1]}h(n)={1,2}[0,1]
计算卷积 : x(n)∗h(n)x(n) * h(n)x(n)∗h(n) ;
卷积结果序列对应的元素个数是 2+2−1=32 + 2 - 1 = 32+2−1=3
根据如下 卷积 公式 :
y(n)=∑m=−∞+∞x(m)h(n−m)=x(n)∗h(n)y(n) = \sum^{+\infty}_{m = -\infty} x(m) h(n-m) = x(n) * h(n)y(n)=m=−∞∑+∞x(m)h(n−m)=x(n)∗h(n)
x(n)∗h(n)=∑m=−∞+∞x(m)h(n−m)x(n) * h(n) = \sum^{+\infty}_{m = -\infty} x(m) h(n-m)x(n)∗h(n)=m=−∞∑+∞x(m)h(n−m)
1、计算 y(0)
计算 y(0)y(0)y(0) :
∑m=−∞+∞x(m)h(0−m)\sum^{+\infty}_{m = -\infty} x(m) h(0-m)m=−∞∑+∞x(m)h(0−m)
mmm 取值 [−∞,+∞][-\infty, +\infty][−∞,+∞]
m<0m < 0m<0 时 , 有 x(m)=0x(m) = 0x(m)=0 , 则 x(m)h(n−m)=0x(m) h(n-m) = 0x(m)h(n−m)=0 , 累加没有意义 ;
m=0m = 0m=0 时 , 有 x(0)h(0−0)=x(0)h(0)=1×1=1x(0)h(0 - 0) = x(0)h(0) = 1 \times 1 = 1x(0)h(0−0)=x(0)h(0)=1×1=1
m≥1m \geq 1m≥1 时 , 有 h(n−m)=h(0−m)=0h(n - m) = h(0 - m) = 0h(n−m)=h(0−m)=0 , 则 x(m)h(n−m)=0x(m)h(n - m) = 0x(m)h(n−m)=0 , 累加没有意义 ;
最终 :
y(0)=x(0)h(0)=1×1=1y(0) = x(0)h(0)= 1 \times 1 = 1y(0)=x(0)h(0)=1×1=1
2、计算 y(1)
计算 y(1)y(1)y(1) :
∑m=−∞+∞x(m)h(1−m)\sum^{+\infty}_{m = -\infty} x(m) h(1-m)m=−∞∑+∞x(m)h(1−m)
mmm 取值 [−∞,+∞][-\infty, +\infty][−∞,+∞]
m<0m < 0m<0 时 , 有 x(m)=0x(m) = 0x(m)=0 , 则 x(m)h(n−m)=0x(m) h(n-m) = 0x(m)h(n−m)=0 , 累加没有意义 ;
m=0m = 0m=0 时 , 有 x(m)h(n−m)=x(0)h(1−0)=x(0)h(1)=1×2=2x(m) h(n-m) = x(0)h(1 - 0) = x(0)h(1) = 1 \times 2 = 2x(m)h(n−m)=x(0)h(1−0)=x(0)h(1)=1×2=2
m=1m = 1m=1 时 , 有 x(m)h(n−m)=x(1)h(1−1)=x(1)h(0)=2×1=2x(m) h(n-m) = x(1)h(1 - 1) = x(1)h(0) = 2 \times 1 = 2x(m)h(n−m)=x(1)h(1−1)=x(1)h(0)=2×1=2
m≥2m \geq 2m≥2 时 , 有 h(n−m)=h(2−m)=0h(n - m) = h(2 - m) = 0h(n−m)=h(2−m)=0 , 则 x(m)h(n−m)=0x(m)h(n - m) = 0x(m)h(n−m)=0 , 累加没有意义 ;
最终 :
y(1)=x(0)h(1)+x(1)h(0)=2+2=4y(1) = x(0)h(1)+x(1)h(0) = 2 + 2 = 4y(1)=x(0)h(1)+x(1)h(0)=2+2=4
3、计算 y(2)
计算 y(2)y(2)y(2) :
∑m=−∞+∞x(m)h(2−m)\sum^{+\infty}_{m = -\infty} x(m) h(2-m)m=−∞∑+∞x(m)h(2−m)
mmm 取值 [−∞,+∞][-\infty, +\infty][−∞,+∞]
m<0m < 0m<0 时 , 有 x(m)=0x(m) = 0x(m)=0 , 则 x(m)h(n−m)=0x(m) h(n-m) = 0x(m)h(n−m)=0 , 累加没有意义 ;
m=0m = 0m=0 时 , 有 x(m)h(n−m)=x(0)h(2−0)=x(0)h(2)=1×0=0x(m) h(n-m) = x(0)h(2 - 0) = x(0)h(2) = 1 \times 0 = 0x(m)h(n−m)=x(0)h(2−0)=x(0)h(2)=1×0=0 , hhh 仅在 0,10,10,1 索引有值 , 222 索引值为 0 ;
m=1m = 1m=1 时 , 有 x(m)h(n−m)=x(1)h(2−1)=x(1)h(1)=2×2=4x(m) h(n-m) = x(1)h(2 - 1) = x(1)h(1) = 2 \times 2 = 4x(m)h(n−m)=x(1)h(2−1)=x(1)h(1)=2×2=4
m≥2m \geq 2m≥2 时 , 有 h(n−m)=h(2−m)=0h(n - m) = h(2 - m) = 0h(n−m)=h(2−m)=0 , 则 x(m)h(n−m)=0x(m)h(n - m) = 0x(m)h(n−m)=0 , 累加没有意义 , hhh 仅在 0,10,10,1 索引有值 , 小于 000 的索引值为 0 ;
最终 :
y(1)=x(0)h(1)+x(1)h(0)=0+4=4y(1) = x(0)h(1)+x(1)h(0) = 0 + 4 = 4y(1)=x(0)h(1)+x(1)h(0)=0+4=4
三、使用 matlab 计算卷积
matlab 源码 :
x = [1, 2];
h = [1, 2];y = conv(x, h);
最终计算结果 : y(n)={1,4,4}[0,2]y(n) = \{1,4,4\}_{[0,2]}y(n)={1,4,4}[0,2]
四、使用 C 语言实现卷积计算
从百度百科找了个源码 : convolution
是卷积计算的函数 , 仅做参考 ;
void convolution(double *input1, double *input2, double *output, int mm, int nn)
{double *xx = new double[mm + nn - 1];// do convolution for (int i = 0; i < mm + nn - 1; i++){xx[i] = 0.0;for (int j = 0; j < mm; j++){if (i - j >= 0 && i - j < nn)xx[i] += input1[j] * input2[i - j];}}// set value to the output array for (int i = 0; i < mm + nn - 1; i++)output[i] = xx[i];delete[] xx;
}
源码参考 https://baike.baidu.com/item/卷积 百度百科 ;
【数字信号处理】卷积编程实现 ( 卷积计算原理 | 卷积公式计算 | 使用 matlab 计算卷积 | 使用 C 语言实现卷积计算 )相关推荐
- 随机数字信号处理期末大报告——基于卡尔曼滤波的自由落体运动目标跟踪MATLAB实现
完整的实验报告下载随机数字信号处理期末大报告-基于卡尔曼滤波的自由落体运动目标跟踪.docx-机器学习文档类资源-CSDN下载 程序包及所需数据下载 target tracking us ...
- matlab计算结构自振频率,基于Matlab的多自由度系统固有频率及振型计算
基于Matlab的多自由度系统固有频率及振型计算 阅读:25212010-04-13 21:38 标签:杂谈 可参考文涛,基于Matlab语言的多自由度振动系统的固有频率及主振型计算分析,2007 对 ...
- 【数字信号处理】带通采样定理原理及其MATLAB仿真说明
引言 平常我们所讲的采样定理(奈奎斯特采样定理)一般要求满足: f s ≥ 2 f H f_s≥2f_H fs
- visio中公式太小_学SolidWorks钣金必知的钣金折弯与展开计算原理与公式
板料在弯曲过程中外层到到拉应力,内层受到压应力,从拉到压之间有一既不受拉力又不受压力的过度层为中性层:中性层在高曲过程中的长度和弯曲前一样,保持不变,所以中性层是计算高曲件展开长度的基准. 1.中性层 ...
- matlab数组平方的计算自定义函数_从零开始的matlab学习笔记——(38)简单数论计算函数:取整,gcd,lcm,质数,全排列...
matlab应用--求极限,求导,求积分,解方程,概率统计,函数绘图,三维图像,拟合函数,动态图,傅里叶变换,随机数,优化问题....更多内容尽在个人专栏:matlab学习 翻了翻优化工具箱,发现内容 ...
- 数字信号处理1:卷积
文章目录 一.前言 二.线性时不变(LTI)系统 三.冲激函数 四.阶跃函数 五.卷积 5.1 卷积的推导 5.2 LTI系统卷积的性质 5.2.1 交换律 5.2.2 分配律 5.2.3 结合律 数 ...
- 关于MATLAB实现的数字信号处理(二)
上一篇:关于MATLAB实现的数字信号处理(一) 下一篇:关于MATLAB实现的数字信号处理(三) 文章目录 上一篇:关于MATLAB实现的数字信号处理(一) 下一篇:关于MATLAB实现的数字信号处 ...
- 新书预告:Xilix FPGA数字信号处理设计——基础版
掌握FPGA数字信号处理设计需满足三个条件:熟悉FPGA设计方法.理解数字信号处理理论.掌握理论的工程实现方法.对初学者来讲,每个条件看似都难以逾越.杜勇老师完美融合课程教学与工程设计的需求特点,以独 ...
- c语言实现1024点fft程序,数字信号处理的步骤与注意事项,并编写1024个采样点的FFT C语言程序...
数字信号处理的步骤与注意事项,并编写1024个采样点的FFT C语言程序 1. 数字信号处理 1.1 数字信号处理概述 数字信号处理是研究如何用数字或符号序列来表示信号以及如何对这些序列进行处理的一门 ...
- matlab 85个实用案例勘误,MATLAB数字信号处理85个实用案例精讲.入门到进阶+源代码(无需密码).rar...
[实例简介] 本压缩包包含了MATLAB数字信号处理85个实用案例精讲.pdf以及每一章的实例m文件以及函数,下载即可使用,内无密码设置 [实例截图] [核心代码] MATLAB数字信号处理85个实用 ...
最新文章
- 获取网站Alexa排名数值的方法
- python3精要(33)-字典解析与集合解析,if else 用于解析
- cont::value_type相关的测试程序
- jzoj6801-NOIP2020.9.19模拟patrick【树状数组】
- 字符设备驱动高级篇2——字符设备驱动注册代码分析
- 结构型设计模式在公司项目中的运用实践
- python3.7 安装pip3_安装python3.7 pip3.7 去哪里了?
- Entity Framework第三篇IQueryable和list本地集合
- VMware 安装提示缺少MicrosoftRuntime DLL 问题解决办法
- ACM 学习笔记(五) 动态规划
- 程序员被公司辞退12天,前领导要求回公司讲清楚代码,结果懵了
- 海康摄像头故障处理踩坑记录
- 对机器学习实战第二章内容的思考
- RecyclerView使用中遇到的问题
- XRecyclerView Scrapped or attached views may not be recycled
- 转贴-刻录品质经典文章之一
- 2015年终总结-青春如歌
- 尺寸有点太大了吧,我已经受不鸟了
- 财务说账单上少了一分钱,老板看到代码气疯了
- Python手册(Python Basics)--Python进阶