【信号平稳性估计】使用新方法估计给定信号是否为广义平稳性(Matlab代码实现)

该文提出了一种新的信号广义平稳性估计方法,涉及Wilcoxon秩和检验与Brown-Forsythe检验。通过Matlab实现,对信号的均值、方差和自协方差的平稳性进行估计,适用于时间序列分析。文中展示了对不同信号的测试结果,证实了该方法的一致性。
摘要由CSDN通过智能技术生成

 👨‍🎓个人主页:研学社的博客    

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

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

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

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

目录

💥1 概述

📚2 运行结果

2.1 Wilcoxon秩和检验和Brown-Forsythe检验

2.2 估计信号的WSS 

🎉3 参考文献

🌈4 Matlab代码及文章


💥1 概述

文献来源:

 摘要:本文提出了一种新的信号广义平稳性估计方法。给出了过程和信号平稳性概念的背景信息。讨论了信号平稳性估计的问题以及对现有平稳性检验的批评。在此基础上,提出了一种广义平稳性估计方法,包括信号的均值平稳性、方差平稳性和自协方差平稳性估计。最后,对几个有代表性的信号进行了测试,结果清楚地表明了所提出的测试方法的一致性。它是在Matlab®环境中实现的,可以免费下载和使用。关键词:信号,平稳性,估计,测试,方法

原文摘要:

Abstract: - In the paper, a novel estimation method is proposed, concerning the wide-sense stationarity test of the signals. Background information is given about the concept of stationarity of the processes and signals. The problem of the signal stationarity estimation is addressed along with criticism of the available stationarity tests. Further, a new wide-sense stationarity estimation method is described, involving estimation of the mean-, variance- and autocovariance- stationarity of a signal. Finally, a few representative signals are tested and the results clearly indicate the consistence of the proposed test method. It is  implemented in Matlab®-environment and can be download and use for free.  
 
Keywords: - signal, stationarity, estimation, test, method

本文有两个部分,用于使用在两种变体中开发的新方法对信号(例如时间序列)进行广义平稳性 (WSS) 估计。第一个变体使用推理统计方法(例如,它实现了Wilcoxon秩和检验和Brown-Forsythe检验),而第二个变体纯粹是经验性的 - 它通过比较其时间局部汇总统计(平均值,方差,协方差)来“按原样”估计信号的WSS,而不对底层过程或总体进行任何假设。

这些函数提供四个布尔标志的计算:

1)总体广义平稳性,即关于均值、方差和自协方差的同时平稳性;

2)关于均值的平稳性;

3)关于方差的平稳性(因此关于RMS值);

4)自协方差(以及自相关和PSD)的时间不变性。

为了阐明函数的用法,给出了一些示例。为方便起见,输入和输出参数在每个函数的开头给出。

  

📚2 运行结果

2.1 Wilcoxon秩和检验和Brown-Forsythe检验

2.2 估计信号的WSS 

 第二部分主函数代码:

clear, clc, close all

%% generate test signals
% sampling frequency
fs = 44100;

% TS1 
% sine-wave signal (stationary signal)
t1 = 0:1/fs:5;
x1 = 1.0*sin(2*pi*440*t1);

% TS2
% white noise (stationary signal)
x2 = randn(1, 5*fs);

% TS3
% violet noise (stationary signal)
x3 = violetnoise(5*fs);

% TS4
% linear chirp signal  (non-stationary signal)
t4 = 0:1/fs:5;
x4 = chirp(t4, 1000, 5, 10000);

% TS5a
% sequence of sine-waves (non-stationary signal)
t51 = 0:1/fs:1;
t52 = 0:1/fs:4;
x5a1 = 1.0*sin(2*pi*440*t51);
x5a2 = 2.0*sin(2*pi*440*t52);
x5a = [x5a1 x5a2];

% TS5b
% sequence of sine-waves (non-stationary signal)
x5b1 = 1.0*sin(2*pi*440*t51);
x5b2 = 1.0*sin(2*pi*1000*t52);
x5b = [x5b1 x5b2];

