当前位置: 首页 > news >正文

多传感器时频信号处理:多通道非平稳数据的分析工具(Matlab代码实现)

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

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

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

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

目录

💥1 概述

📚2 运行结果

🌈3 Matlab代码实现

🎉4 参考文献


💥1 概述

本文可塑造性强。 本文介绍了高分辨率多传感器时频分布(MTFD)及其在多通道非平稳信号分析中的应用。该方法结合了高分辨率时频分析和阵列信号处理方法。MTFD的性能通过多种应用进行了演示,包括基于到达方向(DOA)估计的源定位和非平稳源的自动组分分离(ACS),重点是盲源分离。MTFD方法通过脑电图信号的两个应用进一步说明。一种专门使用 ACS 和 DOA 估计方法进行伪影去除和源定位。另一种使用MTFD进行跨渠道因果关系分析。本文可以换上自己的数据,并将这些方法实现。

📚2 运行结果

 部分代码:

clear; close all; clc;
addpath(genpath('Supporting functions'));

%% Main

%% Extracting SNR information from Data Folders
S = dir('../data/DOA Data');
SNR_N = sum([S(~ismember({S.name},{'.','..'})).isdir]);
SNR_i = zeros(1,SNR_N);
for i = 1:SNR_N
    [~, r1] = strtok(S(7+i).name);
    [s1, rrr] = strtok(r1);
    SNR_i(1,i) = str2double(s1);
end
SNR_i = sort(SNR_i);
%% MUSIC and TF-MUSIC Spectrum
SNR_N = 2;
figure('Color',[1 1 1],'Position',[100, 70, 900 500]);
ha = tight_subplot(SNR_N/2,2,[0.05 0.01],[0.12 0.12],[0.08 0.08]);
for i = 1:SNR_N
    Path = ['../data/DOA Data/SNR ' num2str(SNR_i(i)), ' dB'];
    load([Path '/Averaged_Spectrum']);
    axes(ha(i));
    plot(theta, P_tf_music_avg,'-b','linewidth',2); hold on;
    plot(theta, P_music_avg,'-.r','linewidth',2); hold on;
    plot(repmat(ra(1),10),linspace(0,1.2,10),'k--','linewidth',2); hold on
    plot(repmat(ra(2),10),linspace(0,1.2,10),'k--','linewidth',2); grid on
    axis([0 39.9 0 1.2])
    if(mod(i,2) && i < SNR_N-1)
        set(gca,'XTickLabel','','fontweight','bold','fontsize',13);
        ylabel('P_M_U_S_I_C (\theta)','Fontsize',16);
        title(['SNR = ' num2str(SNR_i(i)), ' dB'],'fontsize',20);
    elseif i == SNR_N-1
        set(gca,'fontweight','bold','fontsize',13);
        ylabel('P_M_U_S_I_C (\theta)','Fontsize',16);
        xlabel('\theta (deg)','Fontsize',16);
        title(['SNR = ' num2str(SNR_i(i)), ' dB'],'fontsize',20);
    elseif i == SNR_N
        set(gca,'YTickLabel','','fontweight','bold','fontsize',13);
        xlabel('\theta (deg)','Fontsize',16);
        title(['SNR = ' num2str(SNR_i(i)), ' dB'],'fontsize',20);
        legend('TF-MUSIC Averaged Spectrum','MUSIC Averaged Spectrum','True Angles','Location','Southwest')
    else
        set(gca,'XTickLabel','','YTickLabel','','fontweight','bold');
        title(['SNR = ' num2str(SNR_i(i)), ' dB'],'fontsize',20);
    end
end
set(gcf,'Units','inches'); screenposition = get(gcf,'Position');
set(gcf,'PaperPosition',[0 0 screenposition(3:4)],'PaperSize',screenposition(3:4));

