华南理工大学数字信号处理课程实验三代码
实验报告
实验三
课程名称:《数字信号处理实验》
验证性实验
实验目的
求系统的零、极点和幅度频率响应和相位响应。
求直接型系统函数的零、极点,并转换成二阶节形式
求差分方程所对应的系统的频率响应。
设计全通系统,分析系数、零极点、幅频、相频等特性
分别设计四类线性相位FIR系统,分析系数、零点、幅频、相频等特性
实验原理
零点与极点
零点与极点是描述系统传递函数特性的关键概念。它们主要影响系统的稳定性、频率响应以及时域特性。
零点(Zeros)
零点对应于系统传递函数为零的位置,在该处系统的输出也为零。在复平面上的零点通常表示为 z = z_0。当一个系统具有n个零点时,其传递函数的分子形式可以表示为:
其传递函数的分子形式可以表示为多项式形式:
B(z) = (z - z_1)(z - z_2) \cdots (z - z_n)
其中每个因子 (z - z_i) 对应于一个位于复平面内的零点位置。
其中,z_1, z_2, \ldots, z_n 是系统的零点。
极点(Poles)
称该位置为系统的极点,则其输出信号趋于无限大,在复平面中该位置通常用坐标形式表示:
z = p_0。当一个系统具有m个不同的极点时,则其传递函数分母可表示为:
A(z) = (z - p_1)(z - p_2) \cdots (z - p_m)
其中,p_1, p_2, \ldots, p_m 是系统的极点。
零点与极点具有以下特点:
**零点和极点的数量相等特征:**在线性时不变系统中,在一般情况下系统的零点数量与极点数量是相同的。这种特性源于系统的稳定性和因果性的基本要求,在传递函数中表现为分子阶次与分母阶次相同的情况。
**分析频率响应特性:**系统中的零点与极点位置决定了其频率响应特性。其中零点主要决定了放大系数的变化范围以及放大峰值的位置特征;而极点则直接决定了系统在不同频段上的衰减特性和衰减谷值区域的分布情况。
**系统稳定性:**系统的稳定性取决于其极点的位置。在离散时间域中,若全部极点位于单位圆内部,则系统是稳定的;只要存在任何一个极点位于单位圆外部,则系统就是不稳定的。
用于计算其传递函数分子多项式与分母多项式的各个根,在此过程中我们能确定系统的零点和极点位置。在Matlab环境中,可以调用roots函数来求取这些多项式的根。
频率幅度响应
幅度频率响应表征了系统对不同频率输入信号大小的变化情况。对于离散时间系统而言,在频域中通过对系统的分析可观察到其幅值随不同频率而变化的情况。
一般情况下,在离散时间系统中,传递函数H(z)即为分子多项式B(z)与分母多项式A(z)的比例形式:
数学表达式为:
H(z) = \frac{B(z)}{A(z)}
可利用传递函数的频率响应来计算系统的频率响应。在离散时间系统中,在分析时可用单位圆上的点 e^{j\omega} 代替 z 来得到:
H(e^{j\omega}) = \frac{B(e^{j\omega})}{A(e^{j\omega})}
其 \omega 其实就是频度,在这里被用作弧度单位来描述。传递函数的频率响应通常会以复数形式进行表示,在这种情况下我们可以采用复数形式来分析系统的反应特性。其幅度 |H(e^{j\omega})| 则完整地描述了系统对于不同输入信号在各个频率下的增益或衰减特性。
在Matlab环境中可通过freqz函数来计算离散时间系统的频率响应特性。当给定系统的分子与分母多项式系数向量及其所需关注的频带位置信息时,则可获得该系统在整个频段内的幅频特性的数值结果
频率响应特性和幅频特性共同构成了系统的幅度频率响应特性,在工程实践中这一特性为我们提供了深入的理解。这种特性在滤波器设计、信号处理以及相关领域中具有着至关重要的应用价值。
相位响应
相位响应表征了系统对不同频率的输入信号所导致的相位变化情况;在离散时间系统中,相位响应揭示了信号通过系统所造成的相位滞后或超前。
与幅度频率响应相仿的情况下,则系统的传递函数 H(z) 能够被表示为分子多项式 B(z) 与分母多项式 A(z) 的比值形式:即 H(z) = \frac{B(z)}{A(z)}。
系统的频率响应基于传递函数的频率响应进行计算。在离散时间系统中,在分析过程中将复变量 z 替换为单位圆上的点 e^{j\omega} 可以得到相应的频率特性。
H(e^{j\omega}) = \frac{B(e^{j\omega})}{A(e^{j\omega})}
其中 \omega 被用来表示频率(以弧度来衡量)。传递函数的频率响应常被表达为复数形式。其相位\angle H(e^{j\omega})则反映了系统对于不同频次输入信号所导致的相位变化情况。
在Matlab中, 可以通过调用函数angle来求取频率响应的相位特性. 当系统传递函数的分子和分母多项式系数被指定时, 这一过程能够帮助我们确定系统在各个频率点上的相位特性.
相位响应有助于掌握信号经过系统后的相位变化规律,在通信系统、滤波器设计以及信号处理等领域具有重要意义。
传递函数
传递函数是表征线性时不变系统输入与输出之间关系的重要数学工具。它通过将输入信号的拉普拉斯变换映射到输出信号的拉普拉斯变换来描述系统的动态特性,在工程学和控制系统中具有广泛的应用价值。其中H(z)表示传递函数的具体形式或参数设置。
在离散时间系统中,传递函数可以用分子和分母的多项式表达:
H(z) = \frac{B(z)}{A(z)}
其中B(z)和A(z)分别代表系统的分子多项式和分母多项式。通常情况下,它们可以表示为:
B(z) = b_0 + b_1 z^{-1} + b_2 z^{-2} + \ldots + b_{N_b} z^{-N_b}
A(z) = a_0 + a_1 z^{-1} + a_2 z^{-2} + \ldots + a_{N_a} z^{-N_a}
其中分子多项式为 N_b 阶,在分母中则表现为 N_a 阶的形式。其对应的系数分别为 b_i 和 a_i 两个系列变量组构成的集合体。
传递函数具有以下特性:
稳定性和因果性
系统的稳定性和因果性取决于传递函数分母多项式 A(z) 的零点位置。当且仅当所有这些零点位于单位圆内部时,系统既是稳定的又是具有因果性的。
频率响应
传递函数是计算系统频率响应的有效工具。在单位圆上的复数域中进行 z 替换后可获得系统的频率响应 H(e^{j\omega}) ,从而进一步分析系统的幅频特性和相频特性。
系统特性分析
传递函数提供了有效的工具来分析系统的稳定性、频率响应以及其他特性。通过对传递函数的零点进行分析可以帮助理解系统的稳定性;通过分析其极点的位置能够预测系统的动态行为;研究幅度频率响应能揭示系统的增益随频率的变化情况;而相位频率响应则有助于了解信号相位变化的影响。
传递函数在系统分析与设计中发挥着核心意义,在工程实践中对于系统的分析与设计工作而言具有重要价值
全通系统
全通系统是一种特异的线性时不变系统,在频响特性中对所有信号均产生等相位滞后,并呈现高度非均匀的变化模式;同时该系统的幅度反应通常呈现出非常复杂的特征
实现全通系统的途径多种多样,并涉及直接设计、级联型设计以及反馈型设计等多种方法。其中较为常用的是级联型与反馈型方案;通过合理配置滤波器的架构与参数设置即可满足所需的技术要求。
全通系统包括两个部分,频率响应以及相位延迟:
**频率响应:**全通网络的频率响应 H(e^{j\omega}) 在所有频率点上实现一致的相位滞后 \phi(\omega),可能会呈现出较为复杂的幅度特性 |H(e^{j\omega})|。
**相位延迟:**相位延迟是全通系统的一个显著特性,在所有频率点上具有相同的值。其数学表达式为\phi(\omega) = -\omega \tau其中τ代表的是相位延迟的时间单位。
在 MATLAB 中,可以使用以下步骤来实现一个简单的全通系统:
在设计全通滤波器时:可采用 MATLAB 中的 allpass 函数来实现这一目标。例如,在 MATLAB 环境中可以通过调用 allpass 函数来实现全通滤波器的设计。
**计算频率响应:**可以使用 freqz 函数来计算全通滤波器的频率响应。
[Hz, w] = freqz(b, a, 1024);
**生成幅度和相位频率响应:**可以通过 MATLAB 提供的绘图功能来呈现全通滤波器的幅度和相位频率响应曲线。
利用这些步骤,在 MATLAB 环境中完成全通系统的频率响应特性研究与分析
线性相位FIR系统
在数字信号处理领域中广泛应用的一种基本结构,在数字信号处理领域中应用非常广泛的FIR滤波器类型
特点 :
有限脉冲响应(FIR):具有线性相位特性的FIR系统的单位脉冲响应具有有限长度特性。这意味着该系统仅对具有有限持续时间的输入信号产生具有局限时域范围影响的作用效果。这种特性使得基于数字信号处理技术实现FIR滤波器成为一种简单且高效的工程实践。
线性相位特性 :有限冲激响应(FIR)系统的特性表现为其在频率域中的幅度与零点关系。这一特征意味着该系统的频谱反应随频率呈一次函数关系变化。这种设计使得FIR系统能够避免引入额外的时间延迟或失真,并且保证信号在传输过程中的完整性和一致性
稳定性 :由于FIR系统的传递函数是有限长的,它们总是是因果和稳定的。
频率选择特性:通过配置数字有记忆滤波器的系数参数,系统能够精准地过滤出指定频段内的信号。
数学表示 : y[n] = \sum_{k=0}^{N} b_k \cdot x[n-k]
其中,y[n] 是系统的输出,x[n] 是系统的输入,b_k
是系统的系数,N 是系统的阶数。
MATLAB 实现 :
然后,可以使用设计好的系数 b 来进行信号滤波。
实验内容
求系统的零、极点和幅度频率响应和相位响应
求下列系统的零、极点和幅度频率响应和相位响应。
H(z) = \frac{0.0528 + 0.0797z^{-1} + 0.1295z^{-2} + 0.1295z^{-3} + 0.0797z^{-4} + 0.0528z^{-5}}{1 - 1.8107z^{-1} + 2.4947z^{-2} - 1.8801z^{-3} + 0.9537z^{-4} - 0.2336z^{-5}}
根据题目分析,可以得到以下思路:
其中的变量:首先存在数字滤波器的传递函数系数,并分别存储于变量num与den中
我们需要验证滤波器的零点和极点。为此,该MATLAB函数用于提取传递函数的零点和极点,并返回零点向量z和极点向量p
为了实现滤波器的设计目标:通过调用freqz函数来计算其在指定频段范围内的频率响应特性
生成频率响应:随后, 我们将利用 MATLAB 的 subplot 和 plot 函数生成幅频特性和相频特性的曲线。为了便于观察幅频特性和相频特性随频率变化的情况, 在独立的子图中分别绘制了幅频特性和相频特性
function a = verify1()
% plot(w/pi,imag(h));grid
% title('虚部')
% xlabel('\omega/\pi');ylabel('Amplitude')
subplot(2,1,1);
plot(w/pi,abs(h));grid
title('幅度谱')
xlabel('\omega/\pi');ylabel('幅值')
subplot(2,1,2);
plot(w/pi,angle(h));grid
title('相位谱')
xlabel('\omega/\pi');ylabel('弧度')
得到的结果如下:
零点
-1.5870 + 1.4470i
-1.5870 - 1.4470i
0.8657 + 1.5779i
0.8657 - 1.5779i
-0.0669 + 0.0000i
极点
0.2788 + 0.8973i
0.2788 - 0.8973i
0.3811 + 0.6274i
0.3811 - 0.6274i
0.4910 + 0.0000i