% TS6
% red noise (non-stationary signal)
x6 = rednoise(5*fs);

% TS7
% human speech (non-stationary signal)
x7 = audioread('DR2_FRAM1_SI522.wav');

% TS8
% sound (non-stationary signal)
x8 = load('handel.mat');
x8 = x8.y;

%% perform WSS test
gamma = 0.95;
[~, mean_stat_flag1, var_stat_flag1, covar_stat_flag1] = isstationary(x1, gamma);
[~, mean_stat_flag2, var_stat_flag2, covar_stat_flag2] = isstationary(x2, gamma);
[~, mean_stat_flag3, var_stat_flag3, covar_stat_flag3] = isstationary(x3, gamma);
[~, mean_stat_flag4, var_stat_flag4, covar_stat_flag4] = isstationary(x4, gamma);
[~, mean_stat_flag5a, var_stat_flag5a, covar_stat_flag5a] = isstationary(x5a, gamma);
[~, mean_stat_flag5b, var_stat_flag5b, covar_stat_flag5b] = isstationary(x5b, gamma);
[~, mean_stat_flag6, var_stat_flag6, covar_stat_flag6] = isstationary(x6, gamma);
[~, mean_stat_flag7, var_stat_flag7, covar_stat_flag7] = isstationary(x7, gamma);
[~, mean_stat_flag8, var_stat_flag8, covar_stat_flag8] = isstationary(x8, gamma);

%% visualize the results
% Note: A novel visual representation of the signal stationarity estimation
% is proposed for better perception named "Statinary semaphore". All three
% Boolean flags must be rised in order a given signal to be estimated as
% wide-sense stationary i.e, stationary about its mean, variance and
% autocovariance.

figure(1)
subplot(3, 3, 1)
matvisual([mean_stat_flag1; var_stat_flag1; covar_stat_flag1], 'annotation')
set(gca, 'FontName', 'Times New Roman', 'FontSize', 12)
title(['Stationarity' newline 'semaphore for TS1'], 'FontSize', 12)
xlabel([])
ylabel([])
set(gca, 'XTickLabel', [])
set(gca, 'YTickLabel', {'Mean', 'Variance', 'Autocovariance'})
colormap([0.75, 0, 0; 0, 0.75, 0])
set(gcf, 'Units', 'Normalized')
set(gcf, 'Position', [0.325, 0.1, 0.35, 0.8])

subplot(3, 3, 2)
matvisual([mean_stat_flag2; var_stat_flag2; covar_stat_flag2], 'annotation')
set(gca, 'FontName', 'Times New Roman', 'FontSize', 12)
title(['Stationarity' newline 'semaphore for TS2'], 'FontSize', 12)
xlabel([])
ylabel([])
set(gca, 'XTickLabel', [])
set(gca, 'YTickLabel', {'Mean', 'Variance', 'Autocovariance'})
colormap([0.75, 0, 0; 0, 0.75, 0])
set(gcf, 'Units', 'Normalized')
set(gcf, 'Position', [0.325, 0.1, 0.35, 0.8])

subplot(3, 3, 3)
matvisual([mean_stat_flag3; var_stat_flag3; covar_stat_flag3], 'annotation')
set(gca, 'FontName', 'Times New Roman', 'FontSize', 12)
title(['Stationarity' newline 'semaphore for TS3'], 'FontSize', 12)
xlabel([])
ylabel([])
set(gca, 'XTickLabel', [])
set(gca, 'YTickLabel', {'Mean', 'Variance', 'Autocovariance'})
colormap([0.75, 0, 0; 0, 0.75, 0])
set(gcf, 'Units', 'Normalized')
set(gcf, 'Position', [0.325, 0.1, 0.35, 0.8])

