MATLAB高阶累积量函数计算介绍

MATLAB有自带的高阶谱分析工具箱,包括cum3x、cum3est、cum4x、cum4est等,这里对其用法进行简单介绍。
语法

y_cum=cum3x(x,y,z,maxlag,nsamp,overlap,flag,k1);

该函数是用来估计x、y、z的三阶互累积量,当x=y=z时,估计的是x的三阶累积量

参数意义
x、y、z分析数据向量或者矩阵,维数必须相同
maxlag估计的最大延迟量,默认值为0
nsamp每一段的样本数 ,默认值为数据长度
overlap数据重叠百分比,默认值为0
flag'biased’表示有偏估计,'unbiased’为无偏估计
k1固定的延迟量,C3(m,k1),k1默认值为0
y_cum返回估计的互三阶累积量

语法

y_cum=cum3est(y,maxlag,nsamp,overlap,flag,k1);

该函数是用来估计y的三阶累积量

参数意义
y分析数据列向量
maxlag估计的最大延迟量,默认值为0
nsamp每一段的样本数,默认值为数据长度
overlap数据重叠百分比,默认值为0
flag'biased’表示有偏估计,'unbiased’为无偏估计
k1固定的延迟量,C3(m,k1),k1默认值为0
y_cum返回估计的三阶累积量

例子:估计非高斯ARMA(1,2)过程的三阶累积量

clear;
close all;
clc;
%产生非高斯ARMA仿真信号
rand('seed',0);
randn('seed',0);
%非高斯输入
u=rpiid(1024,'exp');
%最大延迟量
maxlag=25;
%ARMA(1,2)过程
sig=filter([1,-2],[1,-1.5,0.8],u);
%显示ARMA过程信号
figure(1);
plot(1:length(sig),sig);
xlabel('n');
ylabel('ARMA(1,2)信号幅值')
%估计三阶累积量
%参数设置
nsamp=128;
overlap=0;
flag='biased';
for k=-maxlag:maxlag
    sig3cum(:,k+maxlag+1)=cum3x(sig,sig,sig,maxlag,nsamp,overlap,flag,k);
end
%显示三阶累积量
figure(2);
%等高线图
subplot(2,2,1);
contour(-maxlag:maxlag,-maxlag:maxlag,sig3cum);
xlabel('延迟量k');
ylabel('延迟量l');
%三维图
subplot(2,2,2);
mesh(-maxlag:maxlag,-maxlag:maxlag,sig3cum);
xlabel('延迟量k');
ylabel('延迟量l');
for k=-maxlag:maxlag
    sig3cum(:,k+maxlag+1)=cum3est(sig,maxlag,nsamp,overlap,flag,k);
end
%显示三阶累积量
%等高线图
subplot(2,2,3   );
contour(-maxlag:maxlag,-maxlag:maxlag,sig3cum);
xlabel('延迟量k');
ylabel('延迟量l');
%三维图
subplot(2,2,4);
mesh(-maxlag:maxlag,-maxlag:maxlag,sig3cum);
xlabel('延迟量k');
ylabel('延迟量l');

结果显示在这里插入图片描述
图中显示的是ARMA(1,2)过程的仿真信号
两种函数计算结果对比
在这里插入图片描述
从等高线图和三维图来看,两种不同途径计算的结果是一致的。
关于计算四阶互累积量的函数cum4x和四阶累积量的函数cum4est的各个参数和cum3x、cum3est代表的意义相同,这里不再叙述。
高阶谱分析工具箱下载地址:https://www.mathworks.com/matlabcentral/fileexchange/3013-hosa-higher-order-spectral-analysis-toolbox?s_tid=srchtitle

ShardingSphere是一款开源的分布式数据库中间件,可以实现对关系型数据库的分库分表、读写分离、分布式事务等功能。而dynamic-datasource-spring-boot-starter是一个基于Spring Boot的动态数据源组件,可以动态地切换数据源。如果需要将这两个组件整合起来使用,可以按照以下步骤进行操作: 1. 引入依赖 在项目的pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-core</artifactId> <version>${sharding-sphere-version}</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>${dynamic-datasource-version}</version> </dependency> ``` 其中,${sharding-sphere-version}为ShardingSphere的版本号,${dynamic-datasource-version}为dynamic-datasource-spring-boot-starter的版本号。 2. 配置数据源 在application.yml中配置数据源信息,包括ShardingSphere的分库分表规则和动态数据源的配置信息。 ```yaml spring: shardingsphere: datasource: names: ds0,ds1 ds0: driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/db0?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC username: root password: root ds1: driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/db1?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC username: root password: root sharding: tables: user: actual-data-nodes: ds${0..1}.user_${0..1} table-strategy: inline: sharding-column: id algorithm-expression: user_${id % 2} key-generator: column: id type: SNOWFLAKE ``` 其中,names为数据源名称,actual-data-nodes为ShardingSphere的分库分表规则,table-strategy为分表策略,key-generator为主键生成策略。 3. 配置动态数据源 在DynamicDataSourceAutoConfiguration中配置动态数据源。 ```java @Configuration public class DynamicDataSourceAutoConfiguration { @Bean @ConfigurationProperties(prefix = "spring.datasource.ds0") public DataSource ds0() { return DataSourceBuilder.create().build(); } @Bean @ConfigurationProperties(prefix = "spring.datasource.ds1") public DataSource ds1() { return DataSourceBuilder.create().build(); } @Bean @Primary public DynamicDataSource dataSource(DataSource ds0, DataSource ds1) { Map<Object, Object> targetDataSources = new HashMap<>(); targetDataSources.put("ds0", ds0); targetDataSources.put("ds1", ds1); return new DynamicDataSource(ds0, targetDataSources); } } ``` 其中,ds0和ds1分别对应于ShardingSphere中的ds0和ds1数据源,DynamicDataSource是动态数据源的实现类。 4. 测试 在测试类中使用@Autowired注解注入DataSource,并使用JdbcTemplate进行数据操作。 ```java @SpringBootTest public class ShardingTest { @Autowired private DataSource dataSource; @Test public void test() { JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); jdbcTemplate.update("insert into user (name, age) values (?, ?)", "张三", 20); jdbcTemplate.update("insert into user (name, age) values (?, ?)", "李四", 30); List<Map<String, Object>> userList = jdbcTemplate.queryForList("select * from user"); System.out.println(userList); } } ``` 运行测试类,可以看到数据成功插入到两个库的两张表中,并且查询结果也正确。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值