前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【数字信号处理】卷积编程实现 ( 卷积计算原理 | 卷积公式计算 | 使用 matlab 计算卷积 | 使用 C 语言实现卷积计算 )

【数字信号处理】卷积编程实现 ( 卷积计算原理 | 卷积公式计算 | 使用 matlab 计算卷积 | 使用 C 语言实现卷积计算 )

作者头像
韩曙亮
发布2023-03-30 11:45:47
1.3K0
发布2023-03-30 11:45:47
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

一、卷积计算原理


对于 线性时不变系统 ( LTI - Linear time-invariant ) 来说 ,

假设

x(n)

是 LTI 系统的 " 输入序列 " ,

y(n)

是 " 输出序列 " ,

则有 :

y(n) = \sum^{+\infty}_{m = -\infty} x(m) h(n-m) = x(n) * h(n)

线性时不变系统 ( LTI - Linear time-invariant ) 的

" 输出序列 "

等于

" 输入序列 " 与 " 系统单位脉冲响应 " 的 线性卷积 ;

输出序列 的元素个数 :

输出序列元素个数 = 输入序列元素个数 + 单位脉冲响应序列元素个数 - 1

二、卷积计算


给定 输入序列 :

x(n) = \{1,2\}_{[0, 1]}

单位脉冲响应 :

h(n) = \{1,2\}_{[0, 1]}

计算卷积 :

x(n) * h(n)

;

卷积结果序列对应的元素个数是

2 + 2 - 1 = 3

根据如下 卷积 公式 :

y(n) = \sum^{+\infty}_{m = -\infty} x(m) h(n-m) = x(n) * h(n)
x(n) * h(n) = \sum^{+\infty}_{m = -\infty} x(m) h(n-m)

1、计算 y(0)

计算

y(0)

:

\sum^{+\infty}_{m = -\infty} x(m) h(0-m)
m

取值

[-\infty, +\infty]
m < 0

时 , 有

x(m) = 0

, 则

x(m) h(n-m) = 0

, 累加没有意义 ;

m = 0

时 , 有

x(0)h(0 - 0) = x(0)h(0) = 1 \times 1 = 1
m \geq 1

时 , 有

h(n - m) = h(0 - m) = 0

, 则

x(m)h(n - m) = 0

, 累加没有意义 ;

最终 :

y(0) = x(0)h(0)= 1 \times 1 = 1

2、计算 y(1)

计算

y(1)

:

\sum^{+\infty}_{m = -\infty} x(m) h(1-m)
m

取值

[-\infty, +\infty]
m < 0

时 , 有

x(m) = 0

, 则

x(m) h(n-m) = 0

, 累加没有意义 ;

m = 0

时 , 有

x(m) h(n-m) = x(0)h(1 - 0) = x(0)h(1) = 1 \times 2 = 2
m = 1

时 , 有

x(m) h(n-m) = x(1)h(1 - 1) = x(1)h(0) = 2 \times 1 = 2
m \geq 2

时 , 有

h(n - m) = h(2 - m) = 0

, 则

x(m)h(n - m) = 0

, 累加没有意义 ;

最终 :

y(1) = x(0)h(1)+x(1)h(0) = 2 + 2 = 4

3、计算 y(2)

计算

y(2)

:

\sum^{+\infty}_{m = -\infty} x(m) h(2-m)
m

取值

[-\infty, +\infty]
m < 0

时 , 有

x(m) = 0

, 则

x(m) h(n-m) = 0

, 累加没有意义 ;

m = 0

时 , 有

x(m) h(n-m) = x(0)h(2 - 0) = x(0)h(2) = 1 \times 0 = 0

,

h

仅在

0,1

索引有值 ,

2

索引值为 0 ;

m = 1

时 , 有

x(m) h(n-m) = x(1)h(2 - 1) = x(1)h(1) = 2 \times 2 = 4
m \geq 2

时 , 有

h(n - m) = h(2 - m) = 0

, 则

x(m)h(n - m) = 0

, 累加没有意义 ,

h

仅在

0,1

索引有值 , 小于

0

的索引值为 0 ;

最终 :

y(1) = x(0)h(1)+x(1)h(0) = 0 + 4 = 4

三、使用 matlab 计算卷积


matlab 源码 :

代码语言:javascript
复制
x = [1, 2];
h = [1, 2];

y = conv(x, h);

最终计算结果 :

y(n) = \{1,4,4\}_{[0,2]}
在这里插入图片描述
在这里插入图片描述

四、使用 C 语言实现卷积计算


从百度百科找了个源码 : convolution 是卷积计算的函数 , 仅做参考 ;

代码语言:javascript
复制
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/卷积 百度百科 ;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-02-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、卷积计算原理
  • 二、卷积计算
    • 1、计算 y(0)
      • 2、计算 y(1)
        • 3、计算 y(2)
        • 三、使用 matlab 计算卷积
        • 四、使用 C 语言实现卷积计算
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档