一种分解多种信号模式非线性线性调频的方法研究(Matlab代码实现)

news2024/9/25 19:18:33

 💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

2.1 算例1

2.2 算例2 

2.3 算例3

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

变分模态分解(VMD)是近年来引入的一种自适应数据分析方法,在各个领域引起了广泛的关注。然而,VMD是基于信号模型窄带特性的假设而制定的。为了分析宽带非线性线性调频信号(NCS),我们提出了一种称为变分非线性线性调频模式分解(VNCMD)的替代方法。VNCMD的开发基于这样一个事实,即宽带NCS可以通过使用解调技术转换为窄带信号。因此,我们的分解问题被表述为最优解调问题,通过乘法的交替方向方法(ADMM)有效地求解。我们的方法可以看作是一个时频(TF)滤波器组,它同时提取所有信号模式。提供了一些模拟和真实的数据示例,展示了VNCMD在分析包含接近甚至交叉模式的NCS方面的有效性。

📚2 运行结果

2.1 算例1

 

 

 

2.2 算例2 

 

2.3 算例3

 

部分代码:

%% initialize
[K,N] = size(eIF);%K is the number of the components,N is thenumber of the samples
t = (0:N-1)/fs;%time
e = ones(N,1);
e2 = -2*e;
% e2(1) = -1;e2(end) = -1;
oper = spdiags([e e2 e], 0:2, N-2, N);% oper = spdiags([e e2 e], -1:1, N, N);%the modified second-order difference matrix
opedoub = oper'*oper;%
sinm = zeros(K,N);cosm = zeros(K,N);%
xm = zeros(K,N);ym = zeros(K,N);%denote the two demodulated quadrature signals
iternum = 300; %the maximum allowable iterations
IFsetiter = zeros(K,N,iternum+1); IFsetiter(:,:,1) = eIF; %the collection of the obtained IF time series of all the signal modes at each iteration
ssetiter = zeros(K,N,iternum+1); %the collection of the obtained signal modes at each iteration
lamuda = zeros(1,N);%Lagrangian multiplier
for i = 1:K
    sinm(i,:) = sin(2*pi*(cumtrapz(t,eIF(i,:))));
    cosm(i,:) = cos(2*pi*(cumtrapz(t,eIF(i,:))));
    Bm = spdiags(sinm(i,:)', 0, N, N);Bdoubm = spdiags((sinm(i,:).^2)', 0, N, N);%Bdoubm = Bm'*Bm
    Am = spdiags(cosm(i,:)', 0, N, N);Adoubm = spdiags((cosm(i,:).^2)', 0, N, N);%Adoubm = Am'*Am
    xm(i,:) = (2/alpha*opedoub + Adoubm)\(Am'*s(:));
    ym(i,:) = (2/alpha*opedoub + Bdoubm)\(Bm'*s(:));
    ssetiter(i,:,1) = xm(i,:).*cosm(i,:) + ym(i,:).*sinm(i,:);%
end
%% iterations 
iter = 1;% iteration counter
sDif = tol + 1;%
sum_x = sum(xm.*cosm,1);%cumulative sum
sum_y = sum(ym.*sinm,1);%cumulative sum
while ( sDif > tol &&  iter <= iternum ) % 
   
    betathr = 10^(iter/36-10);%gradually increase the parameter beta during the iterations
    if betathr>beta
        betathr = beta; 
    end
    
    u = projec(s - sum_x - sum_y - lamuda/alpha,var);%projection operation; u denotes the noise variable; if let var=0, the output u will be zeros. 
    
%%%%%%%%%%%%%%%%%%%%%%%%%%%%  update each mode  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
    for i = 1:K
        
       % lamuda = zeros(1,N);% if one wants to drop the Lagrangian multiplier, just set it to zeros, i.e., delete the first symbol % in this line.
       
%%%%%%%%%%%%% update the two matrices A and B %%%%%%%%%%%%%%%%%%%%%%%%%%%         
       Bm = spdiags(sinm(i,:)', 0, N, N);Bdoubm = spdiags((sinm(i,:).^2)', 0, N, N);
       Am = spdiags(cosm(i,:)', 0, N, N);Adoubm = spdiags((cosm(i,:).^2)', 0, N, N);
%%%%%%%%%%%%% x-update %%%%%%%%%%%%%%%%%%%%%%%%%%%
       sum_x = sum_x - xm(i,:).*cosm(i,:);% remove the relevant component from the sum
       xm(i,:) = (2/alpha*opedoub + Adoubm)\(Am'* (s - sum_x - sum_y - u - lamuda/alpha)');%
       interx = xm(i,:).*cosm(i,:);% temp variable
       sum_x = sum_x + interx;% update the sum
%%%%%%%%%%%%% y-update %%%%%%%%%%%%%%%%%%%%%%%%%%%
       sum_y = sum_y - ym(i,:).*sinm(i,:);% remove the relevant component from the sum
       ym(i,:) = (2/alpha*opedoub + Bdoubm)\(Bm'* (s - sum_x - sum_y - u - lamuda/alpha)');
%%%%%%%%%%%%%  update the IFs  %%%%%%%%%%%%%%%%%%%%%%%%       
       ybar = Differ(ym(i,:),1/fs); xbar = Differ(xm(i,:),1/fs);%compute the derivative of the functions
       deltaIF = (xm(i,:).*ybar - ym(i,:).*xbar)./(xm(i,:).^2 + ym(i,:).^2)/2/pi;% obtain the frequency increment by arctangent demodulation
       deltaIF = (2/betathr*opedoub + speye(N))\deltaIF';% smooth the frequency increment by low pass filtering
       eIF(i,:) = eIF(i,:) - 0.5*deltaIF';% update the IF
%%%%%%%%%%%%%  update cos and sin functions  %%%%%%%%%%%%%%%%%%%%%%%%          
       sinm(i,:) = sin(2*pi*(cumtrapz(t,eIF(i,:))));
       cosm(i,:) = cos(2*pi*(cumtrapz(t,eIF(i,:))));
%%%%%%%%%%%%% update sums %%%%%%%%%%%%%%%%%       
       sum_x = sum_x - interx + xm(i,:).*cosm(i,:); %
       sum_y = sum_y + ym(i,:).*sinm(i,:);%
       ssetiter(i,:,iter+1) = xm(i,:).*cosm(i,:) + ym(i,:).*sinm(i,:);%
    end
    IFsetiter(:,:,iter+1) = eIF;
    
%%%%%%%%%%%%% update Lagrangian multiplier %%%%%%%%%%%%%%%%%     
lamuda = lamuda + alpha*(u + sum_x + sum_y -s);

%%%%%%%%%%%%%%%%%%%%%%%%%%% restart scheme %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
if norm(u + sum_x + sum_y -s)>norm(s) %
   lamuda = zeros(1,length(t));
   for i = 1:K
    Bm = spdiags(sinm(i,:)', 0, N, N);Bdoubm = spdiags((sinm(i,:).^2)', 0, N, N);%
    Am = spdiags(cosm(i,:)', 0, N, N);Adoubm = spdiags((cosm(i,:).^2)', 0, N, N);%
    xm(i,:) = (2/alpha*opedoub + Adoubm)\(Am'*s(:));
    ym(i,:) = (2/alpha*opedoub + Bdoubm)\(Bm'*s(:));
    ssetiter(i,:,iter+1) = xm(i,:).*cosm(i,:) + ym(i,:).*sinm(i,:);
   end
   sum_x = sum(xm.*cosm,1);%
   sum_y = sum(ym.*sinm,1);%
end

%%%%%%%%%%%%%  compute the convergence index %%%%%%%%%%%%%%%%%%  
    sDif = 0;
    for i = 1:K
        sDif = sDif + (norm(ssetiter(i,:,iter+1) - ssetiter(i,:,iter))/norm(ssetiter(i,:,iter))).^2;
    end
    iter = iter + 1;
end
    IFmset = IFsetiter(:,:,1:iter);
    smset = ssetiter(:,:,1:iter);
    IA = sqrt(xm.^2 + ym.^2);
end
   

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]Chen S, Dong X, Peng Z, et al, Nonlinear Chirp Mode Decomposition: A Variational Method, IEEE Transactions on Signal Processing, 2017.

[2]Chen S, Dong X, Xing G, et al, Separation of Overlapped Non-Stationary Signals by Ridge Path Regrouping and Intrinsic Chirp Component Decomposition, IEEE Sensors Journal, 2017.

[3]S. Chen, Z. Peng, Y. Yang, et al, Intrinsic chirp component decomposition by using Fourier Series representation, Signal Processing, 2017, 137: 319-327.

🌈4 Matlab代码实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/797912.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

值得关注的五个先进代码补全服务

效率、代码质量和生产力在编程中都是至关重要的组成部分。因此&#xff0c;开发人员不断寻求能够加快编程过程的工具&#xff0c;以提高其工作效率和质量。 在编程这个不断发展的领域&#xff0c;目前最具革命性的进展之一就是AI驱动的代码补全服务。这些工具不仅简化了编程过程…

小程序获取手机号要开始收费了!

收费说明 自2023年8月26日起&#xff0c;手机号实时验证组件将需要付费使用。 手机号快速验证组件 手机号快速验证组件 | 微信开放文档 新版本组件不再需要提前调用wx.login进行登录。 代码示例 <button open-type"getPhoneNumber" bindgetphonenumber"ge…

机器学习02-再识K邻近算法(自定义数据集训练及测试)

定义&#xff1a; 如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别&#xff0c;则该样本也属于这个类别。简单的说就是根据你的“邻居”来推断出你的类别。 用个成语就是物以类聚 思想&#xff1a; 如果一个样本在特征空间中的K个最…

【Linux命令200例】用file检查文件类型

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;本文已收录于专栏&#xff1a;Linux命令大全。 &#x1f3c6;本专栏我们会通过具体的系统的命令讲解加上鲜活的实操案例对各个命令进行深入…

vue生命周期的传统写法和setup语法糖写法

&#x1f642;博主&#xff1a;小猫娃来啦 &#x1f642;文章核心&#xff1a;vue生命周期的传统写法和setup语法糖写法 文章目录 setup语法糖设计目的vue3钩子函数beforeCreated和created被封装传统写法和语法糖写法的对比 setup语法糖设计目的 <script setup> 语法糖的…

Linux6.17 Docker 安全及日志管理

文章目录 计算机系统5G云计算第四章 LINUX Docker 安全及日志管理一、Docker 容器与虚拟机的区别1.隔离与共享2.性能与损耗 二、Docker 存在的安全问题1.Docker 自身漏洞2.Docker 源码问题 三、Docker 架构缺陷与安全机制1.容器之间的局域网攻击2.DDoS 攻击耗尽资源3.有漏洞的系…

大模型部署框架 FastLLM 实现细节解析

0x0. 前言 接着 大模型部署框架 FastLLM 简要解析 这篇文章首先梳理了一下FastLLM的调用链和关键的数据结构&#xff0c;然后解析了 FastLLM 的一些实现细节和CPU/GPU后端实现采用的优化技巧。 0x1. 调用链和数据结构解析 以chatglm-6b的支持为例&#xff0c;函数入口在 htt…

数据库索引优化与查询优化——醍醐灌顶

索引优化与查询优化 哪些维度可以进行数据库调优 索引失效、没有充分利用到索引-一索引建立关联查询太多JOIN (设计缺陷或不得已的需求) --SQL优化服务器调优及各个参数设置 (缓冲、线程数等)–调整my.cnf数据过多–分库分表 关于数据库调优的知识点非常分散。不同的 DBMS&a…

TypeError: run() got an unexpected keyword argument ‘hide_label‘ yolov5最新版本报错

报错展示 解决方法 把detect.py中的如上部分的 --hide-label改为 --hide-labels&#xff0c;成功解决.

EtherNet IP转PROFINET网关连接西门子与欧姆龙方法

本文主要介绍了捷米特JM-PN-EIP&#xff08;EtherNet/IP转PROFINET&#xff09;网关西门子200智能PLC&#xff08;PROFINET&#xff09;和欧姆龙系统EtherNet/IP通信的配置过程。 1, 将 EDS 文件复制到欧姆龙软件的对应文件夹下 2, 首先添加捷米特JM-PN-EIP网关的全局变量&…

Matlab出现load(‘data/2Dletters/C.mat‘)错误,即加载数据错误

在运行matlab程序时&#xff0c;如果出现加载数据错误&#xff0c;则是因为没有定位到相应文件夹。 解决办法如下&#xff1a; 通过红色框左边的选项&#xff08;浏览文件夹&#xff09;定位到我们所运行.m程序所在的文件夹即可

数据库监控工具-PIGOSS BSM

PIGOSS BSM 运维监控系统的重要功能之一是数据库监控&#xff0c;它能够帮助数据库管理员(DBA)和系统管理员监控包含Oracle、SQL Server、MySQL、DB2、PostgreSql、MongoDB、达梦、南大通用、人大金仓、神州通用等多种类异构型的数据库环境。PIGOSS BSM通过执行数据库查询来采集…

C#如何使用SQLite数据库?

文章目录 0.引言1.SQLite工具准备2.创建窗体项目并添加SQLite的命名空间3.编写使用SQLite代码4.结果展示 0.引言 SQLite是一个轻量级的嵌入式数据库&#xff0c;它的库文件非常小巧&#xff0c;不需要独立的服务器进程或配置。这使得它非常适合在资源受限的环境中使用&#xff…

飞凌嵌入式荣获「河北省企业技术中心」认定

近期&#xff0c;河北省发展和改革委员会发布了2023年河北省企业技术中心认定公示&#xff0c; 保定飞凌嵌入式技术有限公司成功通过省级企业技术中心认定。 省级企业技术中心在企业创新体系和创新能力的建设中发挥引导与示范作用&#xff0c;此次荣誉的获得是对飞凌嵌入式推进…

理解跨平台技术

1、为什么需要跨平台技术 write once&#xff0c;run everywhere 开发一个APP运行在Android手机需要一套代码&#xff0c;运行在ios操作系统的手机又需要一套代码&#xff0c;为了使同一套代码能运行在不同的操作系统上&#xff0c;解决多端独立开发的问题&#xff0c;跨平台…

接口测试之requests中的会话

requests中的会话 之前的例子中&#xff0c;我们都是单独调用接口或解析响应&#xff0c; 但在实际应用场景中&#xff0c;我们往往会需要连续调用一些接口。 比如&#xff1a; 1.先登录 2.再做一些操作 3.最后登出 就像我们在浏览器中对网页做操作一样&#xff0c;reques…

Spark编程-SparkSQL

SparkSql能做些啥 Spark SQL的核心概念是DataFrame&#xff0c;它是一个分布式的数据集合&#xff0c;类似于关系数据库中的表。支持使用SQL语言直接对DataFrame进行查询,提供了丰富的内置函数和表达式&#xff0c;可以用于数据的转换、过滤和聚合等操作,支持多种数据源&#…

【SpringCloud Alibaba】(四)使用 Feign 实现服务调用的负载均衡

在上一文中&#xff0c;我们实现了服务的自动注册与发现功能。但是还存在一个很明显的问题&#xff1a;如果用户微服务和商品微服务在服务器上部署多份的话&#xff0c;之前的程序无法实现服务调用的负载均衡功能。 本文就带着大家一起实现服务调用的负载均衡功能 1. 负载均衡…

Vue2基础五、工程化开发

零、文章目录 Vue2基础五、工程化开发 1、工程化开发和脚手架 &#xff08;1&#xff09;开发 Vue 的两种方式 核心包传统开发模式&#xff1a;基于 html / css / js 文件&#xff0c;直接引入核心包&#xff0c;开发 Vue。工程化开发模式&#xff1a;基于构建工具&#xf…