Matlab如何进行利用离散傅里叶变换DFT (快速傅里叶变换FFT)进行频谱分析

2023-11-16

1. 定义

信号在频域能够呈现出时域不易发现的性质和规律,傅里叶变换是将信号从时域变换到频域,便于在频域对信号的特性进行分析。离散傅里叶变换 (DFT),是傅里叶变换在时域和频域上的离散呈现形式,通俗的说就是将经过采样的有限长度时域离散采样序列变换为等长度的频域离散采样序列,通过对变换得到的频域采样序列进行适当的换算和处理,可以得到信号的频谱(频率-幅值曲线和频率-相位曲线)。
离散傅里叶变换 (DFT)的定义为:

X ( k ) = D F T [ x ( n ) ] = ∑ n = 0 N − 1 x ( n ) e − j 2 π N n k X(k) = {\rm{DFT}}[x(n)] = \sum\limits_{n = 0}^{N - 1} {x(n){e^{ - j\frac{{2\pi }}{N}nk}}} X(k)=DFT[x(n)]=n=0N1x(n)ejN2πnk, 0 ≤ k ≤ N − 1 0 \le k \le N-1 0kN1

式中, x ( n ) x(n) x(n)为时域离散采样序列(通常为实数序列), N N N为时域离散采样序列 x ( n ) x(n) x(n)的长度, X ( k ) X(k) X(k)为频域离散采样序列(通常为复数序列)。

快速傅里叶变换(FFT)是离散傅里叶变换(DFT)的一种快速算法,FFT的计算结果与DFT完全相同,但FFT相对于DFT减小了计算量、节约计算资源消耗,能够适应在线计算,因此实际DFT都是通过FFT算法来求得结果。

2. 变换和处理

Matlab软件自带fft函数实现快速傅里变换算法,但是光使用fft并不能直接得到信号的频谱,还需要解决以下问题,下图为DFT变换后的X(k)复数序列幅值、相位图。

DFT变换后的X(k)复数序列幅值、相位图

a) 幅值变换 X ( k ) X(k) X(k)序列的幅值大小与参与变换的时域序列x(n)长度N有关,变换后的幅值 ∣ X ( k ) ∣ |X(k)| X(k)需要乘以 2 / N 2/N 2/N得到真实幅值;
b) 有效频率区域 X ( k ) X(k) X(k)序列由两部分共轭复数序列组成(复数共轭表示幅值相等、相位相反),相当于只有一半的复数序列是独立有效的,这部分复数序列对应 0 − f s / 2 0 - f_s/2 0fs/2的频率区域( f s f_s fs为时域离散采样序列 x ( n ) x(n) x(n)的采样频率)。
c) 直流信号的处理:直流信号幅值(对应频率0Hz)为两部分共轭复数序列在频率0Hz处的加和,其真实幅值再乘以 2 / N 2/N 2/N后还需要再除以2得到真实的直流信号幅值。

3. 函数

初学的朋友若不理解上述变换和处理技巧,很难得到正确的频谱图。为此作者在fft函数的基础上,使用Matlab开发了函数DFT.m,通过函数来实现上述幅值变换、有效频率区域和直流信号的处理,能够直接分析出给定离散信号x(n)的幅值谱和相位谱,函数简单、易用、通用性好。

function [f,X_m,X_phi] = DFT(xn,ts,N,drawflag)
% [f,X_m,X_phi] = DFT(xn,ts,N,drawflag) 离散序列的快速傅里叶变换,时域转换为频域
% 输入  xn为离散序列 为向量  
%       ts为序列的采样时间/s
%       N为FFT变换的点数,默认为xn的长度  
%       drawflag为绘图标识位,取0时不绘图,其余非0值时绘图,默认为绘图
% 输出 f为频率向量
%      X_m为幅值向量
%      X_phi为相位向量,单位为°
% 注意计算出来的0频分量(直流分量应该除以2)  直流分量的符号应结合相位图来确定
% By ZFS@wust  2020
% 获取更多Matlab/Simulink原创资料和程序,清关注微信公众号:Matlab Fans

4. 实例演示

下面结合实例进行演示和分析。

例1:单频正弦信号(整数周期采样)