求直接型系统函数的零、极点,并转换成二阶节形式
求传递函数模型的零点和极点,并将其分解为二阶环节形式
实验书中这段MATLAB代码的作用是用来验证给定数字滤波器的零点与极点,并计算出增益系数和二阶环节参数;随后生成极点-零点分布图。
具体来说,代码的执行过程如下:
num 和 den 变量:首先,定义了数字滤波器的分子系数 num
和分母系数 den。
零点与极点的求解:该代码块中采用 tf2zp 函数来完成对传递函数分子与分母系数序列进行处理,并最终将其结果分别存储于变量 z、p 和 k 中
该极点的模长进行了计算;具体而言,这是从该极点至坐标系原点的距离;并将结果存储于变量m中
输出信息:输出了零点、极点和增益系数,以及二阶节。
二阶节计算基于 zp2sos 的机制。\n该函数不仅能够将系统的零点、极点及其增益系数转化为相应的二阶节形式,并且会将这些计算结果赋存于变量 sos 中。\n
绘图:最后,使用 zplane 函数绘制了数字滤波器的极点-零点图。
这段代码主要负责分析并结合可视化技术来研究给定数字滤波器的关键属性,并涉及其零点、极点、增益系数以及二阶节。
可以得到以下结果:
零点
0.9615 + 0.0000i
-0.5730 + 0.0000i
-0.1443 + 0.5850i
-0.1443 - 0.5850i
极点
0.5276 + 0.6997i
0.5276 - 0.6997i
-0.5776 + 0.5635i
-0.5776 - 0.5635i
增益系数
1
二阶节
1.0000 -0.3885 -0.5509 1.0000 1.1552 0.6511
1.0000 0.2885 0.3630 1.0000 -1.0552 0.7679

