FDM(傅里叶分解)

代码的使用教程

傅里叶分解(FDM)

代码原理

FDM (Frequency Division Multiplexing)是一种调制技术,将信号分成多个不同的频带进行传输,从而实现多路复用的通信方式。FDM分解原理是将不同频率的信号分解成不同的频带(子载波),通过多个子载波同时向传输介质发送数据,每个子载波都被分配一个频段,相互之间不会干扰,同时利用传输介质的带宽效率比较高。

在FDM系统中,将不同的信号加入到载波波形上,所有的载波频率都在相同的信道中传输。因此,可以通过分离载波的频率来恢复每个源信号。对于输入信号x(t),通过余弦函数调制,可以得到载波信号c(t)。然后,在每一个分频带的频率上加入载波脉冲,从而产生多路信号。

在接收端,使用一个特殊的滤波器,将所需的频段选择出来,其中包括每个子载波的频段。然后,去除其他频率分量并恢复原始信号。因此,FDM系统是一种多路复用的技术,它使得多个信号能够在同一时间内共享一个通信介质。

代码效果图

部分代码和相关解释

function [xt_recov_IMFsLowToHigh,xt_recov_IMFsHighToLow] = FDM_Low2High_High2LowS(xt,Fs)
    global PS_PhaseUnwrap;
    global CentralDiff;
    CentralDiff=1; % central finite difference, e.g. for delta function
    PS_PhaseUnwrap=0;
    threshold=-0*(10)^(-1); % idealy should be zero.
    L=length(xt);
    if 1 % adding zero at last, can create discontinuity in signal. e.g. org emd example
        if rem(L,2) == 1 % odd
                L=L+1; % make it even for faster FFT
                %xt=[xt 0]; %  can create discontinuity
                xt=[xt xt(end)]; % repeat last data
        end
    end
    NFFT=L;
    N=(NFFT);
    Xk=fft(xt,NFFT)/L;     
    % k=1, Xk, is real, (2 to N/2) are complex, (N/2+1) is real, (N/2+2 to N) are complex conjugate of (N/2 to 2)    
    nTotalHormonics=N/2;
    
    %if 1 % this is much better, seen by examples 1.
        %%
        xt_recov_IMFsLowToHigh=zeros(1,N)';
        IFOfSignalIF=zeros(1,N)'; 
        xt_AnalyticFIBF=zeros(1,N)';
        xt_recov_IMFsLowToHigh(:,1)=(ones(1,N))*Xk(1); % first IMF DC
        init=2;
        p=2;     
        while(init<=N/2)            
            [kk, xt_recov_FIBF, xt_recov_AnalyticFIBF, IFOfSignal]=getIMFsScanAllLowToHigh(Xk,Fs,init,nTotalHormonics,threshold);
            %% 
            init=kk+1;
            xt_recov_IMFsLowToHigh(:,p)=xt_recov_FIBF;
            IFOfSignalIF(:,p-1)=IFOfSignal;
            xt_AnalyticFIBF(:,p-1)=xt_recov_AnalyticFIBF;            
            p=p+1;  
        end
         
        %subplot(2,1,1)
        % sp_PlotTF(xt_AnalyticFIBF,IFOfSignalIF,t,Fs,Fs/2);
        
        % title('FDM: Time-Frequncy-Energy estimate of FIBFs (LTH-FS)','FontSize',16,'FontName','Times');
        nn=(1:N);
        tttmp=Xk((N/2)+1).*cos(pi*(nn-1)); % N/2+1 part of FFT, last part of DFT
        xt_recov_IMFsLowToHigh(:,end+1)=tttmp'; % N/2+1 part of FFT, last part of DFT
    %end   
    
    
    %if 1 % this is much better, seen by examples 1 and 3.
        xt_recov_IMFsHighToLow=zeros(1,N)'; 
        IFOfSignalIF=zeros(1,N)'; 
        xt_AnalyticFIBF=zeros(1,N)';
        mm=1;        
        %tttmp=Xk((N/2)+1).*cos(pi*(1:N-1));
        xt_recov_IMFsHighToLow(:,mm)=tttmp'; % N/2+1 part of FFT, last part of DFT        
        final=N/2;        
        while(final>=2)
            mm=mm+1; 
            
            [kk, xt_recov_FIBF, xt_recov_AnalyticFIBF, IFOfSignal]=getIMFsScanAllHighToLow(Xk,Fs,final,threshold);
            %% 
            final=kk-1;
            xt_recov_IMFsHighToLow(:,mm)=xt_recov_FIBF;
            xt_AnalyticFIBF(:,mm-1)=xt_recov_AnalyticFIBF;
            IFOfSignalIF(:,mm-1)=IFOfSignal;            
        end
        %subplot(2,1,2)
        %figure 
        % sp_PlotTF(xt_AnalyticFIBF,IFOfSignalIF,t,Fs,Fs/2);   
        % title('FDM: Time-Frequncy-Energy estimate of FIBFs (HTL-FS)','FontSize',16,'FontName','Times');        
        %% residue
        xt_recov_IMFsHighToLow(:,mm+1)=(ones(1,N))*Xk(1); % first IMF DC        
    %end  
