【信号处理】基于扩展卡尔曼滤波器和无迹卡尔曼滤波器的窄带信号时变频率估计(Matlab代码实现)
目录
1 概述
2 数学模型
3 运行结果
4 结论
5 参考文献
6 Matlab代码实现
1 概述
本文讲解和比较了基于卡尔曼滤波器的频率跟踪方法的能力,例如扩展卡尔曼滤波器 (EKF) 和无味卡尔曼滤波器 (UKF),以跟踪窄带谐波信号的时变频率。这些结果与 Savaresi 等人的结果进行了比较。在 [3] 中。为了评估算法实现的估计质量,使用了两个标准:性能指数 (PI) 和鲁棒性指数 (RI),如 [3] 中所述。引入了辅助收敛比以更好地解释 PI 图。考虑两个信号:从现实世界记录的单频正弦信号和生成的噪声信号,该信号具有随时间变化的频率,遵循阶跃分布。该算法能够以~10-7 的精度估计真实世界的信号,并实现与 [3] 一致的性能。在最后一节中显示和讨论了获得的结果。
本文讨论了估计嵌入噪声的窄带谐波信号的频率问题;特别是基于卡尔曼滤波器的方法,例如扩展卡尔曼滤波器 (EKF) 和无迹卡尔曼滤波器 (UKF)。为了评估算法实现的估计质量,引入了两个标准:性能指数(PI)和鲁棒性指数(RI),以及辅助收敛比。已对记录的真实信号和生成的噪声信号进行了测试。详细文章见第3部分。
2 数学模型
所提出的模型是从信号表示为笛卡尔平面中具有角速度 Φ(t) 的旋转矢量构建的。通过将向量沿轴的两个投影和瞬时频率作为状态变量推导出三阶状态空间模型(ARMA 表示)
详细讲解见:
%% RI
clear all
close all
clc
fclose('all');global logpath;addpath('./ukf')
addpath('./ekf')
addpath('./generate')
addpath('./ri')PLOT_PREDICTION = false;
PLOT_PROFILE = false;
COMPUTE = true;% Parameters
initial_omega = pi/2;
step_profile = [pi/11 -pi/5.5 pi/4 -pi/3.4 pi/2.8 -pi/2.5 pi/2 -pi/1.6 pi/1.4]; % Approximation of Fig.2 on the paper
step_length = 400;
sigma = 1e+1;
q = 1e-5;
r = sigma*q;
n_simulations = 500;
initialization_noise_sigma = 0.001;
threshold = 120;
% sigma_noise = 2e-2;
% sigma_omega_noise = 1e-3;
sigma_noise = 4e-1;
sigma_omega_noise = 3e-1;if (PLOT_PREDICTION)ri_figure = figure('visible','off');set(ri_figure, 'Position', [0, 0, 720, 720],'Resize','off')
endnamestring = sprintf('q%1.2e_s%1.2e_sn%1.2e_sno%1.2e',q,sigma,sigma_noise,sigma_omega_noise);
logpath = strcat(pwd,'\data\ri\',namestring,'\')
if ~exist(logpath,'dir'), mkdir(logpath), endif (COMPUTE)ri_ekf = zeros(1,n_simulations);ri_ukf = ri_ekf;for ii = 1:n_simulationsfprintf('***** Iteration %d *****\n',ii)% Generate signal[signal, omega]=generate_signal_step(step_length,initial_omega,step_profile,sigma_noise,sigma_omega_noise);%% Track x_pred_0 = [0, 0, normrnd(omega(1),omega(1)*initialization_noise_sigma)]; % Initializationpred_vec_ekf = ekf( ... signal, ...%signalx_pred_0, ...%x_pred_0initialization_noise_sigma, ...%sigma_initr, ... %r,q ... %q);pred_vec_ukf = ukf( ... signal, ...%signalx_pred_0, ...%x_pred_0initialization_noise_sigma, ...%sigma_initr, ... %r,q ... %q);% Take only the state we are interested inpred_omega_ekf = pred_vec_ekf(3,:); pred_omega_ukf = pred_vec_ukf(3,:); disp('************ EKF *************');ri_ekf(ii) = compute_ri(pred_omega_ekf,omega,step_length,threshold);disp('************ UKF *************');ri_ukf(ii) = compute_ri(pred_omega_ukf,omega,step_length,threshold);% Plot ground truth and predictionsif PLOT_PREDICTIONset(0, 'currentfigure', ri_figure);clf;title('Predictions for RI');t = 1:length(omega);stairs(t, omega, 'k');xlabel('Samples')ylabel('Omega')set(gca,'YLim',[0,pi]);set(gca,'YTick',0:pi/4:pi);set(gca,'YTickLabel',{'0' 'pi/4','pi/2','3/4pi','pi'});hold onplot(t,pred_omega_ekf,'ro');plot(t,pred_omega_ukf,'bx');legend('True','EKF','UKF')RI(ii) = getframe;endendif (PLOT_PREDICTION)generate_video(strcat('ri_',namestring),RI);endsave(strcat(logpath,'ri_ekf.mat'),'ri_ekf')save(strcat(logpath,'ri_ukf.mat'),'ri_ukf')
elseif exist('ri_ekf.mat','file') && exist('ri_ukf.mat','file')load(strcat(logpath,'ri_ekf.mat'),'ri_ekf')load(strcat(logpath,'ri_ukf.mat'),'ri_ukf')elseerror('No saved curves. Recompute.')end
endn_steps = length(step_profile);
steps_axis = 1:n_steps;
psi_ekf = hist(ri_ekf, steps_axis);
psi_ukf = hist(ri_ukf, steps_axis);if PLOT_PROFILE figure(1)hold offstairs(omega)xlabel('Samples')ylabel('Omega')set(gca,'YLim',[initial_omega-pi/2,initial_omega+pi/2]);set(gca,'YTick',0:pi/4:pi);set(gca,'YTickLabel',{'0' 'pi/4','pi/2','3/4pi','pi'});
endri_figure = figure(2);
title('RI')
bar(steps_axis,[psi_ekf', psi_ukf'])
legend('EKF','UKF')
saveas(ri_figure, strcat(logpath,'ri_figure_',namestring,'.png'), 'png');
3 运行结果
4 结论
本文讨论了估计嵌入噪声的窄带谐波信号的频率问题;特别是基于卡尔曼滤波器的方法,例如扩展卡尔曼滤波器 (EKF) 和无迹卡尔曼滤波器 (UKF)。为了评估算法实现的估计质量,引入了两个标准:性能指数(PI)和鲁棒性指数(RI),以及辅助收敛比。已对记录的真实世界信号和生成的噪声信号进行了测试。剩余详细文章见第3部分。
部分理论引用网络文献,如有侵权请联系博主删除。
5 参考文献
[1] Corbetta S , Dardanelli A , Boniolo I , et al. Frequency estimation of narrow band signals in Gaussian noise via Unscented Kalman Filter[C]// Proceedings of the 49th IEEE Conference on Decision and Control, CDC 2010, December 15-17, 2010, Atlanta, Georgia, USA. IEEE, 2010.
[2] Dash P K , Hasan S , Panigrahi B K . Adaptive complex unscented Kalman filter for frequency estimation of time-varying signals[J]. Iet Science Measurement Technology, 2010, 4(2):93-103.
[3] S. Bittanti and S. Savaresi. “On the Parameterization and Design of an
Extended Kalman Filter Frequency Tracker”. In: IEEE transactions on
automatic control 45.9 (2000), pp. 1718–1724.
[4] B. Boashash. “Estimating and Interpreting the instantaneous frequency of
a signal”. In: Proceedings of the IEEE 80.4 (1992), pp. 540–568.
[5] S. Savaresi et al. “Frequency estimation of narrow band signals in Gaussian
noise via Unscented Kalman Filter”. In: 49th IEEE Conference on Decision
and Control (2010), pp. 2869–2874.
6 Matlab代码实现
【信号处理】基于扩展卡尔曼滤波器和无迹卡尔曼滤波器的窄带信号时变频率估计(Matlab代码实现)相关推荐
- 【FNN分类】基于粒子群结合引力搜索算法优化前向反馈神经网络实现数据分类附matlab代码
1 内容介绍 引力搜索算法(GSA)是一种基于引力定律和质量相互作用的新型启发式优化方法.实践证明,该算法具有较好的全局最优搜索能力,但在最后一次迭代中存在搜索速度较慢的问题.这项工作提出了粒子群优化 ...
- 【情感识别】基于ELM、SOM分类器实现心率变异性信号情感识别附matlab代码
1 简介 -Dimensional affect recognition is a challenging topic and current techniques do not yet provid ...
- 【智能优化算法】基于自适应策略的混合鲸鱼优化算法求解单目标优化问题附matlab代码
1 简介 针对鲸鱼优化算法在函数优化时存在收敛速度慢,易陷入局部最优等问题,提出了一种基于自适应策略的混合鲸鱼优化算法.该算法中先利用蝙蝠算法的局部搜索机制对当前鲸鱼算法最优解进行高斯扰动产生局部新解 ...
- 【无人机】基于蒙特卡洛和控制算法实现四旋翼无人器拾物路径规划附matlab代码
1 内容介绍 四旋翼无人机飞行器(Unmanned Aerial Vehicle, UAV)是一种旋翼式直升机,它具有四个控制输入和六个控制输出,因此四旋翼无人机是一个欠驱动的旋翼直升机.四旋翼无人机 ...
- 【物理应用】基于摩尔库仑准则实现应变软化岩体的围岩-支护相互作用附matlab代码
1 内容介绍 我国是一个多山的国家,随着公路建设逐渐走进山区,山区公路隧道开始出现并逐渐向着更长.更大的方向发展,在隧道设计与施工过程中正确判断隧道围岩的稳定性极其关键.对于岩石介质尤其是软岩或高地应 ...
- 【雷达】基于核聚类实现雷达信号在线分选附matlab代码
1 内容介绍 雷达信号分选是现代雷达侦察设备必须具备的功能‚它是利用测得的雷达信号参数‚将随机交迭的雷达信号分离成独立的雷达信号列‚为最终的雷达信号识别打下牢固的基础.在现代战争中‚雷达侦察接收机所处 ...
- 【生产调度】基于Harmony Search (HSPMS) 和 Shuffled Complex Evolution (SCEPMS) 实现并行机器调度附matlab代码
1 内容介绍 车间调度问题的复杂性使得传统的常规方法已经很难或者无法解决,研究新的解决方法显得越来越重要.近年来,以借鉴自然现象形成的智能优化算法因其良好的性能而得到了广泛的应用.许多研究者将精力集中 ...
- 【回归预测-FNN预测】基于粒子群优化前馈网络实现对婚姻和离婚数据回归预测附matlab代码
1 内容介绍 (婚姻和离婚数据)) Marriage and Divorce Dataset | Kaggle 数据集信息: 此数据包含 31 列 (100x31).前 30 列是特征(输入),即年 ...
- 【通信】基于非相干信号子空间测向算法实现宽带信号的测向附matlab代码
1 简介 基于非相干信号子空间测向算法实现宽带信号的测向 2 完整代码 %[1]宫兵, 徐以涛, 李佳. 改进的非相干信号子空间宽带测向算法[J]. 无线电工程, 2011, 41(3):3.clc ...
最新文章
- 英特尔杀入游戏显卡市场:3000元档位,支持光追和AI超分辨率,挑战AMD英伟达...
- pep 8 规范的一些记录
- 江西理工大学期末试卷c语言,2016年江西理工大学信息工程学院计算机应用技术(加试)之C语言程序设计复试笔试最后押题五套卷...
- CNN tensorflow 人脸识别
- 在html表格中怎么创建下拉列表,在html网页中如何做个下拉列表?下拉列表的方法有哪几种?...
- C++继承机制(三)——多继承、菱形继承、虚继承原理
- 图灵机(Turing Machine)
- 过程定义伪指令proc和宏命令伪指令macro
- 32蜂鸣器天空之城代码_stm32版蜂鸣器播放爱若琉璃
- Eureka-Client 注册服务到 Eureka-Server
- CentOS6.4 安装MongoDB
- echarts 横向柱状图
- 2022年下半年信息系统项目管理师下午真题及答案解析
- 【tools】信息收集-灯塔资产扫描 ARL
- Linux防火墙firewall只允许特定IP访问
- ubuntu ssh Host key verification failed,Host 10.xxx.xxx.xxx not found in /home/user/.ssh/known_hosts
- linux下/proc/sysrq-trigger详解
- 经济师人力资源方向备考信息
- Node.js Buffers缓存对象
- 李奎元:说说那些征信模型(Z计分模型、巴萨利模型和A值模型)