%% Eg 1 单频正弦信号
ts = 0.01;
t = 0:ts:1;
A = 1.5;       % 幅值  
f = 2;         % 频率
w = 2*pi*f;    % 角频率
phi = pi/3;    % 初始相位 
x = A*cos(w*t+phi);   % 时域信号
figure
plot(t,x)
xlabel('时间/s')
ylabel('时域信号x(t)')
% DFT变换将时域转换到频域,并绘制频谱图
[f,X_m,X_phi] = DFT(x,ts);

结果
在这里插入图片描述
在这里插入图片描述

正弦信号频率为2Hz,频谱分析频率为1.98Hz
正弦信号幅值为1.5,频谱分析幅值为1.495
正弦信号相位为60°,频谱分析相位为63.32°

例2:单频正弦信号(非整数周期采样)

%% Eg 2 单频正弦信号(非整数周期采样)
ts = 0.01;
t = 0:ts:1;
A = 1.5;       % 幅值  
f = 1.5;         % 频率
w = 2*pi*f;    % 角频率
phi = pi/3;    % 初始相位 
x = A*cos(w*t+phi);   % 时域信号
figure
plot(t,x)
xlabel('时间/s')
ylabel('时域信号x(t)')
% DFT变换将时域转换到频域,并绘制频谱图
[f,X_m,X_phi] = DFT(x,ts);

结果
在这里插入图片描述
在这里插入图片描述

正弦信号频率为1.5Hz,频谱分析频率为0.99Hz、1.98Hz
正弦信号幅值为1.5,频谱分析幅值为1.034、0.923
正弦信号相位为60°,频谱分析相位为160.93°、-33.76°

总结:DFT变换后频率序列的最小单位刻度为 f s / N f_s/N fs/N(此例为1Hz),非整数周期采样时关心信号的频率(此例为1.5Hz)不是频率分辨率 f s / N f_s/N fs/N的正整数倍,那这个频率成分信号会由前后两个正整数倍的频率成分信号(此例为1Hz和2Hz)的线性组合来替代,这就是频谱泄漏现象,非周期采样时某频率成分信号向两侧频率分辨率正整数倍的频点泄漏。实际频谱分析时并不清楚所关心的频率点精确值,避免此问题的一个解决方法是,取更多的点参加DFT,即时域序列 x ( n ) x(n) x(n)长度 N N N值取长一些,让频率分辨率 f s / N f_s/N fs/N很小,以减小频谱泄漏现象。

%% Eg 2 单频正弦信号(非整数周期采样)
ts = 0.01;
t = 0:ts:1;
A = 1.5;       % 幅值  
f = 1.5;         % 频率
w = 2*pi*f;    % 角频率
phi = pi/3;    % 初始相位 
x = A*cos(w*t+phi);   % 时域信号
figure
plot(t,x)
xlabel('时间/s')
ylabel('时域信号x(t)')
% DFT变换将时域转换到频域,并绘制频谱图
[f,X_m,X_phi] = DFT(x,ts);

结果:频谱泄漏情况大为改善,采样点继续增多时,频谱泄漏会进一步减小。
在这里插入图片描述
在这里插入图片描述

正弦信号频率为1.5Hz,频谱分析频率主要成分为1.46Hz、
正弦信号幅值为1.5,频谱分析频率主要成分对应幅值为1.41
正弦信号相位为60°,频谱分析频率主要成分对应相位为89.5°

例3:含有直流分量的单频正弦信号

%% Eg 3 含有直流分量的单频正弦信号
ts = 0.01;
t = 0:ts:1;
A = 1.5;       % 幅值  
f = 5;         % 频率
w = 2*pi*f;    % 角频率
phi = pi/6;    % 初始相位 
x = 0.5 + A*cos(w*t+phi);   % 时域信号,带有直流偏移0.5
figure
plot(t,x)
xlabel('时间/s')
ylabel('时域信号x(t)')
% DFT变换将时域转换到频域,并绘制频谱图
[f,X_m,X_phi] = DFT(x,ts);

结果
在这里插入图片描述
在这里插入图片描述

正弦信号频率为5Hz,频谱分析频率为4.95Hz
正弦信号幅值为1.5,频谱分析幅值为1.498
正弦信号相位为30°,频谱分析相位为38.66°
正弦信号直流分量0.5,频谱分析直流分量为0.51

例4:正弦复合信号

%% Eg 4 正弦复合信号
ts = 0.01;
t = 0:ts:2;
A = [1.5 1 0.5 0.2];    % 幅值  
f = [3 6 9 15];         % 频率
w = 2*pi*f;             % 角频率
phi = (1:4)*pi/4;       % 初始相位 
x = -0.5 + A(1)*cos(w(1)*t+phi(1)) + A(2)*cos(w(2)*t+phi(2)) + A(3)*cos(w(3)*t+phi(3)) + A(4)*cos(w(4)*t+phi(4));     % 时域信号
figure
plot(t,x)
xlabel('时间/s')
ylabel('时域信号x(t)')
% DFT变换将时域转换到频域,并绘制频谱图
[f,X_m,X_phi] = DFT(x,ts);

结果:
在这里插入图片描述
在这里插入图片描述

正弦信号频率为3、6、9、15Hz,频谱分析频率为2.985、5.97、8.96、14.93Hz
正弦信号幅值为1.5、1、0.5、0.2,频谱分析幅值为1.499、0.989、0.485、0.192
正弦信号相位为45°、90°、135°、180°,频谱分析相位为50.6°、101.5°、152.9°、210°
正弦信号直流分量-0.5,频谱分析直流分量为-0.497

注意:频率为0Hz时对应的直流信号的幅值的正负号,是通过零频相位来确定的,相位为0°表示幅值为正,相位为180°表示幅值为负。

例5:含有随机干扰的正弦信号

%% Eg 5 含有随机干扰的正弦信号
ts = 0.01;
t = 0:ts:2;
A = [1 0.5];    % 幅值  
f = [3 10];         % 频率
w = 2*pi*f;             % 角频率
phi = (1:2)*pi/3;       % 初始相位 
x =  A(1)*cos(w(1)*t+phi(1)) + A(2)*cos(w(2)*t+phi(2)) + 0.8*(rand(size(t))-0.5);     % 时域信号
figure
plot(t,x)
xlabel('时间/s')
ylabel('时域信号x(t)')
% DFT变换将时域转换到频域,并绘制频谱图
[f,X_m,X_phi] = DFT(x,ts);

结果:
在这里插入图片描述
在这里插入图片描述

正弦信号频率为3、10Hz,频谱分析频率为2.985、9.95Hz
正弦信号幅值为1、0.5,频谱分析幅值为0.978、0.456
正弦信号相位为60°、135°,频谱分析相位为65.1°、139.8°

例6:实际案例

load data
ts = 0.001;
x = Jsd;
t = [0:length(x)-1]*ts;
figure
plot(t,x)
xlabel('时间/s')
ylabel('时域信号x(t)')
% DFT变换将时域转换到频域,并绘制频谱图
[f,X_m,X_phi] = DFT(x,ts);

结果:
在这里插入图片描述
在这里插入图片描述

频谱分析主要频率成分为18.996、37.992Hz
频谱分析主要频率成分对应幅值为1.741、1.117

该项目为作者在强振环境下测得加速度信号,加速度是机械结构周期运动激励产生,需要通过频谱分析获取机械结构周期运动的频率。由于噪声幅度远大于有效信号幅度,信号的信噪比很低,从时域上很难辨别机械结构周期运动的频率。但经过DFT后,从频域上可以看出信号的主要频率成分为19Hz和其倍频38Hz,可以判断机械结构周期运动的频率为19Hz,38Hz为结构响应的非线性特性所产生的倍频。

5. 拓展

工程上我们还会遇到这样的问题:获取了信号的频谱,希望从信号的频谱来恢复时域信号。这就涉及离散傅里叶逆变换问题,下一篇详谈。

6. 联系作者

有Matlab/Simulink方面的技术问题,欢迎发送邮件至944077462@qq.com讨论。
更多Matlab/Simulink原创资料,欢迎关注微信公众号:Matlab Fans