求差分方程所对应的系统的频率响应
这段 MATLAB 代码的主要作用是完成对给定数字滤波器频率响应的各个组成部分进行计算并生成其可视化表示。
具体来说,代码的执行过程如下:
频率响应计算:首先,在设计数字滤波器的过程中,我们设置了分子系数 num 和分母系数
den 以及对应的频率范围 w。随后,在指定的频段内调用freqz函数进行了运算,并将其结果存储于变量h中。
生成实数部分与虚数部分:通过调用 subplot 函数构建了一个包含四个子图的网格布局,并将其划分为第一至第四个区域。随后将频率响应的实数部分与虚数部分依次分配到第一个和第二个子图中。这些子图旨在展示频率变化对系统性能的影响
生成幅频特性和相频特性曲线:在第3、第4个子图中分别生成了幅频特性和相频特性曲线。这些图表用于展示频率响应的幅值与频率之间的关系以及相位角随频率的变化情况。
这段代码允许我们清晰地观察到给定数字滤波器在不同频率下的频率响应特性,具体包括其实部虚部以及幅度和相位的变化情况。
subplot(2,2,4);
plot(w/pi,angle(h));grid
title('相位谱')
xlabel('\omega/\pi');ylabel('弧度')
得到的结果如下图:

设计全通系统并分析特性
该代码需生成一个 allpass 滤波器,并对其执行验证。具体步骤如下:
首先生成归一化多项式形式的所有零点。
接着生成归一化多项式形式的所有极点。
最后计算对应的归一化增益系数。
基于上述计算结果得到频率响应曲线图中的幅值与相位数据。
在本研究中涉及num和den变量的部分中,默认情况下我们采用了allpass滤波器,并对其分子部分和分母部分进行了详细定义。具体而言,在该allpass滤波器的设计中,默认情况下其分子部分被定义为\texttt{num} = [-a, 1]的形式;而其分母部分则被设定为\texttt{den} = [1, -a]的形式;其中a是一个关键参数,在设计过程中需要根据具体需求进行调节以确保系统的稳定性与性能。
确定滤波器的零极点:我们采用 tf2zp 函数来确定滤波器的零极点,并将结果分别存入变量 \texttt{z} 和 \texttt{p} 中。
输出信息:我们采用计算得到的零点、极点和增益系数作为输出信息。其中零点用 \texttt{z} 表示,极点用 \texttt{p} 表示,并用 \texttt{k} 表示增益系数。
绘制极点-零点图:我们通常会使用 zplane 函数来生成 allpass 滤波器的极点-零点分布图,并通过这一图形直观了解其在复平面上的位置分布情况。
最终, 我们将计算出所有参数并绘制出相应的曲线; 随后, 在指定的频率范围内进行分析, 并分别绘制幅度特性和相位特性曲线以全面了解滤波器的性能特征.
<!-- -->
在测试阶段,我们分别让a = 1,a = 1 - j以及3 + 4j,得到以下结果:





该图表表明,在全通滤波器中复数 a 的不同取值会导致系统频率响应的变化情况。通过观察该系统的零极点分布可以看出,在任何 a 值下系统的零点与极点均精确地位于单位圆上这一特点能够保证系统具有良好的线性相位特性。进一步分析可以发现,在这种情况下系统的零极点图呈现对称分布特征则可推断这些全通滤波器在设计过程中成功地实现了对信号相位特性的保护。
所有滤波器均具有保持幅度谱为1的特点这一特性是全通滤波器的核心特征表明它们能够在不改变信号幅度的前提下调节相位随着参数 a 的不同取值而导致相位谱呈现多种线性相位特征这些变化直接影响了信号的相位线性度以及群时延通过这些观察我们得以深入探究参数 a 对滤波器相位响应的影响并探讨其在各类信号处理应用场景中的潜在适应性从而为合理选取参数 a 提供理论支撑这种分析对于深入理解并设计符合特定相位需求的应用至关重要
设计四类线性相位FIR系统并分析其特性
以下代码需要实现线性相位的 FIR(有限脉冲响应)系统,具体如下:
对系统系数的定义是: 在 FIR 系统中,系数 h 被称为其系统函数的参数,并用于描述系统的单位脉冲响应特性。
用于计算系统零相位系数的过程:通过对FIR系统系数h进行特定处理后得到了零相位系统的系数a。这种处理的目的在于使系统中的零相位被放置在中间位置。
频率响应的计算: 基于频率响应函数计算了 \cos(w \cdot n_1) 的值。 进而求取了系统的幅频特性和相位特性 H_r 和 p。 其中,w 代表频率参数而 n_1 则是时间参数。
呈现结果: 采用子图形式展示系统的系数、零极点分布图、幅频特性和相频特性,并分别以不同子图表进行展示,便于全面分析系统特性。
其中分析这个 FIR 系统的特性包括以下步骤:
系统系数的定义: FIR 系统中的系数 h 描述了系统的单位脉冲响应并影响了不同频率输入信号的响应方式。
该系统零相位系数的计算: 经过对系统中各参数 h 的处理后得到一个新的零相位系统参数组 a ,其中其零相位位置被精确地设置在该系统范围的中心位置 。这将有效降低信号通过系统的时滞现象
频率响应的幅频特性: 幅频特性 H_r 表征了系统对不同频率输入信号幅度上的反应情况。通过绘制幅频特性的图表可以看出系统的通带范围、阻带边界以及不同频率下幅度响应的变化趋势。
频率响应的相频特性: 相频特性的特征参数 p 揭示了系统对不同频率输入信号的相位响应规律。通过绘制相频特性曲线图,则能清晰地观察到系统在各个频率点上的相对相位变化情况。
通过对这种分析, 我们能够更深入地掌握 FIR 系统的特征以及其对不同频率信号的处理方法
FIR系统1
subplot(2,2,3);
plot(w/pi,Hr);
xlabel('w/pi');ylabel('Hr');
title('幅频特性')
grid on
subplot(2,2,4);
plot(w/pi,p);
xlabel('w/pi');
title('相频特性')
grid on
对于以上FIR系统,可以得到以下结果:

滤波器系数 h = [-4,\;3,\;-5,\;-2,\;5,\;7,\;5,\;-2,\;-1,\;8,\;-3]
利用基于线性相位的FIR设计方法求得了系数 a。计算所得的结果表明这些系数可表示为
a = [h(L+1),\; \mathbf{2} \cdot h(L:-1:1)], 其严格保证了滤波器呈现严格的线性相位特性。在图示中可见的是这些系数随n的变化情况;同时,在频率域内引入权重向量\mathbf{w} = [0:\; 1:\; 500]' \cdot (2\pi / 500)则分别揭示了系统的幅频特性和相频特性。
幅频特性图显示,在某些特定频率区间内滤波器表现出显著增强幅度的特点(通带特性),而在其他频率区间则呈现幅度减弱现象(阻带特性)。这一现象是由冲激响应序列h中的具体数值直接决定的(反映了冲激响应序列的选择对于滤波器性能的重要性)。相频特性图则揭示了滤波器相位随频率变化的关系情况(线性相位特指),其中线性相位特征使得相位变化在整个频率范围内呈现较为均匀的趋势(非线性相位会导致相位失真)。这些实验结果证实了采用对称冲激响应序列设计期望型频响的方法具有较高的有效性(同时也指出了在设计高性能FIR数字滤波器时必须考虑冲激响应序列配置对系统性能的影响)
FIR系统2
subplot(2,2,1);
stem(1:L,b);
xlabel('n');
ylabel('b(n)');
title('b(n)系数')
grid on
subplot(2,2,2);
zplane(h,1);
grid on
subplot(2,2,3);
plot(w/pi,Hr);
xlabel('w/pi');ylabel('Hr');
title('幅频特性')
grid on
subplot(2,2,4);
plot(w/pi,p);
xlabel('w/pi');
title('相频特性')
grid on
对于以上FIR系统,可以得到以下结果:

滤波器系数 $b(n)$ 是通过 $h$ 系列
$[-3, 2, -1, -2, 5, 6, 5, -2, -1, 1, -3]$
的计算得出的。具体地,通过选择 $h$
的后半部分,并进行线性变换和缩放,得到了 $b$
系列,进而观察到了滤波器的频率特性。
幅频特性图显示了滤波器在特定频率区域内的增益变化,这种变化是由系数
$b(n)$
的配置直接影响的。幅频响应中的波峰和波谷分别代表了滤波器对某些频率成分的增强和衰减作用。此外,相频特性图揭示了相位随频率的变化趋势,显示出相位的非线性特征,这在某些信号处理应用中可能是必需的。
- FIR系统3
grid on
subplot(2,2,3);
plot(w/pi,Hr);
xlabel('w/pi');ylabel('Hr');
title('幅频特性')
grid on
subplot(2,2,4);
plot(w/pi,p);
xlabel('w/pi');
title('相频特性')
grid on
对于以上FIR系统,可以得到以下结果:

系数 $c$ 是基于原始 $h$ 系列
$[-3, 1, -1, -2, 5, 6, 5, -2, -1, 1, -3]$
通过特定的计算方法得到,主要是选取 $h$
的前半部分并进行适当调整,形成对称性,确保了滤波器的特性。
幅频特性图显示了滤波器对不同频率的增益变化,其中可以看到不同频率下的增益不同,这反映了通过适当的系数设计可以实现对特定频率成分的过滤。相频特性图展示了相位随频率的变化,这种变化揭示了相位响应的特性,对于确保信号各频率成分的相位一致性极为关键。
- FIR系统4
subplot(2,2,2);
zplane(h,1);
grid on
subplot(2,2,3);
plot(w/pi,Hr);
xlabel('w/pi');ylabel('Hr');
title('幅频特性')
grid on
subplot(2,2,4);
plot(w/pi,p);
xlabel('w/pi');
title('相频特性')
grid on
对于以上FIR系统,可以得到以下结果:

