信号与系统
Table of Contents
List of Tables
1 基本概念
1.1 频率
通常说的频率,在没有特别指明的情况下,指的是模拟频率,其单位为赫兹(Hz),数 学符号用f来表示。因为现实中信号大多为模拟信号。以Hz表示的模拟频率表示的是每 秒时间内信号变化的周期数。旋转一圈表示信号变化一个周期,则模拟频率则指的是 每秒时间内信号旋转的圈数。\par 模拟角频率,数学符号Ω,其单位为弧度/秒(rad/s)。f是每秒时间内信号旋转的圈数, 每一圈的角度变化数为\(2\pi{}\)。很显然,旋转f圈对应着\(2\pi{}*f\)的弧度。即 \[\Omega=2\pi{}*f\] 数字信号是从模拟信号采样而得,采样频率通常用fs表示。数字频率更准确的叫法应 该是归一化数字角频率,其单位为弧度(rad),数学符号ω表示 \[w=2pi{}*f/fs\] 其物理意义是相邻两个采样点之间所变化的弧度数.假定有一个正弦信号x(t),其频率 f=100Hz,幅度为A,初始相位为0,则这个信号用公式可以表示为 \[x(t) = A*sin(2*pi{}*100*t) \] 用采样频率fs=500Hz对其进行采样,得到的数字信号x[n]为 \[x[n]=A*sin(2*pi{}*100*n/fs)=A*sin(0.4*pi{}*n)\] 数字信号的频率为\(0.4pi{}\), 对应两个数字频率完全相同的信号,其模拟频率未必 相同,因为这里还要考虑采样频率。这种归一化为处理带来了方便,但也给理解带来 了困惑。在数字信号中,虽然经常不显式地出现采样频率,但它却是架起模拟信号与 数字信号的桥梁,对信号处理的过程有举足轻重的影响。
- 模拟频率f:每秒经历多少个周期,单位Hz;
- 模拟角频率Ω:每秒经历多少弧度,单位rad/s,范围应该是\([-\infty,\infty]\);
- 数字频率w:每个采样点间隔之间的弧度,单位rad,范围应该是\([0,2\pi]\),也是 在一圈以内,否则违反了奈奎斯特频率定理,w就没有意义了。
- 采样频率fs:每秒采样点数,单位Hz
- 关系:\(\Omega = 2\pi{}f\), \(w = \Omega{}T\), 将数字频率和模拟频率联系起来的是采样 频率即\(w=2\pi{}f/fs\), 即数字频率可以看做归一化的模拟频率乘以\(2\pi\)
- 频域中频率的表示方法:
- 序号表示方法,根据时域中信号的样本数取0~N/2,用这种方法在程序中使用起 来可以更直接地取得每种频率的幅度值,因为频率值跟数组的序号是一一对应 的:X[k],取值范围是0~N/2 ;
- 分数表示方法,根据时域中信号的样本数的比例值取0 ~ 0.5:X[ƒ],ƒ=k/N,取 值范围是0~0.5;
- 用弧度值来表示,把ƒ乘以一个\(2\pi\)得到一个弧度值,这种表示方法叫做自 然频率(natural frequency):\(X[\Omega],\Omega=2\pi{}ƒ=2\pi{}k/N\),取 值范围是0~π;
- 以赫兹(Hz)为单位来表示,这个是特殊应用,如取样率为10kHz表示每秒有 10,000个样本数:取值范围是0到取样率的一半 ;
1.2 正交
1.2.1 正交函数
在区间[t1, t2]上定义的非零实函数f1(t)与f2(2), 若满足条件 \[\int_{t1}^{t2}f1(t)f2(t)dt=0\] 则函数f1(t)和f2(t)为区间[t1, t2]上的正交; 若f1(t)和f2(t)是复变函数,则f1(t)和f2(t)在区间[t1, t2]正交的条件是(其中T表 示共轭) \[\int_{t1}^{t2}f1(t)f2^{T}(t)dt=\int_{t1}^{t2}f1^{T}(t)f2(t)dt=0\] 正交一般是向量上的概念,也可以扩展到函数,说函数u和函数v正交;对于向量正交 由如下性质。
- 向量 u=(a, b) 和 v=(c, d) 的内积 u·v 可以用 ac+bd 来计算;
- 如果内积 u·v =0,意味着 u 和 v 两个向量正交(垂直),例如 (0,1) 和 (1,0) 就是正交的;
- 两个向量如果正交,那么说明其中的任意一个向量都完全没有另外一个向量的分量;
那么把“内积”的概念推广,对于实变函数f(x)和g(x),假如可以有这样的两个向量 对应于函数f(x)的\(u=(f(0),f(1),f(2),f(3),f(4),f(5),...,f(N))\), 对应于函数 g(x)的\(v=(g(0),g(1),g(2),g(3),g(4),g(5),...,g(N))\) , 现在让这两个N+1维向 量内积一下,可得:\(u·v=f(0)g(0)+f(1)g(1)+f(2)g(2)+...+f(N)g(N)=0\), 这样来 看,函数f和g在区间[L,R]上正交。也就是说函数的正交需要表面在一定的区间上正交, 这个正交也就代表了向量的维度。
1.3 其他
- 特征函数:一个信号函数,若系统对该信号的输出响应仅是一个常数(可以是复数)乘以 输入信号,则称该信号为系统的特征函数;
- 复指数信号:\(e^{j\Omega{}t}\)在\([0, 2\pi]\)上构成完备正交集,见数学中对复数的 定义,wt表示辐角,\([0, 2\pi]\)也就表示复数的所有辐角;
- 冲击函数:复指数信号在实轴上的积分是冲击函数\(\delta\);
- 谱熵:谱熵反映了谱的集中程度,谱熵越小表示谱越集中,谱熵越大,表示谱的不 确定性越大,信号越复杂,谱在各频率成分上越均匀;
2 线性时不变系统
2.1 概念
线性时不变系统简称LTI系统,可以用它对单位脉冲序列的响应(h(n))来表示。
离散信号可以由单位冲击响应信号来表示。式子如\ref{equ-sigma}, 其中x[k]可以 看做常量,\(\sigma[n]\) 是冲激响应。
\begin{equation} \label{equ-sigma} x[n]=\sum_{k=-\infty}^{+\infty}x[k]\sigma[n-k] \end{equation}傅里叶变化和级数:如果x(t)有一个傅里叶级数表示式\ref{equ-xt},即x(t)能够 表示成一组谐波关系的复指数信号的线性组合,那么傅里叶级数中的系数ak确定, 这对关系式就定义为一个周期连续时间信号的傅里叶级数, 其中周期为T, \(\Omega{}_{0}=\frac{2\pi}{T}\)
\begin{equation} \label{equ-xt} x(t)=\sum_{-\infty{}}^{+\infty{}}a_{k}e^{jk\Omega{}_{0}t} \end{equation}系数为式\ref{equ-ak}
\begin{equation} \label{equ-ak} a_{k}=\frac{\int_{T}x(t)e^{-jk\Omega{}_{0}t}\mathrm{d}t}{T} \end{equation}频率响应:一个脉冲响应(h(n))的离散时间傅里叶变换称为一个LTI系统的频率响应 或传递函数.也可以理解为,脉冲响应h(n)对某频率输入信号的响应,输入信号x(n) 可以表示成\(e^{j\Omega{}n}\)的级数形式,也代表了x(n)具有一系列频率分量 Ω,求一个系统对复指数信号\(e^{j\Omega{}_{0}n}\)的响应时,输入信号为 \(x(n)=e^{j\Omega{}_{0}n}\), 该响应由式子\ref{equ-ejwnhn}
\begin{equation} \label{equ-ejwnhn} x(n)=e^{j\Omega{}_{0}n} \Rightarrow h(n) \Rightarrow y(n)=h(n)*e^{j\Omega{}_{0}n} \end{equation}因而
\begin{equation} \label{equ-whn} y(n)=h(n)*e^{j\Omega{}_{0}n}=\sum_{k=-\infty}^{\infty}h(k)e^{j\Omega{}_{0}(n-k)} = [\sum_{k=-\infty}^{\infty}h(k)e^{-j\Omega{}_{0}k}]e^{j\Omega{}_{0}n} = [F[h(n)]|_{\Omega{}=\Omega{}_{0}}]e^{j\Omega{}_{0}n} \end{equation}由于输入信号x(n)可以表示成复指数的级数形式,所以x(n)的每个频率分量都可以 经过h(n)在每个频率上做响应,进而叠加得到x(n)的输出y(n),式子\ref{equ-whn} 也说明了输出序列是输入指数序列被系统h(n)在Ω0频率处的响应修饰后的结果。 因此一个LTI系统可以在频域表示为式子\ref{equ-frqzone}, 时域y(n)可从 \(Y(e^{j\Omega{}})\)用傅里叶逆变换获得。
\begin{equation} \label{equ-frqzone} X(e^{j\Omega{}}) \Rightarrow H(e^{j\Omega{}}) \Rightarrow Y(e^{j\Omega{}})=H(e^{j\Omega{}})X(e^{j\Omega{}}) \end{equation}- 系统函数:若系统的输入x(t)是一个复指数信号est, 其输出y(t)=H(s)est, H(s)表示为 \[H(s)=\int_{-\infty}^{\infty}h(r)e^{-sr}dr\] 式子中h(t)是单位冲激响应,对于离散信号x[n]=zn同理。当s和n是一般复数时, H(s)和H(z)就是该系统的系统函数。当s和n是纯虚数jΩ时,H(jΩ)就 是上面的频率响应。
- 傅里叶级数,傅里叶变换,拉普拉斯变换,Z变换: 傅里叶级数 只能对周期信号 进行分析,找出主要频率分量,也就是相应频率信号幅度最大(能量越大)的信号; 傅里叶级数具有周期性的局限性,所以又有了 傅里叶变换 ,此时信号不必是周 期性的,但是也有条件,那就是必须要是能量有限,也就是绝对可积。所以傅里叶 变换用于处理非周期信号;然而也有局限性,不适用于指数级增长的信号,所以又 推出了 拉普拉斯变换 ,拉氏变换相当于是带有一个指数收敛因子的傅里叶变换, 把频域推广到复频域,能够分析的信号就更广了,傅立叶变换是拉普拉斯变换的一 种特例,在拉普拉斯变换中,只要令Re[s]=1,就得到傅立叶变换 ,然而缺点是从拉 氏变换中只能看到复变量s,没有频率f的概念,要看幅频响应和相频响应,需要令 \(s=j2\pi{}f\). Z变换 简单地说,就是离散信号(也可以叫做序列)的拉普拉斯 变换,也可以说是离散时间信号的傅里叶变换,如果说拉氏变换专门分析模拟信号, 那Z变换就是专门分析数字信号,Z变换可以把离散卷积变成多项式乘法,Z变换看系 统频率响应。
- 所有的幅度谱、能量谱、功率谱等,都是指具有该种频率的成分对它的贡献。
2.2 公式
几种变换的时域和频域特性见表\ref{tbl-trans-way}所示
变换 | 时域 | 频域 |
---|---|---|
傅里叶级数 | 连续,周期 | 离散,非周期 |
连续傅里叶变换 | 连续,非周期 | 连续非周期 |
离散时间傅里叶变换 | 离散非周期 | 连续,周期 |
离散傅里叶变换 | 离散,周期 | 离散,周期 |
2.2.1 傅里叶级数(FT)
2.2.1.1 正变换
\[x(t)=\sum_{k=-\infty}^{\infty}a_{k}e^{jk\Omega{}_{0}t}\] 其中\(\Omega{}_{0}=\frac{2\pi}{T}\)
2.2.1.2 逆变换
\[a_{k}=\frac{1}{T}\int_{T}x(t)e^{-jk\Omega{}_{0}t}dt\] 其中\(\Omega{}_{0}=\frac{2\pi}{T}\),其实在周期T区间积分,也就代表在复指数 的周期[0, 2π]积分。也就是说在复指数的完备空间[0, 2π]求x(t)具有的复 指数分量有多少。这个复指数\(e^{j\Omega{}t}\)在所有的模拟角频率Ω构成 完备空间。所以ak表示在完备空间中每个分量所占的量,或者叫这些复指数信号的 幅度为ak
2.2.2 傅里叶变换(CTFT)
2.2.2.1 正变换
\[x(t)=\frac{1}{2\pi}\int_{-\infty}^{\infty}X(jw)e^{jwt}dw\]
2.2.2.2 逆变换
\[X(jw)=\int_{-\infty}^{\infty}x(t)e^{-jwt}dt\] 解释通傅里叶级数的ak。傅里叶变换也叫频谱密度函数
2.2.2.3 关系
- 和傅里叶级数关系:一个周期信号的傅里叶级数ak能够利用其在一个周期内的信 号的傅里叶变换X(jw)的等间隔样本来表示。即 \[a_{k} = \frac{X(jw)}{T}|_{w=kw_{0}}\]
2.2.2.4 离散时间傅里叶变换
2.2.3 傅里叶变换(DFT)
2.2.3.1 正变换
\[X[k]=\sum_{n=0}^{N-1}x[n]e^{-j\frac{k2\pi{}}{N}n}\] 在某频率k的傅里叶变换值等于,时域信号N个点和该频率k的复指数信号的N个点的 值的内积;
2.2.3.2 逆变换
\[x[n]=\frac{1}{N}\sum_{k=0}^{N-1}X[k]e^{j\frac{k2\pi{}}{N}n}\] 解释同上
2.3 卷积
如果一个系统的冲击响应为h(n), 表示方式如\ref{equ-hn},可以理解为由于一个k时 刻的单位脉冲\(\sigma{}(n-k)\)引起的系统响应为h(n-k), 而输入信号x(n)是由k从 负无穷时刻到正无穷时刻的所有冲击\(\sigma{}(n-k)\)叠加,所以x(n)的对于线性系 统的响应也就由从负无穷到正无穷逐个移位出来的h(n-k)叠加而成,写成卷积形式如 \ref{equ-conv}, 从某种意义上讲,卷积的输出结果是和时间没有关系的,所以一般 MATLAB或者python的卷积计算函数都不用带时间信息,只需要输入值序列。
\begin{equation} \label{equ-hn} \sigma{}(n-k) \Rightarrow h(n-k) \end{equation} \begin{equation} \label{equ-conv} y(n) = x(n)*h(n) \end{equation}2.4 傅里叶级数
傅里叶级数和泰勒级数都是为了将一个函数分解成若干基函数叠加形式。
2.4.1 泰勒级数
一个函数 \[f(x)=1\] 它的泰勒展开式是 \[f(x)=1\] 函数 \[f(x)=x\] 它的泰勒展开式是 \[f(x)=x\] 也就是泰勒展开将函数分解成\(1, x, x^{2}, x^{3}...\)等幂级数的和,也就是将一 个函数变成若干个函数的和。展开式在多数情况下有无限项。泰勒展开式见式 \ref{equ-taile}
\begin{equation} \label{equ-taile} f(x)=\sum_{n=0}^{\infty}\frac{f^{(n)}(x_{0})}{n!}(x-x_{0})^{n} = f(x_{0})+f^{'}(x_{0})(x-x_{0})+\frac{f^{''}(x_{0})}{2!}(x-x_{0})^{2}... \end{equation}那么为什么要将f展开成泰勒级数\(f(x)=1+x+x^{2}+x^{3}+...\),那是因为可以无限细 分得到f在每个点的变化。这类似将3234.352拆分成3000+200+30+4+0.3+0.05+0.002一 样。所谓对函数的无限细分,就是不断求导,得到若干个变化率,从而得到这个函数 到底在各个点变化的有多剧烈。变化就是导数。泰勒级数的每一阶系数就是各阶导数。 所以泰勒级数就是在描述一个函数的各个点的变化情况。
2.4.2 傅里叶级数
傅里叶级数也叫三角级数一般为 \[f(x)=1+sin(x)+cos(x)+sin(2x)+cos(2x)+... \] 只有周期函数才有傅里叶级数,非周期函数由傅里叶变换来处理。一个方波信号可以 表示成多个不同频率的正弦波组成。在某种程度上也可以认为方波是各种信号的基, 基于这样的认识有人提出了沃尔什变换。将函数分解成三角函数的和很重要。因为对 于一个周期函数来说,和周期对应的是频率。频率表示周期性变化的快慢。频率可以 表征非常广泛的一类属性。在电子学里,有电容隔直通交。其实这就是电容对电学量, 比如电压和电流,不同频率特性的不同体现。对于频率为0 的电压,被隔断,对于频 率为w的电压,会产生与w 和电压U成正比的电流。所以讲一个信号函数分解成不同频 率的分量就比较好处理问题。那为什么分解时最好用正余弦的频率,因为正余弦函数 是二阶偏微分方程(含有电容或电感等的电路方程)的本征解。另外,世界上只有两类 函数能满足给自己求二阶导还是这类函数本身,仅相差常数系数和正负号,一种就是 \(e^{x}\),另一种就是\(sin(x), cos(x)\), 后来又在复数域里统一了这两者即 \[e^{jx}=cos(x)+sin(x)j\] 所以,对于一个一般的物理信号来说,它可能不是正余弦函数,但是他们都可以拆成 不同频率的三角函数的组合。重要的是对于某种单频率的三角函数信号,系统对该频 率的三角函数的输入的响应还是同频率的三角函数,只可能有相位前后或者幅度大小 发生变化。这样就是二阶偏微分方程的本征解的含义。\par 我们知道我们要把信号函数展开成三角不同频率的三角函数的和,且系统对某种频率 的三角函数的响应方式还是同频率的三角函数,所以响应也是对这些不同频率三角函 数响应的叠加,这也叫频域分析。傅里叶级数的三角表示公式如\ref{equ-flysj}
\begin{equation} \label{equ-flysj} f(x)=a_{0}+\sum_{n=l}^{\infty}(a_{n}cos\frac{n\pi x}{l}+b_{n}sin\frac{n\pi x}{l}) \end{equation}用这个式子可以表示周期是\(2l\)的周期函数,之所以所有频率都是基频的倍数,是 因为它要符合周期性边界条件。式\ref{equ-flysj}可以简化为式子\ref{equ-flysjj}
\begin{equation} \label{equ-flysjj} f(x)=a_{0}+A_{1}sin(w_{1}x+phi_{1})+A_{2}sin(2w_{2}x+phi_{2})+... \end{equation}式子\ref{equ-flysjj}可以把傅里叶级数理解成,把周期函数拆成常数(直流分量)+一 倍频分量+2倍频分量+… 其系数\(A_{k}\)需要通过函数投影计算。函数投影类似向量的投影,一个函数u和一 个函数v的投影计算方式如\ref{equ-fun-dot}, 也就是u和v的内积就是他们相乘,并 在全区间上积分。
\begin{equation} \label{equ-fun-dot} (u, v) = \int_{a}^{b}u(x)\hat{v}(x)dx \end{equation}而在周期函数里面区间端点[a, b]就是任何一个长度为\(2\pi\)的区间端点。那么如 果把u表示成f(x),v分别取\(1, sin(x), cos(x), sin(2x)...\)等,就可以得到每 个频率的各自部分的分量大小(因为有积分累加)。为什么就一定能够筛选出对应频率 的所以分量来累加呢,这是因为有完备单位正交基,所谓的完备,就是指用 \(1, sin(x), cos(x), sin(2x)...\)完全能够把一个函数f(x)表示出来。 所谓正交,如式子\ref{equ-zj}两两相乘区间累加都等于0,是正交的。
\begin{equation} \label{equ-zj} \int_{0}^{2\pi}1*sin(x)dx=0, \int_{0}^{2\pi}sin(mx)*cos(nx)dx=0, \int_{0}^{2\pi}sin(mx)*sin(nx)dx=0, \end{equation}所谓单位,就是还需要归一化,比如\ref{equ-notuni}不是归一化的。
\begin{equation} \label{equ-notuni} \int_{0}^{2\pi}1*1dx=2\pi \int_{0}^{2\pi}sin(kx)*sin(kx)dx=pi \end{equation}要归一化就得变成如下式子
\begin{equation} \int_{0}^{2\pi}\frac{1}{\sqrt{2\pi}}*\frac{1}{\sqrt{2\pi}}dx=1 \int_{0}^{2\pi}\frac{1}{\sqrt{\pi}}sin(kx)*\frac{1}{\sqrt{\pi}}sin(kx)dx=1 \end{equation}所以傅里叶分解真正的基底是这些, 对于周期为\(2\pi\) \[\frac{1}{\sqrt{2\pi}},\frac{1}{\sqrt{\pi}}sin(x),\frac{1}{\sqrt{\pi}}cos(x)...\] 对于周期为\(2l\)的,基底是 \[\frac{1}{\sqrt{2l}},\frac{1}{\sqrt{l}}sin(x),\frac{1}{\sqrt{l}}cos(x)...\] 综合来看,用内积方法分解出的每个分量的系数如式子\ref{equ-neijfly}, 如果是非 单位化的基,结果就没有这么简洁。
\begin{equation} \label{equ-neijfly} a_{0} = \frac{\int_{-l}^{l}f(x)dx}{2l} a_{n} = \frac{\int_{-l}^{l}f(x)cos(\frac{n\pi x}{l})dx}{l} b_{n} = \frac{\int_{-l}^{l}f(x)sin(\frac{n\pi x}{l})dx}{l} \end{equation}2.4.2.1 问题
连续时间或者离散时间周期信号的傅里叶级数的系数ak是离散的
- 为什么连续时间和离散时间周期信号傅里叶级数的基底信号集合不一样。
因为连续信号的周期T是实数,k不能一定满足k=T, 但是离散信号的周期是N,k肯定可 以有有限的某个值等于N。
- 为什么连续时间周期信号的傅里叶变换时,积分周期是T。
因为基底信号集是复指数信号,复指数信号在辐角[0, 2π]上是完备正交集,要求 出每个基底信号的分量,需要在辐角[0, 2π]上做积分,但是复指数信号的角频率 Ω=2π/T, 可以将辐角的积分转换到时间的积分,这样积分区间就变成了T。
2.5 连续时间傅里叶变换(CTFT)
令x(t)是一绝对可积的模拟信号,它的CTFT表示为 \[X(j\Omega{}) = \int_{-\infty}^{\infty}x(t)e^{-j\Omega{}t}dt\] 其逆变换表示为 \[x(t)=\frac{1}{2\pi}\int_{-\infty}^{\infty}X(j\Omega)e^{j\Omega{}t}d\Omega\] 逆变换解释
- CTFT是变换到频域,需要用到模拟频率\(\Omega\),所以积分上下限是无穷;
- 模拟频率\(\Omega\)归一化时需要除以2π.
2.6 离散时间傅里叶变换(DTFT)
如果x(n)是绝对可加的,即\(\sum_{-\infty}^{\infty}|x(n)| < \infty\),则其离 散时间傅里叶变换表示如\ref{equ-xjw}
\begin{equation} \label{equ-xjw} X(e^{j\Omega{}}) \Rightarrow F[x(n)]=\sum_{-\infty}^{\infty}x(n)e^{-j\Omega{}n} \end{equation}\(X(e^{j\Omega{}})\)的离散时间傅里叶逆变换(IDTFT)可以表示如\ref{equ-xn}
\begin{equation} \label{equ-xn} x(n) \Rightarrow F^{-1}[X(e^{j\Omega{}})]=\frac{1}{2\pi}\int_{-\pi}^{\pi}X(e^{j\Omega{}})e^{j\Omega{}n}dw \end{equation}算子F[.]把一个离散信号x(n)变换成一个实变量w的复值连续函数\(X(e^{j\Omega{}})\), w被 称为数字频率,它用 弧度 来度量。 基本上离散和周期是相互关联的,一个周期信号的傅里叶级数表示中,当周期增加时, 基波频率就减小,成谐波关系的各分量在频率上越靠近,当周期变成无穷大时,这些 频率分量就变成了一个连续域。频域和时域,在数学上都是一样的,只是一个是频率 一个是时间。
- 时域离散,频域就会有周期性;
- 频域离散,时域就会有周期性;
- 频域和时域相对应,复指数信号\(e^{j\Omega{}t}\)和冲击信号\(\delta\)相对应,即如果 复指数信号是时域的信号,频率是w,则频域就是在频率轴上w处的一个冲击;
2.6.1 DTFT算法过程
如果x(n)是有限长的,则x(n)肯定是绝对可加的,即x(n)肯定有DTFT,则可以用 MATLAB或python来对任意频率w处的\(X(e^{j\Omega{}})\)进行数值计算。如果我们是在 \([0, \pi]\)间等间隔频率点来模拟估计\(X(e^{j\Omega{}})\),假设分成M分,则每个频率 点可以表示如公式\ref{equ-wk}所示,则变换式子\ref{equ-xjw}可以用矩阵向量相乘 的运算来实现。
\begin{equation} \label{equ-wk} w_{k} \Rightarrow \frac{\pi}{M}k, (k = 0, 1, ...,M) \end{equation}假定序列x(n)在\(n_{1}<= n <=n_{n}\)有N个样本,要估计点\ref{equ-wk}上的 \(X(e^{j\Omega{}})\)值。它们是[0,π]之间的(M+1)个等间隔频率点,则\ref{equ-xjw}可 以写为式子\ref{equ-xjw2}
\begin{equation} \label{equ-xjw2} X(e^{j\Omega{}_{k}})=\sum_{l=1}^{N}e^{-j(\pi/M)kn_{l}}*x(n_{l}), (k=0, 1, ..., M) \end{equation}当\({x(n_{l})}\)和\({X(e^{j\Omega{}_{k}})}\)分别排成列向量x和X,我们有式子 \ref{equ-vec}, 其中W是一个(M+1)乘N维矩阵
\begin{equation} \label{equ-vec} X = Wx \end{equation}另外,若我们分别将{k}和{nl}排成列向量,则有式子\ref{equ-wvec}
\begin{equation} \label{equ-wvec} W = [e^{-j\frac{\pi}{M}k^{T}n}] \end{equation}最终可以写成式子\ref{equ-fvec}, 如果x是行行向量,则xT直接就用x表示。
\begin{equation} \label{equ-fvec} X^{T} = x^{T}[e^{-j\frac{\pi}{M}n^{T}k}] \end{equation}2.6.2 物理意义
DFT的快速算法叫FFT,在MATLAB和Python中都有相关库,一个模拟信号,经过ADC采样 之后,就变成了数字信号。采样定理告诉我们,采样频率要大于信号频率的两倍,采 样得到的数字信号,就可以做FFT变换了。N个采样点,经过FFT之后,就可以得到N个 点的FFT结果。为了方便进行FFT运算,通常N取2的整数次方。假设采样频率为Fs,信 号频率F,采样点数为N。那么FFT之后结果就是一个为N点的复数。每一个点就对应着 一个频率点。这个点的模值,就是该频率值下的幅度特性。具体跟原始信号的幅度有 什么关系呢?假设原始信号的峰值为A,那么FFT的结果的每个点(除了第一个点直流分量之外)的模值就是A的N/2倍。而第一个点就是直流分量,它的模值就是直流分量 的N倍。而每个点的相位呢,就是在该频率下的信号的相位。第一个点表示直流分量 (即0Hz),而最后一个点N的再下一个点(实际上这个点是不存在的,这里是假设的 第N+1个点,也可以看做是将第一个点分做两半分,另一半移到最后)则表示采样频率 Fs,这中间被N-1个点平均分成N等份,每个点的频率依次增加。例如某点n所表示的频 率为 \[Fn=(n-1)*Fs/N\] 由上面的公式可以看出,Fn所能分辨到频率为为Fs/N,如果采样频率Fs为1024Hz,采 样点数为1024点,则可以分辨到1Hz。1024Hz的采样率采样1024点,刚好是1秒,也就 是说,采样1秒时间的信号并做FFT,则结果可以分析到1Hz,如果采样2秒时间的信号 并做FFT,则结果可以分析到0.5Hz。如果要提高频率分辨力,则必须增加采样点数, 也即采样时间。频率分辨率和采样时间是倒数关系。 \par 假设FFT之后某点n用复数a+bi表示,那么这个复数的模就是 \[An=\sqrt{a^{2}+b^{2}}\] 相位就是 \[Pn=atan2(b,a)\] 根据以上的结果,就可以计算出n点(n≠1,且n<=N/2)对应的信号的表达式为: \[An/(N/2)*cos(2*pi*Fn*t+Pn)\] 即\(2*An/N*cos(2*pi*Fn*t+Pn)\)。对于n=1点的信号,是直流分量,幅度即为A1/N。 由于FFT的对称性,通常我们只使用前半部的结果,即小于采样频率一半的结果.\par 总结:假设采样频率为Fs,采样点数为N,做FFT之后,某一点n(n从1开始)表示的频 率为:Fn=(n-1)*Fs/N;该点的模值除以N/2就是对应该频率下的信号的幅度(对于直 流信号是除以N);该点的相位即是对应该频率下的信号的相位。相位的计算可用函数 atan2(b,a)计算。atan2(b,a)是求坐标为(a,b)点的角度值,范围从-pi到pi。要精确 到xHz,则需要采样长度为1/x秒的信号,并做FFT。要提高频率分辨率,就需要增加采 样点数,这在一些实际的应用中是不现实的,需要在较短的时间内完成分析。解决这 个问题的方法有频率细分法,比较简单的方法是采样比较短时间的信号,然后在后面 补充一定数量的0,使其长度达到需要的点数,再做FFT,这在一定程度上能够提高频 率分辨力。
2.7 离散傅里叶变换(DFT)
离散时间傅里叶变换(DTFT)有时也称为序列傅里叶变换。DTFT实质上就是单位圆上 的(双边)Z变换。当时域信号为连续信号时,用连续时间傅里叶变换;为离散信号时, 用DTFT,DTFT使我们能够在频域(数字频域)分析离散时间信号的频谱和离散系统的频 响特性\(X(e^{jw})\)。但还存在两个实际问题。
- 数字频率w是一个模拟量,为了便于用数字的方法进行分析和处理,仅仅在时域将 时间变量t离散化还不够,还必须在频域将数字频率w离散化。
- 实际的序列大多为无限长的,为了分析和处理的方便,必须把无限长序列截断或分 段,化作有限长序列来处理。
DTFT是对任意序列的傅里叶分析,它的频谱是一个连续函数;而DFT是把有限长序列作 为周期序列的一个周期,对有限长序列的傅里叶分析,DFT的特点是无论在时域还是频 域都是有限长序列。DFT提供了使用计算机来分析信号和系统的一种方法,尤其是DFT 的快速算法FFT。
- np.fft.fft(samplings):对samplings点做FFT变换;
- np.fft.rfft(samplings):上面的是左右两边对称的,这个是只有单边的;
- np.fft.fftfreq(N):表示N点的频率序号,如果再乘以频率分辨率Fs/N, 就可以得到 N点的频率值;
- fft变换后,除第一个0频直流分量,频谱在频率上对称,对称点在奈奎斯特频率上, 即如果Fs是采样频率,对称点在Fs/2上;
- 当时域数据个数和fft变换使用的数据个数相同时,频率分辨率正常(点数较少时, 分辨率低),但是没有由于添零混入其他频率成分;
- 当时域信号数据加零数据后,可以增加fft变换的数据个数,可以提高频率分辨率, 但是振幅谱中会多出其他频率成分;
- DFT和功率谱:若数据有N个点,采样频率为fs,那么DFT的分辨率为fs/N,在没有噪 声的情况下;如果信号恰好位于k*fs/N的频率上,那么就会在这个频点处为最大值, 其他频点处为0。但是,如果信号频率不是分析频率的整数倍,那么原本集中在某个 频点的功率就会分散到整个功率谱上去。
- 频率分辨率:对于fs=8000,N=64的信号,其分辨率为125Hz,所以如果两信号频率 之间相差小于125,那么DFT的功率谱就不会区分它们。 而假如将信号之间的频率差 较大,比如1个是1500Hz,另一个是1800Hz,那么64点DFT可以区分。补0是使用DFT 分析信号的一种常用手段,它在功率谱分析上的作用主要在于:1.将样点数变为2的 整数次幂,便于FFT计算;2,使DFT的频率分析点变得更细,可以更加精确的说明信 号的所在的频率。但是补0并不能改变DFT的分辨率,即如果将64点1500与1562.5Hz 的信号混合在一起,然后补64个0,那么DFT依然不能区分它们。但是如果将信号的 采样个数提高,那么就会有所好转
- 无限长周期信号:对于原本是无限长的时域周期信号,可以通过原功率谱与窗函数 的卷积来描述有限点长度信号功率谱与原信号功率谱的差异。因而不同的窗函数有 不同的影响,虽然描述窗函数的指标很多,但是一般人们关心的主要是主瓣宽度和 旁瓣的幅度。但是他们是矛盾的,矩形窗具有最低的主瓣宽度,使得分辨率最高, 但是它的旁瓣幅度也是最高的
- DFT有效频率:信号长度N个点,则DFT最多只能表达\(\frac{N}{2}+1\)个不同的频 率, 一个直流和谐波频率,超过奈奎斯特频率后就对称重复了。
2.7.1 应用
假设有N=4的一个信号x(n),x(n)={x(0), x(1), x(2), x(3)}, 则按照DFT的公式计算 X(w)的过程如下。 \[k=0:X(0)=x(0)e^{0}+x(1)e^{0}+x(2)e^{0}+x(3)e^{0}\] \[k=1:X(1)=x(0)e^{0}+x(1)e^{-j\frac{\pi}{2}}+x(2)e^{-j\frac{2\pi}{2}}+x(3)e^{-j\frac{3\pi}{2}}\] \[k=2:X(2)=x(0)e^{0}+x(1)e^{-j\frac{2\pi}{2}}+x(2)e^{-j\frac{4\pi}{2}}+x(3)e^{-j\frac{6\pi}{2}}\] \[k=3:X(3)=x(0)e^{0}+x(1)e^{-j\frac{3\pi}{2}}+x(2)e^{-j\frac{6\pi}{2}}+x(3)e^{-j\frac{9\pi}{2}}\] 转换成矩阵形式有 $$
\begin{bmatrix} X(0) \\ X(1) \\ X(2) \\ X(3)\\ \end{bmatrix}=
\begin{bmatrix} e^{0} & e^{0} & e^{0} & e^{0} \\ e^{0} & e^{-j\pi{}/2} & e^{-j\pi} & e^{-j3\pi{}/2} \\ e^{0} & e^{-j\pi{}} & e^{0} & e^{-j\pi{}} \\ e^{0} & e^{-j3\pi{}/2} & e^{-j\pi} & e^{-j\pi{}/2} \\ \end{bmatrix} \begin{bmatrix} x(0) \\ x(1) \\ x(2) \\ x(3)\\ \end{bmatrix}\[ 记做 \]X=Wx\[ 其中W可以用复平面的单位圆来求。这样在变换时矩阵第k行(也就是求X的第几个值) 每次移动k份得到。一般这样表示,k表示一次移动k分,n表示移动多少次,nk表示移 动的复指数信号的角度,并且Nk表示移动一圈, 即一个周期。 \]WNnk = e^{-\frac{2πnk}{N}}$$
2.8 滤波器
数字滤波器与LTI系统是等价的,描述方式可以有4种。
- 差分方程;
- 单位冲激响应h(n), 可以分类如下;
- FIR滤波器:有限脉冲响应,也就是h(n)只在一段时间内才有信号,其他都是0。
- IIR滤波器:无限脉冲响应,也就是h(n)在所有时间内都有信号。
- 传递函数:若用X(z)表示输入x(n)的Z变换,用Y(z)表示输出y(n)的Z变换,则滤波 器的传递函数可以写为: \[H(z)=\frac{Y(z)}{X(z)}=\frac{b_{0}+b_{1}z^{-1}+..+b_{N-1}z^{-(N-1)}}{1+a_{1}z^{-1}+..+a_{M-1}z^{-(M-1)}}\] 利用该式可以用零极图和矢量等工具对滤波器进行直观的分析。通常M>=N, 对FIR 滤波器来说H(z)的零点个数为滤波器的阶数。对IIR滤波器来说,H(z)的极点个数 称为滤波器的阶数。所以FIR滤波器的阶数为N-1,IIR滤波器的阶数为M-1。阶数越 高表明滤波器的系数越多,在实现时运算效率也越低。
- 频率响应:复指数信号是LTI系统的特征信号,也是滤波器的特征信号,当滤波器输
入为单频复指数信号时,系统的输出为频率相同的单频正弦信号,只是幅度和相位
可能发生改变。频率响应描述的就是不同频率信号通过滤波器后幅度和相位的变化
情况。频率响应是H(z)在单位圆上的取值,并且与单位脉冲响应之间是傅里叶变换
的关系,用数学公式表示, 并且可以转为幅频响应和相频响应的乘积。可以分为
\[H(e^{jw})=H(z)|_{z=e^{jw}}=\frac{Y(e^{jw})}{X(e^{jw})}\]
- 低通滤波器;
- 高通滤波器;
- 带通滤波器;
- 带阻滤波器;
- 全通滤波器:主要用于改善信号的相频响应;
滤波器的基本构成单元
- 加法单元;
- 乘法单元;
- 延时单元;
2.8.1 设计思路
- 在具体的应用背景中提取出数字滤波器的性能参数;
- 选择合适的滤波器类型,主要是确定使用FIR还是IIR;
- 采用适当方法如用MATLAB计算出滤波器的系数;
- 用一个适当的结构来表示滤波器;
- 分析有限字长对滤波器性能的影响;
- 用软件或硬件来实现滤波器算法;
2.8.2 FIR滤波
如果一个LTI系统的单位脉冲响应长度有限,则此系统称为有限长度脉冲响应(FIR)滤
波器。因此对一个FIR滤波器,在\(n
2.8.3 IIR滤波
如果一个LTI系统的脉冲响应具有无线长度,则此系统称为无限长脉冲响应(IIR)滤波 器。
2.9 采样重构
2.9.1 采样
- 采样定理:如果采样频率\(F_{s}\)大于有限带宽信号\(x_{a}(t)\)带宽\(F_{D}\) 的2倍即 \[F_{s}>2F_{D}\] 则该信号可以由它的采样值\(x(n)=x_{a}(nT_{s})\)重 构,否则就会在x(n)中产生混叠。对该有限带宽模拟信号的2FD就称为奈奎斯特 频率。
2.9.2 重构
当我们以合适的采样频率\(F_{s}\)采样到若干样本点x(n)后,这些样本点x(n)的频域 实际上是其模拟信号x(t)的频谱的重复,所以要从x(n)恢复x(t)只需要经过一个低通 滤波器就能完整的恢复x(t),理论上可以使用sinc(t)函数, 然而实际使用中不方便.
\begin{equation} sinc(t) = \frac{sin(\pi{}t)}{\pi{}t} \end{equation}重构数学描述如下
\begin{equation} x(t) = \sum_{-\infty}^{\infty}x(n)sinc[F_{s}(t-nT_{s})] \end{equation}零阶保持器内插(ZOH):每个样本值将在整个采样周期中保持,知道收到下一个样本 为止,如下, 重构后,还需要再做一个滤波才能有略好的效果。或者可以理解为前 后两个采样点之间的数据等于前一个采样点的数据。输出信号是阶梯波,含有高次 谐波,相位滞后。 $$ h(t) =
\begin{cases} 1, 0<=t<=T_{s}\\ 0, other \end{cases}$$
一阶保持器内插(FOH):相邻的两个样本之间用直线连接,同样需要一个后段滤波器。 或者可以理解为前后两点之间线性插值。 $$ h(t) =
\begin{cases} 1+\frac{t}{T}, 0$$ - 三次样条内插: