在这里插入图片描述

程序通过对比傅里叶变换、短时傅里叶变换和小波变换,清晰展示了小波变换在非平稳信号分析和突变检测中的优势,尤其在时频局部化和突变点检测方面具有独特表现。
原创代码,非AI编写,包运行成功。请勿翻卖

程序简介

代码结构

  1. 信号构造与预处理:

    • 采样频率设定(400 Hz),生成2秒的时间向量。
    • 构造分段信号,分别在不同时间段包含不同频率成分(100 Hz、50 Hz、10 Hz + 80 Hz混合信号)。
    • 添加随机噪声,模拟实际信号的复杂性。
  2. 傅里叶变换分析:

    • 使用快速傅里叶变换(FFT)获取信号的频域信息。
    • 结果仅展示各频率成分的整体幅值分布,无法提供频率随时间的变化。
  3. 短时傅里叶变换(STFT):

    • 设置窗口参数(长度为256,重叠为220)进行时频分析。
    • 结果显示频率随时间分布的粗略变化,但受限于时间和频率分辨率的折中。
  4. 连续小波变换分析:

    • 使用Morse小波进行小波变换,分析信号的时频局部化特性。
    • 提供精细的时间和频率分布信息,特别适合非平稳信号分析。
  5. 突变信号检测:

    • 构造含突变点的信号(在0.5秒处产生突变)。
    • 使用适合突变检测的小波(如Haar或db4)对信号进行小波变换。
    • 结果清晰显示突变点的位置。
  6. 绘图对比:

    • 原始信号及其时频分析结果通过多子图形式展示:
      • 原始信号波形。
      • 傅里叶变换频域结果。
      • 短时傅里叶变换时频结果。
      • 小波变换时频结果。
    • 突变信号及其小波结果展示突变点时频局部化能力。
      在这里插入图片描述

结果解读

  1. 傅里叶变换(FFT):

    • 优势:能准确展示信号的频率成分。
    • 局限:无法显示频率随时间变化的信息。
  2. 短时傅里叶变换(STFT):

    • 优势:在一定程度上提供时频信息。
    • 局限:受限于窗口长度,时间和频率分辨率存在折中。
  3. 小波变换(CWT):

    • 优势:同时提供高分辨率的时间和频率信息,适合分析非平稳信号。
    • 在突变信号检测中,能够清晰定位突变点的位置。

运行结果

信号与处理结果对比:
在这里插入图片描述
突变检测:
在这里插入图片描述

从结果图可以看出:

  • FFT能看到所有频率成分,但无法区分它们的时间位置
  • STFT能看到时频分布,但边界模糊
  • CWT能清晰显示每个频率成分的准确时间位置

各方法的优缺点:

  1. 傅里叶变换(FFT):
    优点: 计算快速,频率分辨率高
    缺点: 完全丢失时间信息,无法知道频率何时出现
    适用: 平稳信号分析

  2. 短时傅里叶变换(STFT):
    优点: 同时提供时频信息
    缺点: 时频分辨率相互制约(海森堡不确定性)
    适用: 缓慢变化的非平稳信号

  3. 小波变换(CWT):
    优点: 自适应时频分辨率,高频时间分辨率好,低频频率分辨率好
    缺点: 计算量较大
    适用: 快速变化的非平稳信号,突变检测

MATLAB源代码

部分代码如下:

%% 小波变换与傅里叶变换的时频分析对比、突变信号检测
% 核心思想:展示小波变换在分析非平稳信号时的时频局部化优势
% 作者:matlabfilter(V同号,可接代码定制、讲解与调试)
% 2025-12-10/Ver1

clear; close all; clc;
rng(0);
%% 构造测试信号:频率随时间变化的非平稳信号
fs = 400;              % 采样频率 (Hz)
t = 0:1/fs:2-1/fs;      % 时间向量 (2秒)
N = length(t);

% 构造分段信号:不同时间段包含不同频率成分
signal = zeros(size(t));

% 第一段 (0-0.5s): 100 Hz 正弦波
idx1 = t >= 0 & t < 0.5;
signal(idx1) = sin(2*pi*100*t(idx1));
% 第二段 (0.5-1s): 50 Hz 正弦波
idx2 = t >= 0.5 & t < 1;
signal(idx2) = sin(2*pi*50*t(idx2));
% 第三段 (1-1.5s): 100 Hz 正弦波
idx3 = t >= 1 & t < 1.5;
signal(idx3) = sin(2*pi*100*t(idx3));
% 第四段 (1.5-2s): 10 Hz + 80 Hz 混合信号
idx4 = t >= 1.5 & t < 2;
signal(idx4) = sin(2*pi*40*t(idx4)) + 0.5*sin(2*pi*80*t(idx4));

% 添加少量噪声
signal = signal + 0.1*randn(size(signal));

%%  傅里叶变换分析

%%  小波变换分析

%%  短时傅里叶变换(STFT)作为对比


%%  绘图对比

完整代码下载链接:
https://download.csdn.net/download/callmeup/92449772
或⬇️
如需帮助,或有导航、定位滤波相关的代码定制需求,请点击下方卡片联系作者

更多推荐