卷积运算及实现

本文介绍卷积运算及实现。

1.定义

线性时不变系统的输出是输入样本与系统的冲激响应的卷积。这里假设输入样本为x(n),系统冲激响应为h(n),系统输出为y(n),则

y(n)=h(n)*x(n)=\sum_{l=0}^{\infty}h(l)x(n-l)

线性卷积计算过程包含以下4个步骤:

1)折叠,关于l=0,折叠x(l)得到x(-l)

2)移位,将x(-l)向右移动n个样本得到x(n-l)

3)相乘,对于所有l,将h(l)和x(n-l)重叠部分相乘得到h(l)x(n-l)的乘积

4)相加,将所有乘积相加得到在时刻n的输出y(n)

重复步骤2至4,计算系统在其它瞬时n的输出,注意:输入信号长度M和冲激响应长度L的卷积结果为一个长度为L+M-1的输出信号。

例:

x(0)=a_{0},x(1)=a_{1},x(3)=a_{2},x(4)=a_{3}

h(0)=b_{0},h(1)=b_{1},h(2)=b_{2}

y(0)=a_{0}b_{0}

y(1)=a_{0}b_{1}+a_{1}b_{0}

y(2)=a_{0}b_{2}+a_{1}b_{1}+a_{2}b_{0}

y(3)=a_{1}b_{2}+a_{2}b_{1}+a_{3}b_{0}

y(4)=a_{2}b_{2}+a_{3}b_{1}

y(5)=a_{3}b_{2}

这里y(n)的输出长度为4+3-1=6个数据。

2.性质

卷积运算具有如下性质:

1)交换律,x*h=h*x

2)结合律,x*(h*g)=(x*h)*g

3)分配律,h*(x+g)=h*x+h*g

4)时域卷积定理,F(g*h)=G(\omega)\cdot H(\omega),2个信号卷积的傅里叶变换是它们各自傅里叶变换的逐点乘积,即时域卷积对应于频域相乘

5)频域卷积定理,F(g\cdot h)=\frac{1}{2\pi }G(\omega)*H(\omega),2个信号逐点乘积的傅里叶变换是它们各自傅里叶变换的卷积(这里有个系数\frac{1}{2\pi }),即频域卷积对应于时域相乘

3.实现

这里基于C语言来实现。参考代码如下:

void conv(float *pSrcA, uint32_t srcALen, float *pSrcB, uint32_t srcBLen, float *pDst)
{
    float *pIn1 = pSrcA;        /* inputA pointer */
    float *pIn2 = pSrcB;        /* inputB pointer */
    float sum = 0;              /* Accumulator */
    uint32_t i = 0;             /* loop counter */
    uint32_t j = 0;             /* loop counter */
    
    if ((pSrcA == NULL) || (srcALen == 0) || (pSrcB == NULL) || (srcBLen == 0) || (pDst == NULL))
    {
        return ;
    }
   
    /* Loop to calculate convolution for output length number of times */
    for (i = 0U; i < ((srcALen + srcBLen) - 1U); i++)
    {
        /* Initialize sum with zero to carry out MAC operations */
        sum = 0.0f;
        
        /* Loop to perform MAC operations according to convolution equation */
        for (j = 0U; j <= i; j++)
        {
            /* Check the array limitations */
            if ((((i - j) < srcBLen) && (j < srcALen)))
            {
                /* z[i] += x[i-j] * y[j] */
                sum += pIn1[j] * pIn2[i - j];
            }
        }
        /* Store the output in the destination buffer */
        pDst[i] = sum;
    }    
}

总结,本文介绍了卷积运算及实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/534188.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

The C programming language (second edition,KR) exercise(CHAPTER 2)

E x c e r c i s e 2 − 1 Excercise\quad 2-1 Excercise2−1&#xff1a;输出结果如图1和图2所示&#xff0c;这道练习题需要文章1和文章2的知识。 #include <stdio.h> #include <limits.h>float getFloat(char sign, unsigned char exp, unsigned mantissa); do…