%% DOA NMSE
SNR_N = sum([S(~ismember({S.name},{'.','..'})).isdir]);
Path = ['../data/DOA Data/SNR ' num2str(SNR_i(i)), ' dB'];
load([Path '/DOA'],'ra');
nmse_music     = zeros(length(ra), SNR_N);
nmse_tf_music  = zeros(length(ra), SNR_N);
nmse_esprit    = zeros(length(ra), SNR_N);
nmse_tf_esprit = zeros(length(ra), SNR_N);
music_rate    = zeros(length(ra), SNR_N);
tf_music_rate = zeros(length(ra), SNR_N);
for i = 1:SNR_N
    Path = ['../data/DOA Data/SNR ' num2str(SNR_i(i)), ' dB'];
    load([Path '/DOA']);
    for j = 1:length(ra)
        temp1 = DOA_music(:,j); temp2 = DOA_tf_music(:,j);
        music_rate(j,i)    = sum(temp1~=0)/length(temp1);
        tf_music_rate(j,i) = sum(temp2~=0)/length(temp2);
        temp1 = temp1(temp1~=0); temp2 = temp2(temp2~=0);
        nmse_music(j,i)     = (mean(((temp1 - ra(j))/ra(j)).^2));
        nmse_tf_music(j,i)  = (mean(((temp2 - ra(j))/ra(j)).^2));
        nmse_esprit(j,i)    = (mean(((DOA_esprit(:,j) - ra(j))/ra(j)).^2));
        nmse_tf_esprit(j,i) = (mean(((DOA_tf_esprit(:,j) - ra(j))/ra(j)).^2));
    end
end
fprintf(2,'Mean Probability of Detection (Pd)\n');
fprintf('MUSIC     : %0.3f\n',mean(mean(music_rate)));
fprintf('TF_MUSIC  : %0.3f\n',mean(mean(tf_music_rate)))
fprintf('ESPRIT    : %0.1f\n',1)
fprintf('TF_ESPRIT : %0.1f\n',1)
figure('Color',[1 1 1],'Position',[100, 10, 650, 550]);
ha = tight_subplot(1,1,[0.01 0.01],[0.12 0.1],[0.12 0.12]);
axes(ha(1));
plot(SNR_i,10*log10(mean(nmse_tf_music)),'-b','linewidth',2);  hold on;
plot(SNR_i,10*log10(mean(nmse_music)),'--b','linewidth',2);    hold on;
plot(SNR_i,10*log10(mean(nmse_tf_esprit)),'-.r','linewidth',2); hold on;
plot(SNR_i,10*log10(mean(nmse_esprit)),':r','linewidth',2);   grid on;
xlim([SNR_i(1) SNR_i(end)]);
legend('TF-MUSIC','MUSIC','TF-ESPRIT','ESPRIT','Location','Southwest');
set(gca,'fontweight','bold','fontsize',14);
title('DOA Normalized Mean Square Error','fontsize',18);
xlabel('SNR (dB)'); ylabel('NMSE (dB)');
set(gcf,'Units','inches'); screenposition = get(gcf,'Position');
set(gcf,'PaperPosition',[0 0 screenposition(3:4)],'PaperSize',screenposition(3:4));

%% DOA PDFs
SNR_N = 2;
bins_N = 100;
for i = 1:SNR_N
    aa= figure('Color',[1 1 1],'Position',[100, 0, 650, 700]);
    ha = tight_subplot(2,1,[0.01 0.01],[0.1 0.1],[0.05 0.05]);
    Path = ['../data/DOA Data/SNR ' num2str(SNR_i(i)), ' dB'];
    load([Path '/DOA']);
    axes(ha(1)); temp = DOA_music; temp = temp(temp~=0);
    histogram(temp, bins_N,'Normalization','probability','facecolor',[1 0.84 0],'linewidth',1.2); hold on;
    temp = DOA_tf_music; temp = temp(temp~=0);
    histogram(temp, bins_N,'Normalization','probability',...
        'facecolor',[1 0 0],'linewidth',1.2); xlim([0 40]);
    temp1 = DOA_music(:,1); temp1 = temp1(temp1~=0); u1 = mean(temp1); s = std(temp1);
    tag11 = ['\mu_1 = ', num2str(round(u1,1)), ', \sigma_1 = ', num2str(round(s,1))];
    temp1 = DOA_music(:,2); temp1 = temp1(temp1~=0); u1 = mean(temp1); s = std(temp1);
    tag12 = ['\mu_2 = ', num2str(round(u1,1)), ', \sigma_2 = ', num2str(round(s,1))];
    tag1 = ['         MUSIC' char(10) tag11 char(10) tag12];
    temp1 = DOA_tf_music(:,1); temp1 = temp1(temp1~=0); u1 = mean(temp1); s = std(temp1);
    tag11 = ['\mu_1 = ', num2str(round(u1,1)), ', \sigma_1 = ', num2str(round(s,1))];
    temp1 = DOA_tf_music(:,2); temp1 = temp1(temp1~=0); u1 = mean(temp1); s = std(temp1);
    tag12 = ['\mu_2 = ', num2str(round(u1,1)), ', \sigma_2 = ', num2str(round(s,1))];
    tag2 = ['       TF-MUSIC' char(10) tag11 char(10) tag12];
    legend(tag1, tag2,'Location','Northwest'); grid on;
    set(gca,'XTickLabel','','YTickLabel','','fontweight','bold','fontsize',13);
    title(['SNR = ' num2str(SNR_i(i)), ' dB'],'fontsize',20);
    axes(ha(2));
    histogram(DOA_esprit, bins_N,'Normalization','probability',...
        'facecolor',[0 0.5 0],'linewidth',1.2); hold on;
    histogram(DOA_tf_esprit, bins_N,'Normalization','probability',...
        'facecolor',[0 0.45 0.74],'linewidth',1.2); xlim([0 40]);
    temp1 = DOA_esprit(:,1); u1 = mean(temp1); s = std(temp1);
    tag11 = ['\mu_1 = ', num2str(round(u1,1)), ', \sigma_1 = ', num2str(round(s,1))];
    temp1 = DOA_esprit(:,2); u1 = mean(temp1); s = std(temp1);
    tag12 = ['\mu_2 = ', num2str(round(u1,1)), ', \sigma_2 = ', num2str(round(s,1))];
    tag1 = ['         ESPRIT' char(10) tag11 char(10) tag12];
    temp1 = DOA_tf_esprit(:,1); u1 = mean(temp1); s = std(temp1);
    tag11 = ['\mu_1 = ', num2str(round(u1,1)), ', \sigma_1 = ', num2str(round(s,1))];
    temp1 = DOA_tf_esprit(:,2); u1 = mean(temp1); s = std(temp1);
    tag12 = ['\mu_2 = ', num2str(round(u1,1)), ', \sigma_2 = ', num2str(round(s,1))];
    tag2 = ['       TF-ESPRIT' char(10) tag11 char(10) tag12];
    legend(tag1, tag2,'Location','Northwest'); grid on;
    set(gca,'YTickLabel','','fontweight','bold','fontsize',13);
    xlabel('\theta (deg)');
    set(gcf,'Units','inches'); screenposition = get(gcf,'Position');
    set(gcf,'PaperPosition',[0 0 screenposition(3:4)],'PaperSize',screenposition(3:4));