源程序下载:
1. csdn资源: Matlab如何进行离散傅里叶变换DFT(快速傅里叶变换FFT)进行频谱分析
2. 扫码关注微信公众号Matlab Fans,回复BK07获取百度网盘下载链接。

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Matlab如何进行利用离散傅里叶变换DFT (快速傅里叶变换FFT)进行频谱分析 的相关文章

  • Matlab 中是否有相当于 R 的 dput() 的函数?

    Matlab 中是否有相当于 R 的 dput 的函数 dput 将 R 对象的 ASCII 文本表示形式写入文件或连接 UPDATE 1 添加了递归和对单元格的支持 UPDATE 2 添加了对结构的支持 UPDATE 3 增加了对逻辑 整
  • 有没有办法在 MATLAB 中查看 pcode 文件 (.p) 的源代码?

    有没有办法在 MATLAB 中打开 pcode 文件 p 如果 开放 是指edit 那么当然不是 pcode 中的 p 代表 受保护 其主要设计目标是在保护其源代码的同时部署功能组件 如果 开放 是指run 那么当然是的 引用手册 http
  • ODE 时间 Matlab 与 R

    如果在 matlab 中使用可变时间步长求解器 例如 ODE45 我会定义输出的时间跨度 即times 0 50 matlab 将返回 0 到 50 之间不同时间步长的结果 然而在 R 中 我似乎必须定义我希望 ODE 返回结果的时间点 即
  • Matlab-如何在曲线上绘制切线

    我在 matlab 中绘制了一个图表 plot x y 我的图表有不同的斜率 我如何在每个斜率上绘制切线并计算斜率的系数 如果您没有用于绘制点的显式函数 您可以使用有限差分 http en wikipedia org wiki Finite
  • 将此 MATLAB 代码转换为 Python 时我做错了什么?

    我正在努力将生成波形的 MATLAB 代码转换为 Python 就上下文而言 这是原子力显微镜带激发响应的模拟 与代码错误无关 在 MATLAB 中从 r vec 生成的图形与我在 Python 中生成的图形不同 我是否正确地将 MATLA
  • 在 MATLAB 中检索 spfun、cellfun、arrayfun 等中的元素索引

    有什么办法可以找回index调用函数的元素的cellfun arrayfun or spfun行为 即检索函数范围内元素的索引 为了简单起见 假设我有以下玩具示例 S spdiags 1 4 0 4 4 f spfun x 2 x S 它构
  • MATLAB 中时间戳过滤器的优化 - 处理非常大的数据集

    我正在 MATLAB 中编写一个程序 必须使用 MATLAB 并且不能真正使用 MEX 来过滤大量数据 我需要实现的过滤器之一要求我将时间戳向量与其他时间戳不会出现的已知 不良 时间列表进行比较 一个典型的时间戳向量有大约 2 000 00
  • Matlab PARFOR 循环可以通过编程方式打开/关闭吗?

    有一个关于 MATLAB 中 parfor 的简单问题 我想在程序中设置一个标志 以便在 parfor 和常规 for 循环之间进行更改 基本上 我需要此功能 以便我的代码的某些部分可以在 调试 模式下更新图形 然后当关闭该标志时 使用 p
  • 检查Matlab中脚本需要使用的函数

    我有一个别人写的代码包 我正在运行一个脚本 它调用一些函数 这些函数又调用更多函数 等等 我想获取不是 MATLAB 内置函数但属于包的一部分的函数列表 我尝试使用matlab codetools requiredFilesAndProdu
  • 扩展 MATLAB 函数名称的最大长度

    我编写了一个 MATLAB 程序 可以动态创建自定义 MATLAB 函数 并使用以下命令在其他 MATLAB 实例中启动它们unix命令 我使用这个程序来自动化 fMRI 神经影像分析 使用 SPM8 for MATLAB 一切正常 但是
  • Matlab - 如果值包含xxx,则删除元胞数组中的行

    在 Matlab 中 如何删除包含变量字符串的元胞数组中的元胞 假设我的元胞数组是 C svnTrunk RadarLib radarlb utilities scatteredInterpolant m C svnTrunk RadarL
  • 如何使用matlab生成不同频率的正弦波?

    对于我的项目 我需要使用 matlab 生成一个正弦波 它有 100 000 个样本 并且频率在每 10 000 个样本后随机变化 采样率和频率可以根据方便而定 matlab中有没有函数可以生成这个 好的另一个例子 生成 5 个随机频率 r
  • 如何将二进制值列表转换为int32类型?

    我在 MATLAB 工作区中有一个小端格式的二进制数列表 我想将它们转换为 int32 a是由 0 和 1 组成的双向量 如下所示 a 0 0 0 1 1 0 0 1 1 1 1 0 1 0 1 0 0 0 0 1 1 0 0 0 1 1
  • 在 Matlab 中高效获取像素坐标

    我想在 Matlab 中创建一个函数 给定一个图像 该函数将允许人们通过单击图像中的像素来选择该像素并返回该像素的坐标 理想情况下 人们能够连续单击图像中的多个像素 并且该函数会将所有相应的坐标存储在一个矩阵中 有没有办法在Matlab中做
  • 如何使用 MATLAB 的 substruct 函数创建表示使用“end”的引用的结构?

    我想使用substruct http www mathworks com help matlab ref substruct html函数创建一个结构体以供使用subsref 目的是使用索引字符串subsref而不是通常的 符号 因为我正在
  • 理解高斯混合模型的概念

    我试图通过阅读在线资源来理解 GMM 我已经使用 K 均值实现了聚类 并且正在了解 GMM 与 K 均值的比较 以下是我的理解 如有错误请指出 GMM 类似于 KNN 在这两种情况下都实现了聚类 但在 GMM 中 每个簇都有自己独立的均值和
  • 如何在放置颜色条后保持子图大小不变

    假设我们有一个 1 2 子图 我们在其中绘制了一些图形 如下所示 subplot 1 2 1 surf peaks 20 subplot 1 2 2 surf peaks 20 然后我们要添加一个颜色条 colorbar 我不希望结果中的正
  • 如何在 matlab 中创建由多个 3d 图像数据数组组成的数组

    我正在阅读 15 张图片imagedata imread imagename jpg 它的大小总是320 by 320 by 3 如何将数据放入数组中 使用 for for 循环 以便在访问新数组的第一个元素时获得输入的第一个图像的 RGB
  • 如何更改Plotyy第二轴的颜色和字体大小?

    我使用 MATLAB 的plotyy 函数绘制了两条曲线 AX H1 H2 plotyy voltage span amplitude voltage span Ca SR The problem is that I cannot chan
  • 有效地绘制大时间序列(matplotlib)

    我正在尝试使用 matplotlib 在同一轴上绘制三个时间序列 每个时间序列有 10 6 个数据点 虽然生成图形没有问题 但 PDF 输出很大 在查看器中打开速度非常慢 除了以栅格化格式工作或仅绘制时间序列的子集之外 还有其他方法可以获得