抖音小店无货源怎么做?新型无货源玩法,帮商家躲避无货源处罚!

大家好&#xff0c;我是电商糖果 关于现在抖店的商家&#xff0c;是谈“无货源”色变&#xff0c;被平台罚怕了。 动不动就是扣分&#xff0c;扣2000的保证金&#xff0c;商家是苦不堪言。 又不舍得放弃抖音小店现在热度和风口。 糖果做抖音小店无货源有四年时间了&#xf…

WritableComparable排序案例实操

文章目录 WritableComparable排序概述第一个案例需求&#xff08;全排序&#xff09;代码实现结果分析 第二个案例需求&#xff08;二次排序&#xff09;问题分析和代码结果分析 第三个案例需求&#xff08;区内排序&#xff09;需求分析代码实现结果分析 WritableComparable排…

材料物理 笔记-5

原内容请参考哈尔滨工业大学何飞教授&#xff1a;https://www.bilibili.com/video/BV18b4y1Y7wd/?p12&spm_id_frompageDriver&vd_source61654d4a6e8d7941436149dd99026962 或《材料物理性能及其在材料研究中的应用》&#xff08;哈尔滨工业大学出版社&#xff09; 半…

激光测距漫反射板

激光测距漫反射板是一种重要的光学元件&#xff0c;广泛应用于工业测量、自动化控制、机器人导航等领域。自动驾驶技术的发展日新月异&#xff0c;其中激光测距技术在自动驾驶车辆中发挥着至关重要的作用。而激光测距反射板作为激光测距的关键组件之一&#xff0c;其性能和应用…

基于RKNN的YOLOv5安卓Demo

1.简介 基于RKNPU2 SDK 1.6.0版的安卓YOLOv5演示应用程序&#xff0c;选择图片进行对象检测并显示识别结果。 GitHub源码地址&#xff1a;https://github.com/shiyinghan/rknn-android-yolov5 2.实现过程 参考RKNN官方库RKNN Model Zoo提供的YOLOv5对象检测demo&#xff0c…

短袖怎么选质量好?5款质量好的短袖T恤

最近天气逐渐开始变热了&#xff0c;不少朋友都在考虑选什么短袖比较好。由于现在市面上的短袖品牌实在太多&#xff0c;并且还有很多做工差、面料不好的短袖混杂在其中&#xff0c;让大家挑选短袖十分困难。为此我特意进行了一次短袖测评&#xff0c;总结出几点选购方法&#…

C++ 之 newmat 矩阵运算库使用笔记

文章目录 Part.I IntroductionChap.I newmat 简介 Part.II 安装与编译Chap.I 直接使用源码Chap.II 基于 CMake 使用源码Chap.III 编译成库 Part.III 关于矩阵的构造与运算Chap.I 矩阵的构造与初始化Chap.II 矩阵的运算Chap.III 矩阵维数和类型的更改Chap.IV 矩阵最值统计 Refer…

可视化大屏的应用(11):智慧运维领域的得力助手

一、什么是智慧运维 智慧运维&#xff08;Smart Operations and Maintenance&#xff0c;简称智慧运维&#xff09;是一种利用先进的信息技术和数据分析手段&#xff0c;对设备、设施或系统进行监测、分析和优化管理的运维方式。它通过实时监测数据、智能分析和预测&#xff0…

【汇编语言实战】两个32位数的相加运算

C语言描述&#xff1a; #include <stdio.h> int main() { int a3,b2; printf("%d",ab); }汇编语言&#xff1a; include irvine32.inc .data a dword 32 b dword 33 .code main proc mov eax,a mov ebx,b add eax,ebx call writeint main endp end main运行结…

【Package Marking】UG475 FPGA 芯片丝印解析 AMD XILINX

Spartan 7 Devices Kintex 7 Device Virtex 7 Device 说明 条目定义Xilinx LogoXilinx 徽标、带有商标的 Xilinx 名称和商标注册状态。Pb-free Character对于 FFG、FBG 或 SBG 封装&#xff0c;器件右上角标有无铅字符&#xff0c;表示该器件使用无铅材料组制造&#xff0c;如…