end

🌈3 Matlab代码实现

🎉4 参考文献

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

[1] B. Boashash, A. Aissa-El-Bey, M. F. Al-Sa'd, Multisensor Time-Frequency Signal Processing:
    A tutorial review with illustrations in selected application areas, Digital Signal Processing, In Press.
[2] B. Boashash, A. Aissa-El-Bey, M. F. Al-Sa'd, Multisensor time-frequency signal processing software Matlab package: An analysis tool for multichannel non-stationary data , SoftwareX, In Press.
 

相关文章:

多传感器时频信号处理:多通道非平稳数据的分析工具(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

数据结构算法 -分而治之算法

引言 坤坤是一个养鸡场的员工&#xff0c;他非常热爱他的工作&#xff0c;并且总是努力提高他的专业技能。有一天&#xff0c;养鸡场接到了一项任务&#xff1a;在短时间内处理一批大量的鸡。 这批鸡数量非常大&#xff0c;比普通的数量要多得多&#xff0c;坤坤意识到他们需…...

涉密信息系统口令管理制度

第一条 口令是涉密信息系统身份认证的基本防护措施&#xff0c;为保障 涉密信息系统的安全运行&#xff0c;规范网络用户及系统口令&#xff0c;特制定本制度。 第二条 具有口令功能的计算机、网络设备等计算机信息系统设 备&#xff0c;必须使用口令对用户的身份进行验证…...

UML与流程图

UML简介 UML&#xff08;Unified Modeling Language&#xff0c;统一建模语言&#xff09;是一种用于软件系统分析与设计的标准化建模语言。它提供了一套丰富的图形符号和规则&#xff0c;可用于描述系统的结构、行为和交互&#xff0c;帮助开发人员、设计师和利益相关者之间进…...

音视频开发Level0: 入门级20~25k的工作

今天给大家分享一个音视频开发领域&#xff0c;入门级别的工作&#xff0c;要求不高。 主要做什么呢&#xff0c;行车记录仪&#xff0c;运动相机&#xff0c;各种拍摄器材包括医疗领域的喉镜啊&#xff0c;等等。 这种产品&#xff0c;招人的公司深圳最多&#xff0c;因为深…...

Git第一章、Git的原理与使用

目录 一、Git安装 1.1Linux Centos安装 二、Git基本操作 2.1创建 Git 本地仓库 2.2配置Git 三、认识工作区、暂存区、版本库 3.1添加文件&#xff08;场景一&#xff09; 3.2修改文件 3.3版本回退 四、撤销修改 4.1情况一&#xff1a;对于工作区的代码&#xff0c;还…...

软件开发流程

目录 软件软件开发流程的演变 瀑布模型敏捷模型 XPSCRUMDevOps 1.软件 与计算机系统操作有关的计算机程序、可能有的文件、文档及数据。 软件可以分为两种主要类型&#xff1a; 独立软件&#xff1a;独立软件是一种完整的应用程序&#xff0c;可以直接在计算机或移动设备上…...

编程语言的优劣评选标准与未来发展趋势——探索最佳编程语言选择

编程语言的优劣评选标准与未来发展趋势——探索最佳编程语言选择 评判标准不同编程语言的优点与缺点分析对编程语言未来发展的猜测和未来趋势 &#x1f495; &#x1f495; &#x1f495; 博主个人主页&#xff1a; 汴京城下君–野生程序员&#x1f495; &#x1f495; &#x…...

axios 发送请求请求头信息不包含Cookie信息

问题 axios 发送请求请求头信息不包含Cookie信息 详细问题 使用VueSpringBoot进行项目开发&#xff0c;axios进行网络请求&#xff0c;发送请求&#xff0c;请求头信息不包含Cookie信息 具体如下 实际效果 预期效果 解决方案 作用域 Vue项目全局配置 打开Vue项目的入口…...

正则表达式笔记

/你的正则表达式写在这里/ 1? 1出现0次或1次 1* 1出现0次或多次 1 1出现1次或多次 1{2} 1出现了2次 1{2,3} 1出现了2到3次 1{2,} 1出现了2次及以上 (5555){1} 5555出现了1次 (dog|cat) dog或者cat [a-zA-Z] a…...

数据结构链表(C语言实现)

绪论 机遇对于有准备的头脑有特别的亲和力。本章将讲写到链表其中主要将写到单链表和带头双向循环链表的如何实现。 话不多说安全带系好&#xff0c;发车啦&#xff08;建议电脑观看&#xff09;。 附&#xff1a;红色&#xff0c;部分为重点部分&#xff1b;蓝颜色为需要记忆的…...

Springboot实现接口传输加解密

前言 先给大家看下效果&#xff0c;原本我们的请求是这样子的 加密后的数据传输是这样子的 加解密步骤&#xff1a; 1.前端请求前进行加密&#xff0c;然后发送到后端 2.后端收到请求后解密 3.后端返回数据前进行加密 4.前端拿到加密串后&#xff0c;解密数据 加解密算法&…...

TypeScript类型系统:强类型的优势和使用方式

目录 引言强类型的优势更好的代码可读性更好的代码可维护性更好的代码重构能力更好的代码可靠性更好的代码重用能力 使用方式声明变量类型函数参数和返回值类型类型别名泛型类型&#xff08;了解&#xff09; 总结 引言 在上一篇文章《TypeScript入门指南&#xff1a;从JS到TS的…...

有没有可以代替风铃系统的专业问卷工具?

风铃系统问卷是一种流行的调查和数据分析工具&#xff0c;已广泛应用于学术研究、市场营销和社会科学。然而&#xff0c;有几种替代产品提供了与风铃系统类似的特性和功能&#xff0c;可以被企业用来进行调查和分析数据。在这篇文章中&#xff0c;我们将介绍风铃系统的十大替代…...

【数字调制】数字调制技术FSK与PSK分析与研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

html实现好看的个人介绍,个人主页模板4(附源码)

文章目录 1.设计来源1.1 主界面1.2 我的文章界面1.3 我的相册界面1.4 关于我界面1.5 联系我界面 2.效果和源码2.1 动态效果2.2 源代码2.2 源代码目录 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/131265259 …...

内存不够用,那你的内存去哪了?

一、前言 近几年开发了一些大型的应用程序&#xff0c;在程序性能调优或者解决一些疑难杂症问题的过程中&#xff0c;遇到最多的还是与内存相关的一些问题。例如glibc内存分配器ptmalloc&#xff0c;google的内存分配器tcmalloc都存在“内存泄漏”&#xff0c;即内存不归还操作…...

哈希表--day4--(leetcode202/leetcode1/leetcode454)

文章目录 leetcode202. 快乐数基本思路AC-code leetcode1. 两数之和基本思路AC-code 454.四数相加II基本思路AC-code leetcode202. 快乐数 链接 基本思路 实际上题目隐藏着一个小细节&#xff0c;就是告诉你会发生无限循环&#xff0c;那我们该如何跳出这个无限循环就是一个…...

基于Python+Django+mysql+html通讯录管理系统

基于PythonDjangomysqlhtml通讯录管理系统 一、系统介绍二、功能展示1.用户登陆2.用户注册3.密码修改4.查询5.添加6.修改7.删除 三、其它系统四、获取源码 一、系统介绍 该系统实现了 用户登陆、用户注册、密码修改、查询信息、添加信息&#xff0c;修改信息、删除信息 运行环…...

Rabbitmq学习

文章目录 前言RabbitMQ 1 同步调用和异步调用2 常见的MQ对比3 安装RabbitMQ4 RabbitMQ学习4.1 helloworld学习 5 Spring AMQP5.1 AMQP的入门案例(使用rabbittemplate进行消息发送和接受)5.2 RabbitMQ的workquene5.3 发布订阅模型(exchange(广播fanout 路由direct 话题topic))5.…...

oh-my-prompt:打造高效终端提示符的模块化方案与实战配置

1. 项目概述&#xff1a;为什么我们需要一个现代化的终端提示符&#xff1f;如果你和我一样&#xff0c;每天有超过一半的工作时间是在终端&#xff08;Terminal&#xff09;里度过的&#xff0c;那么终端提示符&#xff08;Prompt&#xff09;就是你最熟悉的“工作台面”。默认…...

为什么你的Ziatype输出总是发灰?3分钟定位CMYK→RGB色域坍缩根源并一键修复

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Ziatype印相发灰现象的直观诊断与认知重构 Ziatype是一种基于铁-银工艺的古典摄影印相法&#xff0c;其典型特征是高对比度、深沉黑位与细腻中间调。然而在实际操作中&#xff0c;“发灰”&#xff08;…...

《蔚蓝档案》主题鼠标指针:从设计到安装的完整指南

1. 项目概述&#xff1a;为你的桌面注入《蔚蓝档案》的活力如果你和我一样&#xff0c;既是《蔚蓝档案》的玩家&#xff0c;又是个喜欢折腾桌面美化的爱好者&#xff0c;那么看到一套高质量的游戏主题鼠标指针&#xff0c;那种“必须拥有”的心情我完全理解。今天要聊的这个项目…...

API中转站稳定性怎么判断?中小企业选平台别只看SLA数字

API中转站稳定性怎么判断&#xff1f;中小企业选平台别只看SLA数字 摘要 &#xff1a;选择Claude API中转站时&#xff0c;稳定性是核心考量。但"稳定"对不同用户含义不同&#xff0c;本文从不同用户视角分析如何评估API中转站的稳定性。 中转站稳定吗 稳定是相对的&…...

Mali-400 MP OpenGL ES DDK核心问题与解决方案

## 1. Mali-400 MP OpenGL ES DDK核心问题解析作为ARM经典的移动GPU架构&#xff0c;Mali-400 MP在Symbian平台的OpenGL ES驱动开发套件(DDK)中存在三类典型问题。这些问题的根源往往涉及GPU硬件特性与图形API规范的微妙交互&#xff0c;开发者需要深入理解其底层机制才能有效规…...

ElevenLabs账号被限频?紧急修复手册:3分钟绕过Rate Limit限制,解锁Pro级语音并发权限

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs超写实语音生成教程 ElevenLabs 是当前业界领先的 AI 语音合成平台&#xff0c;其模型在语调自然度、情感表达力与跨语言一致性方面表现卓越。本章将指导你完成从 API 接入到高质量语音生成的…...

AI应用开发平台RiserFlow实战:从架构解析到智能客服构建

1. 项目概述&#xff1a;从“RiserFlow”看现代AI应用开发范式的演进最近在GitHub上看到一个挺有意思的项目&#xff0c;叫riserlabs/riserflow。光看这个名字&#xff0c;可能有点摸不着头脑&#xff0c;但如果你点进去&#xff0c;会发现它其实指向一个更具体的产品&#xff…...

Windows Cleaner终极指南:3步解决C盘爆红和电脑卡顿难题

Windows Cleaner终极指南&#xff1a;3步解决C盘爆红和电脑卡顿难题 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服&#xff01; 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner Windows Cleaner是一款专为Windows系统设计的…...

【CPO三维路径规划】豪猪算法CPO多无人机协同集群避障路径规划(目标函数:最低成本:路径、高度、威胁、转角)研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

Docker 的了解和使用

1. 虚拟化全虚拟化&#xff1a;虚拟机的操作系统可以和宿主机的操作系统完全不同。os层虚拟化&#xff1a;操作内核相同&#xff0c;软件虚拟化。2. docker安装 Docker容器本质上是Linux容器&#xff0c;它需要Linux内核环境才能运行。在Windows上直接运行Docker&#xff0c;需…...