随机推荐

  • 基于Raft协议的两节点主备系统调度算法

    摘要 以城市轨道交通列车指挥调度系统为代表的工业系统受限于工程成本 在运营现场往往仅部署两个服务节点 指挥调度中心因故障离线后 若采用主流的分布式一致性协议保证运营现场节点间数据一致性 将因为降低了可用性而无法容忍节点发生故障 为解决此问题
  • 计算机网络笔记(二)

    计算机网络体系结构 OSI参考模型 数据封装 增加控制信息 构造协议数据单元 PDU 控制信息主要包括 地址 Address 标识发送端 接收端 差错检测编码 Error detecting code 用于差错检测或纠正 协议控制 Prot
  • jsp、servlet、javabean中如何分别设置session的过期时间

    session的概念与基本用法 概念 当用户与服务器连接时 服务器给每个用户一个session 并设定其中内容 这些session相互独立 服务器可以借此来辨别用户信息 进而提供个别服务 session有存在期限 类 javax servl
  • 前端新人进入公司工作流程 超详细!!! 不被当小白

    出来上班除了些人情世故 基本的工作流程还是需要了解的 会避免很多的小麻烦 也不会被别人说是小白 进入公司之后首先熟悉的就是位置 通常产品开发部标配都是组长 前端前辈 后端 测试 UI 产品经理 等其他人员 如果有前辈带你那会更好 很多任务前
  • JWT渗透与攻防(二)

    目录 前言 JWT漏洞演示之CTFhub 一 JWT漏洞演示之CTFhub 二 前言 我们在之前的文章中已经讲解过了JWT漏洞相关的原理和利用 今天我们就通过这篇文章再来了解一下JWT的漏洞 JWT漏洞演示之CTFhub 一 我们进入CTF
  • 用gitmoji在git commit message 添加有意思的表情

    文章目录 用gitmoji在git commit message 添加有意思的表情 用gitmoji在git commit message 添加有意思的表情 用gitmoji 在commit message 添加有意思的表情 让提交代码更有
  • l2tp软件_反向L2TP拨号,接入公司网络

    2019肺炎还没有结束 今天第一天远程复工 前几天介绍了一个全局连回公司网络的方案 但有人私信我 公司没有为了临时办公搭建VPN的准备 大多公司的临时解决方案是用TeamViewer类软件来实现远程连接方案 这类方案基本都不是直连状态 都是
  • RS485通信以及modbus通信协议

    硬件层 rs485解决的是数据传输的问题 如何将0 1 传输到另一端 主机或从机将TTL电平通过485芯片转换成差分信号 抗干扰能力强 传输距离远 485芯片中集成了发送器和接收器 连接单片机io引脚通过高低电平来决定是发送方 还是 接收方
  • “QT 快速上手指南“ 之 计算器(三)信号与槽,connect 函数,QString

    文章目录 前言 一 什么是信号与槽 二 QObject connect 函数 三 QT 中的字符串类 QString 1 创建和初始化字符串 2 字符串的拼接和添加 3 字符串的查找和替换 4 字符串的分割和处理 总结 前言 QT 中 信号
  • 十五个AI图像放大工具

    1 VanceAI Image Enlarger VanceAI Image Enlarger 最大 8x VanceAI Anime Upscaler 动漫图片 最大 16x 2 icons8 Upscaler icons8 Upscal
  • 以太坊创世区块源码分析

    genesis 是创世区块的意思 一个区块链就是从同一个创世区块开始 通过规则形成的 不同的网络有不同的创世区块 主网络和测试网路的创世区块是不同的 这个模块根据传入的genesis的初始值和database 来设置genesis的状态 如
  • mysql callablestatement_mysql jdbc性能优化之mybatis/callablestatement调用存储过程mysql jdbc产生不必要的元数据查询(已解决,cpu负...

    INFO jvm 1 2016 08 25 15 17 01 16 08 25 15 17 01 DEBUG pool 1 thread 371dao ITaskDao callProcedure gt Preparing call sp
  • 开源汇智创未来

    7月27日 2022开放原子全球开源峰会OpenAtom openEuler分论坛在北京成功举办 论坛以 openEuler志高远 开源汇智创未来 为主题 为业界充分展示 openEuler 开源项目的运作成果 传递开源开放的 openEu
  • 微软 Github AI 编程工具 Copilot 正式上线,学生免费使用

    2022年6月22日 微软 GitHub AI 编程工具 Copilot 在经过了近一年测试后 已正式上线 定价每月 10 美元 约 66 9 元人民币 或每年 100 美元 约 669 元人民币 对学生用户和流行开源项目的维护者免费提供
  • ActiveMQ学习总结

    最近用到ActiveMQ 网上找资料学习了一下 收录比较好的博文 cpp代码客户端案例 高级原理 基础原理 完整客户端例子
  • jupyter notebook 打开指定路径文件

    输入 jupyter notebook 目标文件夹路径 如 jupyter notebook D IT python JupyterNotebook
  • 平均月薪超2万,全球短缺的网络安全人才究竟有多抢手?

    平均月薪超2万 全球短缺的网络安全人才究竟有多抢手 没有网络安全就没有国家安全 随着互联网科技 经济社会 政治时局等多领域不断发展与变革 网络安全问题日趋严峻 信息作为无形的战场 扫码支付涉及到财产安全 自动驾驶涉及到国家地理信息以及每个人
  • 在失去焦点的时候ajax,文本框失去焦点的时候进行ajax 验证

    var Email mail val ajax开始 ajax type Post 请求形式 url Ajax LoginRegister ashx 处理文件路径 data op 2 判断调用处理文件中的那个方法 Email Email 需要
  • pandas相似度计算

    import pandas as pd 加载数据 detail pd read excel meal order detail xlsx 展示detail print detail 求取相似度 res detail amounts coun
  • Matlab如何进行利用离散傅里叶变换DFT (快速傅里叶变换FFT)进行频谱分析

    文章目录 1 定义 2 变换和处理 3 函数 4 实例演示 例1 单频正弦信号 整数周期采样 例2 单频正弦信号 非整数周期采样 例3 含有直流分量的单频正弦信号 例4 正弦复合信号 例5 含有随机干扰的正弦信号 例6 实际案例 5 拓展