胡说八道(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!

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值