系数 $d$ 是从原始 $h$ 系列 $[-3, 1, -1, -2, 5, 6, 5, -2, -1, 1, -3]$
通过特定处理得到的,主要是选取 $h$ 的前半部分并加倍,形成的新系列
$d$ 展现了如何通过系数变换调整滤波器的特性。
从幅频特性图中可见,滤波器呈现出显著的带通特性,尤其在中频区域有较大的幅度变化,这表明
$d$
系数的选择和配置对于控制滤波器的频率选择性至关重要。相频特性图则显示出相位在整个频率范围内保持几乎恒定,这种设计是为了确保信号的相位一致性和稳定性。
应用性实验(转自实验二)
实验目的
使用至少两种频率估计方法对给定信号进行频率估计。
实验原理
频率估计方法的选择与原理
频率估计的方法主要分为两类:一类是时域方法(Time Domain Methods),另一类是频域方法(Frequency Domain Methods)。时域方法主要依据信号的周期性特性,并利用自相关函数、互相关函数等统计量进行分析;而频域方法则通过研究信号的频谱特性,在功率谱密度、周期图等指标的基础上实现对信号参数的估计。
经典频率估计方法:本节主要涉及以下几种方法:周期图法、自相关法、最小均方误差法和Yule-Walker法等。这些技术在信号处理中得到了广泛应用,并且建立了坚实的数学理论基础。
基于Fourier变换的频率估计技术:通过Fourier转换将时域信号映射至频域区域进行分析以推断信号的基本频率参数。常见的技术包括periodogram法、averaged magnitude spectrum differencing technique以及high-resolution spectral estimation techniques等。
恰当的方法对于实际应用至关重要:多种频率估计技术适应于不同类型的信号特征和现实中的应用场景。当选择频率估计技术时,请综合考虑信号的特征、噪声水平以及计算复杂度等因素,并根据具体情况选择最适合的技术
检验各频率估计方案的有效性:针对所有频率估计方案都需要进行评估以确保其准确性和可靠性。一般采用均方误差等指标来衡量估算值与真实值之间的偏差程度,并以此为基础对不同方案进行比较和分析以确定最优方法。
检验各频率估计方案的有效性:针对所有频率估计方案都需要进行评估以确保其准确性和可靠性。一般采用均方误差等指标来衡量估算值与真实值之间的偏差程度,并以此为基础对不同方案进行比较和分析以确定最优方法。
FFT基本原理及其在频率估计中的应用。
FFT(快速傅里叶变换)作为一种高效率算法用于计算傅里叶变换,在离散情况下它显著降低了时间复杂度。该算法通过降阶方法显著减少了运算次数。其中 N 表示信号的长度。其核心基于分治法将原始序列划分为多个较小规模的子序列,并且这些子序列在进一步处理时会依次进行操作以实现整体频域分析的目的。
在频率估计中,FFT主要作为计算信号频谱的重要工具被应用。其核心思想在于将时域信号转换为频域表示,并在此过程中对信号进行分析与处理操作。通过采用FFT算法获得信号的频域表示来实现这一目标
FFT在频率估计中的应用主要体现在以下几个方面:
频谱分析:
FFT是一种强大的工具,在时域与频域之间建立映射关系。通过频谱分析技术,则能够系统地识别出信号中所包含的各种频率成分及其相对强度水平。从而实现对信号中各组成部分的精确估计。
谱线提取:
通过FFT结果的峰值识别和频谱分析,能够有效提取信号的主要频率成分,并进而实现对信号频率特性的估计。
相关性分析:
通过FFT方法可以计算出信号间的相关性;随后,在频域中对信号展开相关性分析;最终将完成频率估算。
在实际应用中, FFT 常用其他频率估计方法协同工作, 包括但不限于周期图法与最小均方误差法等具体方案, 从而显著提升其估计的精确度与可靠性.
信噪比的概念与计算方法
信号功率 P_s 的计算公式为:
P_s = \frac{1}{N} \sum_{n=0}^{N-1} |x(n)|^2
其中,N 是信号的样本点数,x(n) 是信号在时域上的离散样本值。
噪声功率的计算:
同样地,在给定噪声信号的情况下,我们可以估算其功率以度量其大小。这里所说的"估计"意味着我们通常通过分析信号中各个样本值平方后的平均数来确定该参数的具体数值。
噪声功率 P_n 的计算公式为:
P_n = \frac{1}{N} \sum_{n=0}^{N-1} |e(n)|^2
其中,e(n) 是信号中的噪声样本值。
用于计算信噪比的方法:首先定义信噪比为信号功率与噪声功率之比,并以分贝为单位量化。其次依据定义推导出其计算公式如下所示
其中,SNR_{\text{dB}} 是以分贝表示的信噪比,P_s
是信号功率,P_n 是噪声功率。
AWGN的生成与信号加噪处理
AWGN的生成:
作为一种典型的噪声模型,在通信系统设计中常常采用加性白高斯噪声(AWGN)来模仿实际信道中的干扰特性。该模型不仅具备均值为零的高斯分布特性和频率谱密度均匀分布的特点(即所谓的"白色"特性),而且其在频域上呈现出均匀功率谱密度的特征。基于这一数学性质,在数字信号处理领域中常用随机数生成方法来创建AWGN序列,并将其叠加到原始信号上以实现信道建模的目的。
高斯白噪声(AWGN)的性质:
该噪声类型具有零均值特性,并且其方差由参数\sigma^2决定。在信息增强技术中通常会向原始数据叠加这样的 AWGN 干扰源以评估系统的抗干扰能力。
信号加噪处理:
在信号处理领域中,通常通过向原始信号添加AWGN来模拟真实传输环境。实现信号增强过程的方法包括向原始数据序列添加人工引入的噪声样本。增强后的数据序列可作为评估各种降噪算法性能的重要依据。
通过引入加性白高斯噪声并将其添加到原始信号上,在不同的信噪比条件下构建相应的信号环境,并对各种信号处理算法的性能进行评估。
实验内容
Rife算法实现频率估计
Rife算法(也被称作Rife-Zhilin算法)是一种常用于频率估计的重要信号处理技术,在单频或多频信号分析方面表现出色。它主要建立在峰值检测与迭代优化的基础上,并通过不断精炼的方式实现了对信号频率成分的有效捕捉与分析功能。[@rife1989digital]
以下是Rife算法的主要步骤和原理:
信号预处理: 在该过程中, 对原始信号实施预处理措施, 包括去趋势和滤波等技术, 以降低噪声干扰并增强频谱估计的效果。
峰值检测: 通过特定的峰值检测手段(例如基于局部最大值的方法)来识别 FFT 输出中的峰值区域。这些特征点反映了信号中不同频率成分的存在.
初始化参数: 基于峰值检测的结果,设置频率估计的初始参数包括但不限于初始频率值和步长等。
具体而言,在迭代优化过程中:采用迭代优化方法(如最小二乘法或牛顿法),持续更新频率参数;最终目标是使建立的信号模型不仅在时域方面与原始信号高度吻合,并且在频域方面也达到了良好的匹配程度。
收敛判断: 当进行迭代计算时,在每一步循环中为确定算法的终止条件而设定一系列收敛标准(如指定的最大迭代次数或允许的最大残差值)。随后对该过程运行的结果进行检验以确认其是否达到了预期的稳定状态。若达到预期的稳定状态,则终止当前的迭代过程;否则继续进行参数优化并调整计算策略。
频率估计:
最终得到收敛后的频率参数作为对信号频率成分的估计结果。
根据描述,可以得到以下思路:
输入参数 :
spec:信号频谱列向量或以列向量叠加的矩阵。
fs:信号的采样率。
输出参数 :
* `fc`:Rife 算法估计出的频率。
主要步骤 :
1.
计算信号频谱中的峰值和对应的位置。
2.
根据峰值的位置以及频谱的形状,利用 Rife 算法估计出信号的频率。
3.
将估计得到的频率存储在输出向量 fc 中。
代码逻辑 :
1.
通过 max 函数找到频谱中的峰值及其位置。
2.
对每个峰值位置进行处理,根据 Rife 算法的公式估计频率。
3.
最终得到的频率存储在输出向量 fc 中,并返回给调用函数。
end
得到的结果如下:

从图中可以看出,在不同信噪比下信号的均方误差(MSE)呈现显著变化。具体而言,在信噪比从5dB逐步提升至10dB的过程中(SNR),MSE出现了明显下降趋势。这一现象表明,在这一范围内信号估计误差得到了有效降低,并且频率估计精度相应得到提升。值得注意的是,在信噪比降至约-5dB时(SNR \approx -5 dB),MSE达到了最小值点。这表明此时Rife算法能够达到最佳频率估计效果。然而,在信噪比进一步增加至0dB和5dB的过程中(SNR \geq 0 dB),观察到MSE突然出现显著上升趋势。这种现象提示我们,在较高信噪比条件下(如SNR = 0 dB及以下),尽管算法仍可运行但其性能出现了明显下降趋势
该MSE指标随着信噪比(SNR)较高的情况下出现的趋势表明,在处理过于干净信号所导致的结果可能存在一定的偏差。这可能源于算法运行过程中所涉及的一些内部机制影响或者与快速傅里叶变换(FFT)相关的数值计算问题。例如,在此过程中可能会出现频谱泄漏现象或者由于使用的窗函数特性而导致的能量分布不均匀的问题。这一发现表明,在实际应用环境中尤其是当信噪比较高时(即更高的SNR水平),为了提高频率估计精度并减少相关误差的影响,在理论上应进一步研究和完善该算法。
Pisarenko 谐波分解算法实现频率估计
基本原理: Pisarenko谐波分解算法是一种信号处理方法。该方法利用信号的自相关矩阵来进行频率估计,并假设信号是由正弦波成分构成的,在给定噪声条件下能够通过分解自相关矩阵来准确估计信号的频率信息。文献引用:@pisarenko1973retrieval
算法步骤:
1.
构建自相关矩阵:对于给定的信号,首先计算其自相关矩阵。
2.
该方法涉及通过执行特征值分解操作来处理自相关矩阵,并最终计算出相应的特征值及其对应的特征向量。
3.
频率估计:基于特征值和特征向量的方法能够用于估计信号中的不同频率成分。一般而言,在分析时会关注那些最小的非零特征值所对应的主特征向量,在这些主向量中包含了信号的主要频率信息,并且通过这些主特征向量可以计算出具体的频率参数。
优缺点: *
长处:Pisarenko 谐波分解算法在高频段表现优异,在处理单一频率信号时展现出较高的准确性。尤其在单一频率信号分析方面表现出很强的稳定性。
缺点:该算法在处理多频信号方面存在不足,并且尤其当遇到较大的噪声干扰时容易受到严重影响
应用领域: Pisarenko谐波分解算法在信号处理、通信系统以及雷达系统等众多领域中广泛应用,在这些领域中该算法主要用于提取信号中的频率成分,并进行频率估计与谱分析
根据描述,可以得到以下思路:
初始化输出频率数组 fc。
对于每个输入信号,执行以下步骤:
获取单列频谱数据 spectrum。
计算频谱的自相关。
使用自相关值构建 Toeplitz 矩阵 R。
对 R 进行特征分解,得到特征向量和特征值。
通过计算得到最小特征值对应的特征向量,在此过程中所得出的该特征向量能够有效地反映信号中最重要的频率组成。
通过特征向量计算频率估计值 phd_freq。
修正频率估计,确保其为正值(因为 atan2 的范围是 -\pi 到
\pi)。
存储计算得到的频率估计值到输出数组 fc 中。
autocorr_values = ifft(abs(spectrum).^2);
% 生成自相关矩阵
R = toeplitz(autocorr_values(1:nfft/2+1));
% 特征分解
[eigenvectors, eigenvalues] = eig(R);
% 找到最小的特征值对应的特征向量
[min_eigenvalue, min_index] = min(abs(diag(eigenvalues)));
phd_vector = eigenvectors(:, min_index);
% 计算频率,假设为单频信号
phd_freq = fs / (2 * pi) * atan2(imag(phd_vector(2)), real(phd_vector(1)));
% 修正频率估计,保证其为正值
if phd_freq < 0
phd_freq = phd_freq + fs/2;
end
% 存储计算的频率
fc(k) = phd_freq;
end
end
可以得到以下结果:

