使用矩阵运算替代 for 循环实现信号的DTFT

1. 问题的引入

  最近的数字信号处理实验中有这样的一道题

xa(t)=e1000|t| 信号进行采样分析,讨论信号的抽样的最低频率,验证奈奎斯特采样定理。要求对信号 xa(t) 分析,确定采样频率,求出采样后的序列 x(n) 的频谱 ,比较不同采样频率情况下(满足和不满足采样定理) FT频谱 x(jΩ) 和 DTFT频谱 x(ejω) 关系。

实验思路如下。首先对信号进行截断,因为计算机只能分析有限长的序列,所以需要截断,截断的依据是当幅值衰减到小于某一阈值(如 e5 )时截断;其次对截断后的连续非周期信号进行傅里叶变换(FT),这里通过 MATLAB 的 Fourier 命令可以直接得到;得到原信号的FT之后根据频谱判断截止频率(最高频率)大概在什么位置,从而确定采样信号的频率(根据香农采样定理,采样频率是最高频率的二倍);最后对采样后的信号进行DTFT。因为在 MATLAB 中没有直接求取 DTFT 的函数,所以需要自己编写。而本文的主要灵感也来自于自己编写DTFT的过程。

  假设我们现在已经得到了经过抽样之后的离散非周期序列 x(n) ,现在要对其进行 DTFT 变换。由于 DTFT 的定义式如下

X(e^{j\omega})=\Sigma_{n=-\infty}^{\infty}x(n)e^{-j\omega n}\tag{1}\label{1}

所以如果从定义式下手,需要对上述的 x(n)ejω 在使得 x(n) 有意义上的区间内求和,也就是说是有限项累加求和的形式,这种形式的计算往往是通过 for 循环实现的。但是无论是在MATLAB 还是在 python 的 Numpy 计算库上,矩阵相乘的计算速度又要高于 for 循环的计算速度,所以将 for 循环改写成矩阵相乘的形式也是一件很应该做的事情,在机器学习中这个常常叫做“向量化”。

2. 使用矩阵运算实现DTFT

  假设 x(n) 是一个5 点的序列,即

[x(0)x(1)x(2)x(3)x(4)]

根据公式 (1) 可知, x(n) 的 DTFT 为
X(ejω)=x(0)ejω0+x(1)ejω1+x(2)ejω2+x(3)ejω3+x(4)ejω4

上式虽然是 5 项相加,但是实际上一个关于 ω 的函数。这 5 项求和的过程可以使用 for 进行求和得到,当然也可以通过矩阵相乘的形式获得
X(ejω)=[x(0)x(1)x(2)
  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值