概述
1. 问题的引入
最近的数字信号处理实验中有这样的一道题
对 xa(t)=e−1000|t| 信号进行采样分析,讨论信号的抽样的最低频率,验证奈奎斯特采样定理。要求对信号 xa(t) 分析,确定采样频率,求出采样后的序列 x(n) 的频谱 ,比较不同采样频率情况下(满足和不满足采样定理) FT频谱 x(jΩ) 和 DTFT频谱 x(ejω) 关系。
实验思路如下。首先对信号进行截断,因为计算机只能分析有限长的序列,所以需要截断,截断的依据是当幅值衰减到小于某一阈值(如 e−5 )时截断;其次对截断后的连续非周期信号进行傅里叶变换(FT),这里通过 MATLAB 的 Fourier 命令可以直接得到;得到原信号的FT之后根据频谱判断截止频率(最高频率)大概在什么位置,从而确定采样信号的频率(根据香农采样定理,采样频率是最高频率的二倍);最后对采样后的信号进行DTFT。因为在 MATLAB 中没有直接求取 DTFT 的函数,所以需要自己编写。而本文的主要灵感也来自于自己编写DTFT的过程。
假设我们现在已经得到了经过抽样之后的离散非周期序列
x(n)
,现在要对其进行 DTFT 变换。由于 DTFT 的定义式如下
所以如果从定义式下手,需要对上述的 x(n)e−jω 在使得 x(n) 有意义上的区间内求和,也就是说是有限项累加求和的形式,这种形式的计算往往是通过 for 循环实现的。但是无论是在MATLAB 还是在 python 的 Numpy 计算库上,矩阵相乘的计算速度又要高于 for 循环的计算速度,所以将 for 循环改写成矩阵相乘的形式也是一件很应该做的事情,在机器学习中这个常常叫做“向量化”。
2. 使用矩阵运算实现DTFT
假设
x(n)
是一个5 点的序列,即
根据公式 (1) 可知, x(n) 的 DTFT 为
上式虽然是 5 项相加,但是实际上一个关于 ω 的函数。这 5 项求和的过程可以使用 for 进行求和得到,当然也可以通过矩阵相乘的形式获得
通过上式的矩阵相乘就可以替代了一个 for 循环。上面的5点序列是一个行信号,在很多时候我们处理的是咧信号,如
因此
上述的过程是显而易见的,因为 (AB)T=BTAT
3. 利用MATLAB绘制DTFT的幅频特性曲线
很明显通过 DTFT 得到的表达式是一个关于 ω 以 2π 为周期的周期连续函数, ω 的取值范围为 [−∞,+∞] ,因此在利用 MATLAB 在绘制DTFT的幅频特性曲线时,可以首先去一个或两个周期进行绘图(如取2个周期的话,应该绘制[ −2π,2π ]区间内的图像即可)。但实际上 MATLAB 无法直接绘制出连续函数的图像,是通过求取一系列的函数值,在把这些值连接起来得到的函数曲线。所以我们要绘制出 X(ejω) 的图像,还需要求取 X(ejω) 若干个点的值。理论上当然是取的点数越多绘制的图像越接近于真实图像,但是为了书写方便,在这里我们以 5 点为例进行说明。
假设我们求取一个周期上的 5 个点
ω0,ω1,ω2,ω3,ω4
。则最后 MATLAB 计算得到的如下
注意上面是矩阵的转置,所以实际上是一个 1×5 的矩阵,它的每一列都包含
[x(0)x(1)x(2)x(3)x(4)]
,上述矩阵等价于如下形式。
这里有三点需要注意的地方,首先上面的 ω 我们取了5个,实际上是在所讨论的周期内等间距取的5个 ω 的值;其次这里取的 ω 的数量与原信号序列长度相同只是一个巧合,实际上 ω 的数量是任意的,只要能满足取这么多的点可以画出图来就好;最后是当信号是列向量的时候,同样是根据 (AB)T=BTAT 计算。
4. 小结
在上式的计算过程中总共涉及了3个向量,即
x(n)
、
n
和
最后
以上就是无聊服饰为你收集整理的使用矩阵运算替代 for 循环实现信号的DTFT1. 问题的引入2. 使用矩阵运算实现DTFT3. 利用MATLAB绘制DTFT的幅频特性曲线4. 小结的全部内容,希望文章能够帮你解决使用矩阵运算替代 for 循环实现信号的DTFT1. 问题的引入2. 使用矩阵运算实现DTFT3. 利用MATLAB绘制DTFT的幅频特性曲线4. 小结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复