这张图呈现了采用Pisarenko谐波分析方法进行频率估计时的均方误差(MSE)动态变化趋势。相较于前文所述的Rife算法,在某些信噪比(SNR)值上,Pisarenko谐波分解方法展现出更高的均方误差水平。
通过查看图形,在SNR接近-5dB时,MSE急剧上升至峰值水平,表明在此处,算法性能明显下降.随后,在SNR提升至0dB及10dB的过程中,MSE逐步恢复正常
该现象可能源于Pisarenko算法在接近平衡信噪比条件下出现的内部数值不稳定现象。这表明尽管Pisarenko算法在低噪声或高噪声环境下表现良好,在某些特定信噪比水平下仍需采取额外措施以增强其鲁棒性。
MUSIC算法实现频率估计
MUSIC(Multiple Signal Classification, MUSIC)算法是一种经典用途的频谱分析方法,在处理稀疏频谱成分方面具有显著优势。该方法最初由Schmidt在1986年提出并加以完善,在通信系统设计、声呐技术开发以及雷达信号处理等领域发挥着重要作用。该算法的核心在于通过优化空间滤波器实现对信号主频偏移角的有效估计,并结合矩阵分解技术实现了高分辨率频谱重建功能[@schmidt1986multiple]
以下是MUSIC算法的基本原理:
构建数据矩阵: 首先,在接收的数据基础上将其转换为以D表示的数据矩阵形式,在此过程中,则会生成一系列特征向量集合\{d_i\}, 其中每个d_i对应于第i个接收的信号样本.
该算法通过数据矩阵计算信号空间协方差矩阵,并揭示了信号的统计特性
特征分解:
对信号空间协方差矩阵进行特征分解,得到特征向量和特征值.
构建伪谱密度函数: 利用特征向量构建伪谱密度函数(Pseudo Spectrum),是MUSIC算法的关键组成部分。该方法可用于分析信号中的频率组成。
频率估计: 首先通过伪谱密度函数确定信号的主要周期性特征;其次,在频域中寻找峰值位置,并将其对应到信号的时间序列中以获得该信号的频率估计值。
MUSIC算法的一个显著优势在于能够在多频谱成分中实现良好的分辨能力,在低信噪比场景下表现出卓越的性能。该方法特别适合于处理仅包含少数高频成分的信号,并且无需事前明确信号的具体数量及其幅度信息。
总体而言,在雷达技术、通信系统以及天文学等多个领域中进行信号处理和谱估计时,MUSIC算法展现出卓越的能力
根据描述,可以得到以下思路:
构建数据矩阵: 在数据矩阵中表示接收到来的数据样本。具体而言,在此过程中将接收到的信号数据组织成一个二维数组形式,在此数组中每一列对应一个接收过来的信号样本。
计算信号在空间域中的协方差矩阵: * 通过对数据矩阵进行处理得到相关性矩阵(即协方差矩阵),该相关性矩阵能够反映信号的空间分布特征。
特征分解: * 对信号空间协方差矩阵进行特征分解,得到特征向量和特征值。
基于特征向量的方法构建伪谱密度函数PseudoSpectrum被认为是MUSIC算法的关键部分。此函数主要用于估计信号中的频率组成。
频率估计: *通过对伪谱密度函数的研究, 确定为该信号的主要振动频率对应的峰值频率即为其频率估计值.
<!-- -->
spectrum = spec(:, k);
% 计算自相关
autocorr_values = ifft(abs(spectrum).^2);
% 生成自相关矩阵
R = toeplitz(autocorr_values(1:nfft/2+1));
% MUSIC算法实现
[eigenvectors, ~] = eig(R);
noise_subspace = eigenvectors(:, 1:end-1);
% 搜索所有可能的频率以找到谱峰
music_spectrum = zeros(nfft, 1);
for f_idx = 1:nfft
a = exp(-1j * 2 * pi * (0:(nfft/2)) * (f_idx - 1) / nfft).';
music_spectrum(f_idx) = 1 / (a' * (noise_subspace * noise_subspace') * a);
end
% 找到谱峰
[pkheights, pklocs] = findpeaks(abs(music_spectrum));
% 如果存在多个峰值,则选择最大的峰值
if ~isempty(pklocs)
[~, idx] = max(pkheights);
peak_freq = pklocs(idx);
fc(k) = (peak_freq-1) * fs / nfft;
else
fc(k) = NaN; % 如果没有找到峰值,返回NaN
end
end
end
得到的结果如下:

这张图表呈现了基于MUSIC算法的频率估计过程及其对应的均方误差(MSE)随信噪比(SNR)的变化情况。具体而言,在信号处理领域中,该算法通过子空间方法实现频谱分析技术,并主要应用于多源信号分离,并在较高信噪比环境中展现出良好的效果。
可观察到当信噪比从-20 dB逐步提升至10 dB时,MSE的变化趋势呈现一定的波动性. 在信噪比从-20 dB逐步提升至-5 dB的过程中,MSE持续下降,这表明随着信噪比的提高,MUSIC算法能够更精确地识别信号的频率成分. 然而,当信噪比接近于0 dB时,MSE出现显著上升并达到一个局部峰值随后随着信噪比继续提升,MSE再次下降.
这种出现在中等信噪比(SNR)附近的峰值可能源于MUSIC算法处理特定信噪比水平信号时因内部基于假设或计算过程中的限制因素而导致估计误差显著增加。这表明,在该信噪比水平上,MUSIC算法可能需要适当调整参数或改进模型以提高其鲁棒性和精确度。
总体而言,在信噪比大多数区间内,MUSIC算法展现出较好的性能,然而当信噪比处于0dB附近时,该算法会出现一定的稳定性问题,可能需要进一步分析和优化措施来解决这一问题
ESPRIT算法实现频率估计
该ESPRIT(Estimation of Signal Parameters via Rotational Invariance Techniques)算法旨在提供一种高度精确的方法来估算信号参数,在超分辨率频谱分析与方向-of-arrival估计方面具有显著优势。其核心技术在于巧妙地结合信号子空间结构与旋转不变性原理,并通过将信号子空间投影至其自身旋转不变的方向上而实现这一目标。从而实现了对信号频率的精确推断。
下面是ESPRIT算法的基本步骤:
构建数据矩阵的过程: 将接收到的信号数据表示为D \in \mathbb{R}^{n \times m}的形式,在其中每一列对应一个接收到来自不同传感器的信号样本。
确定信号子空间: 通过奇异值分解(SVD)方法对数据矩阵进行处理,并从而获得信号子空间的估计结果。
构建共轭子空间:
利用信号子空间的性质,构建与之正交的共轭子空间。
计算估计矩阵: 通过共轭子空间的特征向量,构建估计矩阵。
提取信号频率: 对估计矩阵进行特征分解,得到信号频率的估计值。
根据上述描述,可以得到以下思路:
生成数据矩阵:
将采集到的信号序列按照时间顺序排列形成数据矩阵形式,并使每列对应一个采集到的信号样本。其中涉及的关键变量包括:
signal:表示生成的数据矩阵;fs:表示采样率参数。
SVD 分解:
通过执行奇异值分解(SVD)对数据矩阵进行处理,在此过程中估计了信号子空间。在此操作中,我们采用了 MATLAB 内置函数 svd 来完成奇异值分解任务。
确定信号子空间: 在SVD分析结果中选取信号子空间的具体步骤如下。其中的变量对应于左奇异向量矩阵U。
解相位: 通过分析所选信号子空间中的特征向量来解算各频率分量的相位信息。最终确定各频率分量对应的相位值。其中变量 phi 被定义为各个频率分量的相位值。
转换为频率: 将相位转换为相应的频率值。这里的变量为 fc ,表示计算得到的频率。
确保频率为正值: 最后,确保所有估计出的频率都是正值。
<!-- -->
% 选择信号子空间
Us = U(:,1);
% 解相位
phi = angle(Us(end) / Us(1));
% 转换为频率
fc(k) = fs * phi / (2 * pi);
end
% 确保所有频率为正值
fc = abs(fc);
end
可以得到以下结果:

