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

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

 

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

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

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

目录

💥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.rhkb.cn/news/105334.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Azure应用程序网关

文章目录 什么是应用程序网关实战演练创建虚拟网络创建虚拟机创建应用程序网关测试搭建结果 什么是应用程序网关 Azure应用程序网关是一种托管服务&#xff0c;用于提供安全、可缩放的 Web 应用程序前端点的应用程序传送控制和保护。它可以通过 SSL 终止、cookie 基于会话持久…

uniapp 安卓平台签名证书(.keystore)生成

安装JRE环境 下载jre安装包&#xff1a;https://www.oracle.com/java/technologies/downloads/#java8安装jre安装包时&#xff0c;记录安装目录(例:C:\Program Files\Java\jdk-20)打开命令行&#xff08;cmd&#xff09;&#xff0c;将JRE安装路径添加到系统环境变量 d: se…

使用vlc在线播放rtsp视频url

1. 2. 3. 工具链接&#xff1a; https://download.csdn.net/download/qq_43560721/88249440

数据分析案例-汽车客户信息数据可视化分析(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

学习开发振弦采集模块的注意事项

学习开发振弦采集模块的注意事项 &#xff08;三河凡科科技/飞讯教学&#xff09;振弦采集模块是一种用来实时采集和处理振弦信号的电子设备&#xff0c;在工业、航空、医疗等领域都有广泛应用。学习开发振弦采集模块需要注意以下几点&#xff1a; 一、硬件选择 首先需要选择…

word文档中输入“打钩”的4种方法

我们利用Word来制作一些填写单、待办表、计划表类的文档时&#xff0c;都会输入一些特殊符号&#xff0c;比如方框内“打钩”的勾选符号&#xff0c;那么这个符号应该怎么输入呢&#xff1f; 接下来&#xff0c;我就给你们介绍几种简单实用的方法&#xff0c;其中第三种是小编…

Spark项目Java和Scala混合打包编译

文章目录 项目结构Pom完整文件编译查看 实际开发用有时候引用自己写的一些java工具类&#xff0c;但是整个项目是scala开发的spark程序&#xff0c;在项目打包时需要考虑到java和scala混合在一起编译。 今天看到之前很久之前写的一些打包编译文章&#xff0c;发现很多地方不太对…

【软件测试面试题】网页崩溃的原因是什么?如何排查?

网页崩溃的原因 1. 代码错误 网页中存在错误或不完善的代码可能导致崩溃。例如&#xff0c;语法错误、逻辑错误、变量未定义等。这些错误可能会导致浏览器无法正确解析网页&#xff0c;从而导致崩溃。 2. 资源加载问题 网页中引用的资源&#xff08;如CSS文件、JavaScript文…

【linux】2 make/Makefile和gitee

文章目录 一、Linux项目自动化构建工具-make/Makefile1.1 背景1.2 实例代码1.3 原理1.4 项目清理 二、linux下第一个小程序-进度条2.1 行缓冲区2.2 进度条 三、git以及gitee总结 ヾ(๑╹◡╹)&#xff89;" 人总要为过去的懒惰而付出代价ヾ(๑╹◡╹)&#xff89;" 一…

【点击新增一个下拉框 与前一个内容一样 但不能选同一个值】

点击新增一个下拉框 与前一个内容一样 但不能选同一个值 主要是看下拉选择el-option的disabled,注意不要混淆 <el-form label-width"120px" :model"form" ref"form" style"color: #fff"><template v-for"(trapolicy, i…

生成地图展示【Python思路】

# 1.导包 import json from pyecharts.charts import Map #导入关于编写地图的包 from pyechart.options import * #全局设置# 2.得到地图对象 map Map()# 3.打开事先准备好的JSON数据文件 f open("D:/Typora 记事本/notebook/Python/Exercise_data/疫情.txt",&…

2023CCF图形学启明星计划夏令营感想记录

这篇就是纯日记了&#xff0c;想记录一下参加这个夏令营的感想&#xff0c;中间的一些过程&#xff0c;毕竟这对我来说算是一段难忘的经历。 一、了解到的渠道 我个人是比较喜欢图形渲染的&#xff0c;之前也学过GAMES的课程&#xff0c;然后偶然的一天&#xff0c;GAMES101里…

TypeScript初体验

1.安装编译TS工具包 npm i -g typescript 2. 查看版本号 tsc -v 3.创建ts文件 说明&#xff1a;创建一个index.ts文件 4.TS编译为JS tsc index.ts 5.执行JS代码 node index.js 6.简化TS的步骤 6.1安装 npm i -g ts-node 6.2执行 ts-node index.ts

redis 7高级篇1 redis的单线程与多线程

一 redis单线程与多线程 1.1 redis单线程&多线程 1.redis的单线程 redis单线程主要是指Redis的网络IO和键值对读写是由一个线程来完成的&#xff0c;Redis在处理客户端的请求时包括获取 (socket 读)、解析、执行、内容返回 (socket 写) 等都由一个顺序串行的主线程处理…

数据分享|R语言PCA主成分、lasso、岭回归降维分析近年来各国土地面积变化影响...

全文链接&#xff1a;http://tecdat.cn/?p31445 机器学习在环境监测领域的应用&#xff0c;着眼于探索全球范围内的环境演化规律&#xff0c;人类与自然生态之间的关系以及环境变化对人类生存的影响&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。 课题着眼于…

秒杀系统的业务流程以及优化方案(实现异步秒杀)

先看基本的业务流程 那么我们可以看到整个流程都是一个线程来完成的&#xff0c;这样的话耗时还是很长的&#xff0c;那么可不可以采用多线程去实现呢&#xff1f; 首先我们要思考怎么对业务进行拆分&#xff0c;可以想象一个我们去饭店点餐&#xff0c;会有前台接待&#xff…

Docker构建镜像

Docker根据Dockerfile文件构建镜像 在实际生产中&#xff0c;常常使用Dockerfile构建企业级生产环境镜像,然后再部署在我们的生产环境中&#xff0c;本文将从从零开始介绍Dockerfile如何使用&#xff0c;构建镜像。 Dockerhub官网地址&#xff1a;https://registry.hub.docke…

Pyqt5-开源工具分解功能(配置文件+快捷写入)

开源第五篇,配置文件及参数配置,先来看个图: 上述是自动化电池监测的简图。会根据json文件中的数据从而自动写入数据。 如何自动写入数据 从GIF中可以看到,选中的输入的标签都是QLineEdit,而QLineEdit的写入文本方法是.setText(str),注意这里是写入的文本是text,字符串。…

Docker容器:本地私有仓库、harbor私有仓库部署与管理

文章目录 一.本地私有仓库1.本地私有仓库概述2.搭建本地私有仓库3.容器重启策略简介 二.harbor私有仓库部署与管理1.什么是harbor2.Harbor的特性3、Harbor的构成4.Harbor私有仓库架构及数据流向5.harbor部署及配置&#xff08;192.168.198.11&#xff09;&#xff08;1&#xf…

有哪些前端调试和测试工具? - 易智编译EaseEditing

前端开发调试和测试工具帮助开发人员在开发过程中发现和修复问题&#xff0c;确保网站或应用的稳定性和性能。以下是一些常用的前端调试和测试工具&#xff1a; 调试工具&#xff1a; 浏览器开发者工具&#xff1a; 现代浏览器&#xff08;如Chrome、Firefox、Safari等&#…