Android-vold源码分析之格式化SD卡(10)

作者:gzshun. 原创作品,转载请标明出处!
来源:http://blog.csdn.net/gzshun


本文开始讨论sd卡的格式化功能,平时使用windows操作系统,也经常格式化磁盘。涉及到的
操作有这几步:
1.将分区信息写到硬盘的第一个设备节点的MBR结构中的分区表;
2.格式化分区到指定的文件系统类型。

MBR中存放分区表的位置在446-509,占用了64字节,MBR结构只支持4个主分区,所以

有4个16字节的区域,先简要说明一下MBR的分区表的结构:


从这个表格可以看出,相对于446-509的分区表区域,每个主分区的第5个字节存放的是文件
系统标志位,用来识别什么分区,用fdisk工具查看一下,有如下文件系统对应的十六进制标志:


若需要读取这些文件系统标志,只需读取MBR的450个位置,占用一个字节大小。

扯得太远了,回到正题,本文是要分析Android格式化sd卡的功能,在格式化部分,涉及到
了系统的一些函数,与vold无关࿰

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
以下是一个基于Matlab实现Vold-Kalman滤波器的代码示例: ``` function [xhat,Phat] = vold_kalman(y,u,x0,P0,Q,R,dt) % Vold-Kalman滤波器 % 输入: % y - 观测数据 % u - 控制数据 % x0 - 初始状态 % P0 - 初始协方差矩阵 % Q - 过程噪声协方差矩阵 % R - 观测噪声协方差矩阵 % dt - 时间步长 % 输出: % xhat - 状态估计值 % Phat - 协方差估计矩阵 % 系统模型 f = @(x, u) [x(1) + u(1)*cos(x(3))*dt; x(2) + u(1)*sin(x(3))*dt; x(3) + u(2)*dt]; h = @(x) [atan2(x(2),x(1)); sqrt(x(1)^2 + x(2)^2)]; % 初始化滤波器 xhat = x0; Phat = P0; % 迭代 for i = 1:length(y) % 预测 uhat = u(:,i); [xhat, Fx, Fu, Q] = ekf_predict(f, xhat, uhat, Phat, Q, dt); % 更新 yhat = y(:,i); [xhat, Phat, H, R] = ekf_update(h, xhat, yhat, Phat, R); % 存储结果 X(:,i) = xhat; P_all(:,:,i) = Phat; end end function [xhat,Fx,Fu,Q] = ekf_predict(f,x,u,P,Q,dt) % 扩展卡尔曼滤波器预测 % 输入: % f - 状态方程 % x - 状态估计值 % u - 控制输入 % P - 协方差估计矩阵 % Q - 过程噪声协方差矩阵 % dt - 时间步长 % 输出: % xhat - 预测状态估计值 % Fx - 状态转移矩阵 % Fu - 控制输入矩阵 % Q - 更新后的过程噪声协方差矩阵 % 计算状态转移矩阵和控制输入矩阵 [Fx,Fu] = jacobian(f,x,u); % 预测状态估计值和协方差矩阵 xhat = f(x,u); P = Fx*P*Fx' + Fu*Q*Fu'; % 更新过程噪声协方差矩阵 Q = diag([0.01,0.01,0.01]); % TODO: 根据实际问题调整 end function [xhat,P,H,R] = ekf_update(h,x,y,P,R) % 扩展卡尔曼滤波器更新 % 输入: % h - 观测方程 % x - 状态估计值 % y - 观测值 % P - 协方差估计矩阵 % R - 观测噪声协方差矩阵 % 输出: % xhat - 更新后的状态估计值 % P - 更新后的协方差估计矩阵 % H - 观测矩阵 % R - 更新后的观测噪声协方差矩阵 % 计算观测矩阵 H = jacobian(h,x); % 计算观测噪声协方差矩阵 R = diag([0.1,0.1]); % TODO: 根据实际问题调整 % 计算卡尔曼增益 K = P*H'/(H*P*H' + R); % 更新状态估计值和协方差矩阵 xhat = x + K*(y - h(x)); P = (eye(size(P)) - K*H)*P; end function [F,J] = jacobian(f,x,u) % 计算函数f(x,u)关于x和u的雅可比矩阵 % 输入: % f - 目标函数 % x - 自变量x % u - 自变量u % 输出: % F - 状态转移矩阵 % J - 控制输入矩阵 % 计算状态转移矩阵 n = length(x); Fx = zeros(n,n); for i = 1:n Fx(:,i) = gradient(f(x,u),x(i)); end F = eye(n) + Fx; % 计算控制输入矩阵 if nargin > 2 m = length(u); Fu = zeros(n,m); for i = 1:m Fu(:,i) = gradient(f(x,u),u(i)); end J = Fu; end end ``` 这个代码示例中实现了Vold-Kalman滤波器的预测和更新步骤,同时也使用了扩展卡尔曼滤波器(EKF)来处理非线性系统。需要根据具体问题调整系统模型和协方差矩阵,以获得更好的滤波效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值