这张图通过使用ESPRIT算法对频率进行估计展示了均方误差(MSE)随信噪比(SNR)的变化情况。ESPRIT算法作为一种广泛使用的参数估计技术,在分析多源信号方面展现出卓越的效果;它通过提取信号子空间特性来实现未知参数的精确估计,在实际应用中具有重要的参考价值。
通过图形可以看出随着信噪比从-20dB升至-5dB时,MSE逐步下降并达到了最低点,表明在该信噪比水平下,ESPRIT算法具有较高的准确性来估计信号频率.这一现象可能源于在该信噪比下的情况,ESPRIT算法成功地区分了信号子空间与噪声子空间.
然而,在SNR达到0dB至5dB时出现上升趋势,并且这可能源于算法在处理较高信噪比信号时遇到了新的挑战。例如模型过拟合或其他复杂因素影响了信号处理效果,在更高的10dB信噪比水平上出现明显增长趋势。这是因为这种情况下算法的某些基本假设不再适用而导致估计性能下降
这个结果说明了ESPRIT算法的表现特征,在中等信噪比水平(如-5dB)下表现出良好的效果;然而,在信噪比高于或低于这一水平时,则需要采取相应的措施以确保系统的性能得到维持和提升。这些措施主要包括对算法内部参数进行调节以及对其信号模型进行优化设计,并且还可以考虑引入更为先进的信号处理技术和分析手段以提高系统在不同工作条件下的适用性
Capon谐波分解算法实现频率估计
Capon's波形分解法是一种旨在进行频谱估计的技术[@capon1969high]。它能够在噪声存在的情况下实现精确的频点测定以完成信号频率估计的任务。该方法遵循最小均方误差原则,并通过优化空间频谱分析技术以提升频率估计准确性。具体而言,请参考以下详细步骤说明:
生成数据矩阵: 将接收来的信号序列转换为数据矩阵形式,并使每一列对应于一个接收来的信号样本.
基于数据矩阵计算协方差矩阵: 通过计算数据矩阵的协方差获得该协方差矩阵,并揭示其反映的信号统计特性。
在空间谱估计方法中:
由相关矩阵构建,在信号处理中通过构建相关矩阵求解信号频谱特性;
即得到的空间频率分布特征。
最小方差准则:
Capon谐波分解技术基于最小方差准则来改善空间谱估计的效果,并通过减少噪声功率来实现更高的信号频率估计精度.
本节主要介绍基于优化后空间谱的频率估计方法。R_x(f)的空间域采样数据经过预处理并计算其自相关函数\hat{R}_x(\tau)之后,在频域内取其虚部进行快速傅里叶变换得到|\hat{R}_x(f)|。随后通过对这些数据进行加权平均处理以消除噪声的影响,并结合预先计算好的经验权重因子得到最终的结果\hat{\omega}(f)。对于每个待测信号x(t), 我们将上述步骤依次执行即可得到其幅角函数\omega(x(t))即为该信号的基本频谱特征。
Capon谐波分解技术的主要优势在于充分考虑了信号与噪声的空间结构关系,并能在存在较强噪声的情况下实现精确的频谱估计
根据上述描述,可以得到以下思路:
系统性地评估信号的信息量: 借助该函数来确定信号矩阵及其相关属性。
创建并初始化频率输出数组:基于信号的数量初始化一个数组,并将其设为用于存储估计得到的频率值。
对每个信号进行处理: 使用循环逐个处理每个信号。
获取单列频谱数据: 从频谱矩阵中提取出当前信号的频谱数据。
计算自相关: 通过傅里叶逆变换作用于频谱数据之后的结果进行处理,并对处理后的结果取其模值的平方以获得自相关序列。
生成自相关矩阵: 根据自相关值构建自相关矩阵。
保证自相关矩阵为正定: 为了避免因矩阵不正定而产生的计算问题,请对自相关矩阵进行轻微调整。
Capon谱估计: 根据Capon谐波分解算法的原理,在各个频率点上实现Capon谱估计值的计算。
确定频谱峰值位置: 在Capon谱估计结果中确定最大值对应的位置,即为此频率值。
计算估算的频率: 对应地将谱峰的位置转换为相应的频率值并记录到输出频率数组中。
<!-- -->
% Capon谱估计
可以得到以下实验结果:

这张图呈现了Capon算法(也被称作最小方差无失真响应MVDR算法)在频率估计过程中的表现情况。该算法属于一类自适应波束形成技术,并主要用于增强信号的方向性和抑制噪声。
从图中可以看出,在信噪比从-20dB逐步上升至-5dB的过程中,MSE值持续下降,并最终达到最小值。这表明当信噪比降至-5dB时,Capon算法能够充分挖掘信号的统计特性,并最大限度地降低了估计误差量程从而实现了较为精确的频谱估计。
然而,在信噪比(SNR)从-5dB上升至0dB的过程中,均方误差(MSE)呈现出持续上升的趋势,在这一临界值附近达到了明显的峰值点。这种现象可能是由于该算法在这一特定信噪比区间内所具有的内在特性所致,在处理接近平衡点的信噪比时可能出现参数估计不稳定或模型适应性不足的问题。接着,在SNR继续提升至10dB后,MSE再次呈现下降趋势
该算法在不同信噪比水平的表现变化表明,在极端信噪比条件下尤其是当信噪比接近0dB时可能存在优化需求以提升鲁棒性并保证准确性。因此,在实际应用中选择合适的模型参数并对其施加适当的调整是确保其稳定性和可靠性的关键因素。
主程序部分
在主程序模块中包含了读取S.mat文件中的信号数据以及生成模拟噪声信号等主要操作流程,在完成这些步骤后调用了该方法的具体实现函数,在此基础上阐述了整个算法的工作原理
这段代码执行了信号频率估计算法在不同信噪比(SNR)下的性能评估过程。具体步骤如下:初始化参数→迭代优化→输出结果→循环结束。
加载信号数据: 使用 load S 命令加载信号数据。
定义不同信噪比(SNR)的取值区间和其他参数:
生成含噪声的信号:
该系统进行了100次循环迭代,在每次循环中生成一批具有不同信噪比的数据。首先,向原始信号S添加不同信噪比的高斯白噪声以获取带噪声样本;接着对每个处理后的信号施加矩形窗函数以降低频谱泄漏的影响。
进行频率估计时
计算估计误差: 计算了100次估计的频率与真实频率之间的误差。
计算均方误差(MSE):
对每个信噪比下的估计误差进行均方误差的计算。
生成性能曲线图: 基于不同信噪比下的均方误差(MSE),采用曲线图的形式展示该算法在不同噪声水平下的估计效果。
这段代码用于评估信号频率估计算法在不同信噪比条件下的性能表现,并且实际使用时需要将 replace_the_function_above 部分替换为具体的频率估计算法函数,并根据需求调整其他参数。