这段代码是一个实现低频到高频和高频到低频的FDM(Frequency Division Multiplexing)信号分解的函数。函数接受输入信号 xt 和采样频率 Fs,并返回分解后的低频到高频和高频到低频的信号。
函数中的变量 xt_recov_IMFsLowToHigh 和 xt_recov_IMFsHighToLow 分别用于保存低频到高频和高频到低频的信号。函数首先对输入信号进行FFT变换,得到频率域的表示 Xk。然后通过调用 getIMFsScanAllLowToHigh 函数,从低频到高频逐步分解信号,得到对应的IMFs(Intrinsic Mode Functions)和IFs(Instantaneous Frequencies),并将它们保存在 xt_recov_IMFsLowToHigh 中。
该函数使用了一些全局变量 PS_PhaseUnwrap 和 CentralDiff,它们可能在其他地方被定义和使用。
最后,函数返回分解后的低频到高频和高频到低频的信号 xt_recov_IMFsLowToHigh 和 xt_recov_IMFsHighToLow。   

代码链接:阿里云盘分享 (aliyundrive.com)

获取代码请关注MATLAB科研小白的个人公众号(即文章下方二维码),并回复FDM

本公众号致力于解决找代码难,写代码怵。各位有什么急需的代码,欢迎后台留言~不定时更新科研技巧类推文,可以一起探讨科研,写作,文献,代码等诸多学术问题,我们一起进步。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网工内推 | Linux运维,六险二金,最高30K,IE认证优先

01 上海域起 招聘岗位&#xff1a;Linux运维工程师 职责描述&#xff1a; 1.负责游戏产品运维相关的工作&#xff0c;流程文档、技术文档、功能脚本的编写整理 2.负责分析并排除系统、数据库、网络、应用等游戏产品运维中出现的故障及错误 3.负责对游戏产品项目进行线上部署、…

阿里AoneFlow分支管理

分支模式 1.TrunkBased模式 工作方式 TrunkBased 模式是持续集成思想所崇尚的工作方式&#xff0c;它由单个主干分支和许多发布分支组成&#xff0c;每个发布分支在特定版本的提交点上从主干创建出来&#xff0c;用来进行上线部署和 Hotfix&#xff08;补丁&#xff09;。 …

制作Go程序的Docker容器

今天突然遇到需要将 Go 程序制作成 Docker 的需求&#xff0c;所以进行了一些研究。方法很简单&#xff0c;但是官方文档和教程有些需要注意的地方&#xff0c;所以写本文进行记录。 源程序 首先介绍一下示例程序&#xff0c;示例程序是一个 HTTP 服务器&#xff0c;会显示si…

一次java系统调优 从150到最高1800的过程

前言 在做公司系统压力测试(500个线程并发)的时候 某个服务的接口 压测初始结果如下 初始指标(最高)&#xff1a; 吞吐量 150/s TPS: 240 CPU,内存&#xff0c;带宽&#xff0c;磁盘io 如下图所示 可以看到资源使用是有问题的 cpu和带宽并没有给足压力 说明并不是资源所导致…

代码随想录算法训练营第三十九天【动态规划part02】 | 62.不同路径、63. 不同路径 II

62.不同路径 题目链接&#xff1a; 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 求解思路&#xff1a; 动规五部曲 确定dp数组及其下标含义&#xff1a;dp[i][j] 表示从&#xff08;0,0&#xff09;出发&#xff0c;到&#xff08;i,j&#x…

计算机科学速成课

建议看看计算机科学速成课&#xff0c;一门很全面的计算机原理入门课程&#xff0c;短短10分钟可以把大学老师十几节课讲的东西讲清楚&#xff01;整个系列一共41个视频&#xff0c;B站上有中文字幕版。 每个视频都是一个特定的主题&#xff0c;例如软件工程、人工智能、操作系…

Django的可重用HTML模板示例

01-配置并运行Django项目 首先按照博文 https://blog.csdn.net/wenhao_ir/article/details/131166889配置并运行Django项目。 02-创建可重用模板文件 templates目录下新建目录common&#xff0c;然后在目录common下新建文件&#xff1a;navbar.html&#xff0c;并写入下面的…

