• 胡说八道(24.6.3)— 数字信号处理


            上回书说到了从模拟世界向数字世界的途径——采样和量化,但是,更加具体的系统模型究竟是什么样的呢?今日偶得一图,甚好!

            这张图很完美的描述了数字信号处理,包括了防混叠滤波器(前置滤波器),AD转换器,DSP(digital signal processor),DA转换器,平滑滤波器(后置滤波器)。这些设备我会在后续专门讲讲,大家现在只需要有浅浅的概念就行了。

            接下来,紧急插播一条关于δ(n)采样序列的用法。你一直说冲激序列能够采样,那它咋才呢?看看下面这图。

            理想的对模拟信号进行采样,就是服从的这个公式。

             进入到今天的正题,通信行业中的两大法宝之一——卷积。卷积这个运算平常用不到,但是,就是在滤波这一方面,几乎所有的滤波器都能跟它扯到一星半点的关系。首先,我们要知道卷积的取值范围,假设,一个序列为[0,3],另一个为[0,2],那么它们的卷积长度为6,取值范围[0,5]。简单的说,就是上限与上限加就是上限,下限与下限相加就是下限。不要整其他花里胡哨的。

            谈到卷积,学的好同学,便能想到反褶,平移,相乘和相加这四个步骤。这四步呢,可以总结出一种求卷积的方法,就是经典的列表法,按照这四个步骤,慢慢的列数计算,虽这种方法比较慢,但是这很准确,也容易理解。

            谈谈其他的方法,一个是对位相乘相加法。说简单点,就是多项式相加相乘。

            大家可以用MATLAB验证一下,MATLAB中的卷积函数是conv()函数。这个函数只适用于离散卷积。

            最后一种方法是向量-矩阵相乘法,这是我觉得最好的一种方法。我觉得它也可以叫做斜眼法。

            打个比方,在计算离散卷积时,要求y(1)的值,y(1)=x(0)h(1)+x(1)h(0)。

            这个就是该中方法的向量形式。这种方式也是MATLAB中conv函数最本质的算法。能想出这种算法的人真是个天才。

            接着,刚说咱们可不提倡,打开MATLAB,自编一下func_conv函数。

    func_conv.m

    %卷积——反褶、时移、相乘、相加

    function y = func_conv(x1,x2)

    n1 = length(x1)

    n2 = length(x2)

    y = zeros(1,n1+n2-1)

    k1 = zeros(1,n1+n2)

    k2 = zeros(1,n1+n2)

    for i = 0:n1-1

      for j = 1:n2

        k2(j+i) = x2(j)

        k1(j+i) = x1(i+1)*k2(j+i) 

        y(j+i) = y(j+i)+k1(j+i)

      end

    end

    end

    main.m

    %% 卷积

    m =[1 1 1 1 1]

    n = [1 1 1 1 1]

    figure(1)

    stem(conv(m,n))

    figure(2)

    stem(func_conv(m,n))

    仿真结果:

           本次代码用的是二重循环,按照反褶,平移,相乘,相加这四个步骤进行运算。但是,仔细想想,这样写的代码充满着弊端。当你序列很长的时候,所需要的时间复杂度就变高了,运行时间就要很长了。所以说怎么去优化呢?用斜眼法怎么去编?O.o!敬请期待。

    说了这么多求卷积的方法,咱们聊一下它的哥们——相关,两者公式是一样的。

            其实说到底,就是咱们概率论里的相关系数ρ。它的取值范围就是[0,1]。这里建议大家回头看看,或者上网搜搜。

            欲知后事如何,且听下回分解。OVO!

  • 相关阅读:
    纠删码项目总结
    python学习--字符串的驻留机制
    文章组合生成-免费文章组合生成软件
    【C++修炼之路】1. 初窥门径
    软件测试工程师的分支有哪些?
    pygame - 贪吃蛇小游戏
    【jvm】虚拟机之本地方法接口与本地方法库
    react中使用监听
    W25Q128芯片手册精读
    记录小白第一次EDUsrc:任意密码漏洞
  • 原文地址:https://blog.csdn.net/2303_76963493/article/details/139604650