Qt之QSS样式表

QSS简介 QSS&#xff08;Qt Style Sheet&#xff09;样式表是一种用于描述图形用户界面&#xff08;GUI&#xff09;样式的语言。它允许开发者为应用程序的控件定义视觉外观&#xff0c;例如颜色、字体、尺寸和布局等。 QSS 样式表的主要目的是提供一种简洁而灵活的方式来美化…

Java毕业设计 基于springboot vue撸宠平台 宠物系统

Java毕业设计 基于springboot vue撸宠平台 宠物系统 springboot撸宠平台 宠物系统 功能介绍 首页 图片轮播 用户或商家注册 用户或商家登录 登录验证码 店铺信息 店铺详情 店铺投诉 宠物信息 宠物详情 预订 退订 搜索 收藏 点赞 踩 评论 个人中心 更新信息 我的收藏 在线客服…

一文2500字从0到1使用JMeter进行接口测试教程!

安装 使用JMeter的前提需要安装JDK&#xff0c;需要JDK1.7以上版本目前在用的是JMeter5.2版本&#xff0c;大家可自行下载解压使用 运行 进入解压路径如E: \apache-jmeter-5.2\bin&#xff0c;双击jmeter.bat启动运行 启动后默认为英文版本&#xff0c;可通过Options – Cho…

【vim 学习系列文章 22 -- vim 实现 linux 多行快速标准注释】

文章目录 vim 实现 linux 多行快速标准注释 vim 实现 linux 多行快速标准注释 不多说了&#xff0c;直接上动图&#xff1a; 上代码&#xff1a; function! CommentBlock()" 获取Visual模式选中的起始和结束行号let old_start_line line("<")let old_end…

多语言婚恋交友APP开发流程一览

近年来&#xff0c;随着全球化的发展和人们对跨文化交流的需求增加&#xff0c;多语言婚恋交友APP的需求逐渐增长。开发这类APP需要考虑到不同语言和文化下用户的需求&#xff0c;涉及到一系列独特的流程和挑战。本文将从专家角度为您解析多语言婚恋交友APP的开发流程&#xff…

[leetcode]maximum-width-of-binary-tree

. - 力扣&#xff08;LeetCode&#xff09; 给你一棵二叉树的根节点 root &#xff0c;返回树的 最大宽度 。 树的 最大宽度 是所有层中最大的 宽度 。 每一层的 宽度 被定义为该层最左和最右的非空节点&#xff08;即&#xff0c;两个端点&#xff09;之间的长度。将这个二叉…

解锁电商增长密码:山海鲸智慧电商解决方案全解析

在数字化浪潮席卷全球的今天&#xff0c;电商行业作为其中的重要一环&#xff0c;正面临着前所未有的机遇与挑战。如何在这个充满变革与创新的领域中脱颖而出&#xff0c;成为了众多电商企业关注的焦点。山海鲸智慧电商解决方案&#xff0c;以其前瞻性的技术布局和丰富的实战经…

晶核攻略:新手快速入门攻略,游戏必备!

欢迎来到阿特兰世界&#xff0c;冒险者&#xff01;在这个充满魔导朋克魅力的箱庭式动作RPG游戏中&#xff0c;你将扮演冒险家协会的一员&#xff0c;探索世界能量之源晶核的秘密。但作为新手&#xff0c;面对繁多的副本和职业技能&#xff0c;可能会感到有些手足无措。不过别担…

web APIs总结(1)

1. 根据CSS选择器来获取DOM元素 (重点&#xff09; 获取一个DOM元素我们使用谁&#xff1f;能直接操作修改吗&#xff1f;querySelector() 可以返回值&#xff1a;CSS选择器匹配的第一个元素,一个 HTMLElement对象。如果没有匹配到&#xff0c;则返null 获取多个DOM元素我们使…