Pandas 求平均值

Pandas是Python中最流行的数据分析库之一&#xff0c;它提供了许多强大的工具来处理和分析数据集。其中&#xff0c;求平均值是数据分析中最常见的操作之一。在本文中&#xff0c;我们将从多个角度分析Pandas中如何求平均值。 一、基础操作 Pandas中求平均值的基础操作是使用m…

电磁场与电磁波part3--静态电磁场及其边值问题的解

1、当场源&#xff08;电荷、电流&#xff09;不随时间变化时&#xff0c;所产生的电场、磁场也不随时间变化&#xff0c;称为静态电磁场。静止电荷产生的静电场、在导电媒质中恒定运动电荷形成的恒定电场以及恒定电流产生的恒定磁场都属于静态电磁场。 2、静电场基本方程微分形…

深信服AC应用控制技术

拓扑图 目录 拓扑图 一.上班时间不允许使用qq(假设上班时间是上午9到12&#xff0c;下午14到18) 1.新增上班时间不允许使用qq访问权限策略 2.将策略应用到组&#xff0c;例如修仙部 3.验证 上班时间发现登录不了 下班时间可以登录 二.上班时间不允许访问视频网站(假设上班时…

springboot323基于Java的美妆购物网站的设计与实现

交流学习&#xff1a; 更多项目&#xff1a; 全网最全的Java成品项目列表 https://docs.qq.com/doc/DUXdsVlhIdVlsemdX 演示 项目功能演示&#xff1a; ————————————————

梦想编织者——Adobe Dreamweaver

今天&#xff0c;我们来谈谈一款在Adobe系列中推出的一款Adobe Dreamweaver&#xff0c;简称“DW”&#xff0c;中文名称 “梦想编织者”&#xff0c;是集网页制作和管理网站于一身的所见即所得网页代码编辑器。 利用对 HTML、CSS、JavaScript等内容的支持&#xff0c;设计人员…

java并发编程JUC:一、专栏配置+进程与线程+并行和并发+同步和异步+线程的创建、调用、查看、运行原理和相关API

专栏配置 pom.xml <properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies><dependency><groupId>org.projectlombok<…

(论文阅读46-50)图像描述2

46.文献阅读笔记 简介 题目 Learning a Recurrent Visual Representation for Image Caption Generation 作者 Xinlei Chen, C. Lawrence Zitnick, arXiv:1411.5654. 原文链接 http://www.cs.cmu.edu/~xinleic/papers/cvpr15_rnn.pdf 关键词 2014年rnn图像特征和文本特…

目录自动清洗

文章目录 前言一、需求分析二、操作步骤详解&#xff08;标准章节&#xff09;1. 提取文章目录2. 更改保存目录.txt3. 二级标题前面加4个空格4. 在章字和节字后面添加一个空格5. 在页码前面加上>符号6. 代码完全体 三、进阶一&#xff08;有章无节小数二级标题&#xff09;1…

git基础命令

git简介 什么是git&#xff1f; git是一种分布式版本控制系统。 git与svn之间的区别是什么&#xff1f; svn是集中式版本控制系统。git是分布式版本控制系统。 什么是集中式版本控制系统&#xff1f;有哪些特点&#xff1f; 版本库是集中存放在中央服务器。集中式版本控制…

kk模组的具体应用场合

KK模组是一种高精度、高刚度的直线模组&#xff0c;广泛应用于各种自动化设备和精密仪器中。以下是KK模组的一些具体应用场合&#xff1a; 1、半导体设备&#xff1a;半导体制造过程中需要使用精密的定位和运动控制设备&#xff0c;KK模组作为一种高精度、高刚度的直线模组&…

Selenium——利用input标签上传文件

Selenium利用input标签上传文件 完整流程 打开文件上传页面选择要上传的文件点击上传按钮确认文件上传成功介绍怎么方便的获取对应元素的Xpath或者Css 简单介绍 在使用Selenium进行浏览器自动化测试时&#xff0c;文件上传是一个常见的需求。而 标签就是实现文件上传功能的…

【Python自动化】定时自动采集,并发送微信告警通知,全流程案例讲解!

文章目录 一、概要二、效果演示三、代码讲解3.1 爬虫采集行政处罚数据3.2 存MySQL数据库3.3 发送告警邮件&微信通知3.4 定时机制 四、总结 一、概要 您好&#xff01;我是马哥python说&#xff0c;一名10年程序猿。 我原创开发了一套定时自动化爬取方案&#xff0c;完整开…