subplot(3, 3, 4)
matvisual([mean_stat_flag4; var_stat_flag4; covar_stat_flag4], 'annotation')
set(gca, 'FontName', 'Times New Roman', 'FontSize', 12)
title(['Stationarity' newline 'semaphore for TS4'], 'FontSize', 12)
xlabel([])
ylabel([])
set(gca, 'XTickLabel', [])
set(gca, 'YTickLabel', {'Mean', 'Variance', 'Autocovariance'})
colormap([0.75, 0, 0; 0, 0.75, 0])
set(gcf, 'Units', 'Normalized')
set(gcf, 'Position', [0.325, 0.1, 0.35, 0.8])

subplot(3, 3, 5)
matvisual([mean_stat_flag5a; var_stat_flag5a; covar_stat_flag5a], 'annotation')
set(gca, 'FontName', 'Times New Roman', 'FontSize', 12)
title(['Stationarity' newline 'semaphore for TS5a'], 'FontSize', 12)
xlabel([])
ylabel([])
set(gca, 'XTickLabel', [])
set(gca, 'YTickLabel', {'Mean', 'Variance', 'Autocovariance'})
colormap([0.75, 0, 0; 0, 0.75, 0])
set(gcf, 'Units', 'Normalized')
set(gcf, 'Position', [0.325, 0.1, 0.35, 0.8])

subplot(3, 3, 6)
matvisual([mean_stat_flag5b; var_stat_flag5b; covar_stat_flag5b], 'annotation')
set(gca, 'FontName', 'Times New Roman', 'FontSize', 12)
title(['Stationarity' newline 'semaphore for TS5b'], 'FontSize', 12)
xlabel([])
ylabel([])
set(gca, 'XTickLabel', [])
set(gca, 'YTickLabel', {'Mean', 'Variance', 'Autocovariance'})
colormap([0.75, 0, 0; 0, 0.75, 0])
set(gcf, 'Units', 'Normalized')
set(gcf, 'Position', [0.325, 0.1, 0.35, 0.8])

subplot(3, 3, 7)
matvisual([mean_stat_flag6; var_stat_flag6; covar_stat_flag6], 'annotation')
set(gca, 'FontName', 'Times New Roman', 'FontSize', 12)
title(['Stationarity' newline 'semaphore for TS6'], 'FontSize', 12)
xlabel([])
ylabel([])
set(gca, 'XTickLabel', [])
set(gca, 'YTickLabel', {'Mean', 'Variance', 'Autocovariance'})
colormap([0.75, 0, 0; 0, 0.75, 0])
set(gcf, 'Units', 'Normalized')
set(gcf, 'Position', [0.325, 0.1, 0.35, 0.8])

subplot(3, 3, 8)
matvisual([mean_stat_flag7; var_stat_flag7; covar_stat_flag7], 'annotation')
set(gca, 'FontName', 'Times New Roman', 'FontSize', 12)
title(['Stationarity' newline 'semaphore for TS7'], 'FontSize', 12)
xlabel([])
ylabel([])
set(gca, 'XTickLabel', [])
set(gca, 'YTickLabel', {'Mean', 'Variance', 'Autocovariance'})
colormap([0.75, 0, 0; 0, 0.75, 0])
set(gcf, 'Units', 'Normalized')
set(gcf, 'Position', [0.325, 0.1, 0.35, 0.8])

subplot(3, 3, 9)
matvisual([mean_stat_flag8; var_stat_flag8; covar_stat_flag8], 'annotation')
set(gca, 'FontName', 'Times New Roman', 'FontSize', 12)
title(['Stationarity' newline 'semaphore for TS8'], 'FontSize', 12)
xlabel([])
ylabel([])
set(gca, 'XTickLabel', [])
set(gca, 'YTickLabel', {'Mean', 'Variance', 'Autocovariance'})
colormap([0.75, 0, 0; 0, 0.75, 0])
set(gcf, 'Units', 'Normalized')
set(gcf, 'Position', [0.325, 0.1, 0.35, 0.8])

🎉3 参考文献

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

[1] H. Zhivomirov, I. Nedelchev. A Method for Signal Stationarity Estimation. Romanian Journal of Acoustics and Vibration, ISSN: 1584-7284, Vol. XVII, No. 2, pp. 149-155, 2020.

🌈4 Matlab代码及文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值