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

本文介绍如何利用矩阵运算来实现离散时间傅里叶变换(DTFT),以提高计算效率。通过MATLAB,我们可以简化对有限长序列的DTFT计算,并绘制幅频特性曲线。文中以5点序列为例,展示将双层循环转化为向量乘法的过程,揭示了矩阵运算在数字信号处理中的应用价值。

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)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值