用户登录
用户注册

分享至

ad软件滤波算法C ad滤波算法

  • 作者: 簡單_噺
  • 来源: 51数据库
  • 2020-04-15

ad软件滤波算法C

自适应滤波器算法h(n+1)=h(n)+2μx(n)e(n)用C语言完成 其中函数问题

我现在也在研究kalman,这是最新发现的一个程序,我做的标注,有问题一块研究function [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)% Kalman filter.% [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)%% INPUTS:% y(:,t) - the observation at time t 在时间t的观测% A - the system matrix A 系统矩阵 % C - the observation matrix C 观测矩阵% Q - the system covariance Q 系统协方差% R - the observation covariance R 观测协方差 % init_x - the initial state (column) vector init_x 初始状态(列)向量% init_V - the initial state covariance init_V 初始状态协方差%% OPTIONAL INPUTS (string/value pairs [default in brackets]) 选择性输入(字符串/值 对【默认在括号中】)% 'model' - model(t)=m means use params from model m at time t [ones(1,T) ] 在时间t,m意味着利用 m模型参数 [ones(1,T) ]% % In this case, all the above matrices take an additional final% dimension, 在这种情况下,上述矩阵采用附加的维数% i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m). 例如% However, init_x and init_V are independent of model(1). % init_x and init_V相对于模型1是独立的% 'u' - u(:,t) the control signal at time t [ [] ]% 在时间t的控制信号% 'B' - B(:,:,m) the input regression matrix for model m% 对于模型m的,输入回归矩阵% OUTPUTS (where X is the hidden state being estimated) 输出(其中X是被估计的隐藏状态)% x(:,t) = E[X(:,t) | y(:,1:t)]% V(:,:,t) = Cov[X(:,t) | y(:,1:t)]% VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2% loglik = sum{t=1}^T log P(y(:,t))%% If an input signal is specified, we also condition on it: 如果一个输入信号是特定的,我们的条件% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]% If a model sequence is specified, we also condition on it:% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)][os T] = size(y);ss = size(A,1); % size of state space% set default paramsmodel = ones(1,T);u = [];B = [];ndx = [];args = varargin;nargs = length(args);for i=1:2:nargs switch args{i} case 'model', model = args{i+1}; case 'u', u = args{i+1}; case 'B', B = args{i+1}; case 'ndx', ndx = args{i+1}; otherwise, error(['unrecognized argument ' args{i}]) endendx = zeros(ss, T);V = zeros(ss, ss, T);VV = zeros(ss, ss, T);loglik = 0;for t=1:T m = model(t); if t==1 %prevx = init_x(:,m); %prevV = init_V(:,:,m); prevx = init_x; prevV = init_V; initial = 1; else prevx = x(:,t-1); prevV = V(:,:,t-1); initial = 0; end if isempty(u) [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ... kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial); else if isempty(ndx) [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ... kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ... 'initial', initial, 'u', u(:,t), 'B', B(:,:,m)); else i = ndx{t}; % copy over all elements; only some will get updated x(:,t) = prevx; prevP = inv(prevV); prevPsmall = prevP(i,i); prevVsmall = inv(prevPsmall); [x(i,t), smallV, LL, VV(i,i,t)] = ... kalman_update(A(i,i,m), C(:,i,m), Q(i,i,m), R(:,:,m), y(:,t), prevx(i), prevVsmall, ... 'initial', initial, 'u', u(:,t), 'B', B(i,:,m)); smallP = inv(smallV); prevP(i,i) = smallP; V(:,:,t) = inv(prevP); end end loglik = loglik + LL;end

在matlab中滤波

交直流电抗器,功率电阻器,电力滤波器 专业,全面的产品和服务 021-51001653 摘要:传统的数字滤波器的设计过程复杂,计算工作量大,滤波特性调整困难,影响了它的应用。

本文介绍了一种利用MATLAB信号处理工具箱(Signal Processing Toolbox)快速有效的设计由软件组成的常规数字滤波器的设计方法。

给出了使用MATLAB语言进行程序设计和利用信号处理工具箱的FDATool工具进行界面设计的详细步骤。

利用MATLAB设计滤波器,可以随时对比设计要求和滤波器特性调整参数,直观简便,极大的减轻了工作量,有利于滤波器设计的最优化。

本文还介绍了如何利用MATLAB环境下的仿真软件Simulink对所设计的滤波器进行模拟仿真。

关键词:数字滤波器 MATLAB FIR IIR 引言:在电力系统微机保护和二次控制中,很多信号的处理与分析都是基于对正弦基波和某些整次谐波的分析,而系统电压电流信号(尤其是故障瞬变过程)中混有各种复杂成分,所以滤波器一直是电力系统二次装置的关键部件【1】。

目前微机保护和二次信号处理软件主要采用数字滤波器。

传统的数字滤波器设计使用繁琐的公式计算,改变参数后需要重新计算,在设计滤波器尤其是高阶滤波器时工作量很大。

利用MATLAB信号处理工具箱(Signal Processing Toolbox)可以快速有效的实现数字滤波器的设计与仿真。

1 数字滤波器及传统设计方法 数字滤波器可以理解为是一个计算程序或算法,将代表输入信号的数字时间序列转化为代表输出信号的数字时间序列,并在转化过程中,使信号按预定的形式变化。

数字滤波器有多种分类,根据数字滤波器冲激响应的时域特征,可将数字滤波器分为两种,即无限长冲激响应(IIR)滤波器和有限长冲激响应(FIR)滤波器。

IIR数字滤波器具有无限宽的冲激响应,与模拟滤波器相匹配。

所以IIR滤波器的设计可以采取在模拟滤波器设计的基础上进一步变换的方法。

FIR数字滤波器的单位脉冲响应是有限长序列。

它的设计问题实质上是确定能满足所要求的转移序列或脉冲响应的常数问题,设计方法主要有窗函数法、频率采样法和等波纹最佳逼近法等。

在对滤波器实际设计时,整个过程的运算量是很大的。

例如利用窗函数法【2】设计M阶FIR低通滤波器时,首先要根据(1)式计算出理想低通滤波器的单位冲激响应序列,然后根据(2)式计算出M个滤波器系数。

当滤波器阶数比较高时,计算量比较大,设计过程中改变参数或滤波器类型时都要重新计算。

(1) (2) 设计完成后对已设计的滤波器的频率响应要进行校核,要得到幅频相频响应特性,运算量也是很大的。

我们平时所要设计的数字滤波器,阶数和类型并不一定是完全给定的,很多时候都是要根据设计要求和滤波效果不断的调整,以达到设计的最优化。

在这种情况下,滤波器的设计就要进行大量复杂的运算,单纯的靠公式计算和编制简单的程序很难在短时间内完成设计。

利用MATLAB强大的计算功能进行计算机辅助设计,可以快速有效的设计数字滤波器,大大的简化了计算量,直观简便。

2数字滤波器的MATLAB设计2.1 FDATool界面设计2.1.1 FDATool的介绍 FDATool(Filter Design & Analysis Tool)是MATLAB信号处理工具箱里专用的滤波器设计分析工具,MATLAB6.0以上的版本还专门增加了滤波器设计工具箱(Filter Design Toolbox)。

FDATool可以设计几乎所有的基本的常规滤波器,包括FIR和IIR的各种设计方法。

它操作简单,方便灵活。

FDATool界面总共分两大部分,一部分是Design Filter,在界面的下半部,用来设置滤波器的设计参数,另一部分则是特性区,在界面的上半部分,用来显示滤波器的各种特性。

Design Filter部分主要分为:Filter Type(滤波器类型)选项,包括Lowpass(低通)、Highpass(高通)、Bandpass(带通)、Bandstop(带阻)和特殊的FIR滤波器。

Design Method(设计方法)选项,包括IIR滤波器的Butterworth(巴特沃思)法、Chebyshev Type I(切比雪夫I型)法、 Chebyshev Type II(切比雪夫II型) 法、Elliptic(椭圆滤波器)法和FIR滤波器的Equiripple法、Least-Squares(最小乘方)法、Window(窗函数)法。

Filter Order(滤波器阶数)选项,定义滤波器的阶数,包括Specify Order(指定阶数)和Minimum Order(最小阶数)。

在Specify Order中填入所要设计的滤波器的阶数(N阶滤波器,Specify Order=N-1),如果选择Minimum Order则MATLAB根据所选择的滤波器类型自动使用最小阶数。

Frenquency Specifications选项,可以详细定义频带的各参数,包括采样频率Fs和频带的截止频率。

它的具体选项由Filter Type选项和Design Method选项决定,例如Bandpass(带通)滤波器需要定义Fstop1(下阻带截止频率)、Fpass1(通带下限截止频率)、Fpass2(通带上限截止频率)、Fstop2(上阻带截止频率),而Lowpass(低通)滤波器只需要定义Fstop1、Fpass1。

采用窗函数设计滤波器时,由于过渡带是由窗函数的类型和阶数所决定的,所以只需要定义通带截止频率,而不必定义阻带参数。

Magnitude Specifications选项,可以定义幅值衰减的情况。

例如设计带通滤...

【输入滤波电容计算】有没有被滤波的频率和滤波电容之间的对应公式...

卡尔曼滤波器(Kalman Filter)是一个最优化自回归数据处理算法(optimal recursive data processing algorithm)。

对于解决很大部分的问题,他是最优,效率最高甚至是最有用的。

他的广泛应用已经超过30年,包括机器人导航,控制,传感器数据融合甚至在军事方面的雷达系统以及导弹追踪等等。

近年来更被应用于计算机图像处理,例如头脸识别,图像分割,图像边缘检测等等。

最佳线性滤波理论起源于40年代美国科学家Wiener和前苏联科学家Kолмогоров等人的研究工作,后人统称为维纳滤波理论。

从理论上说,维纳滤波的最大缺点是必须用到无限过去的数据,不适用于实时处理。

为了克服这一缺点,60年代Kalman把状态空间模型引入滤波理论,并导出了一套递推估计算法,后人称之为卡尔曼滤波理论。

卡尔曼滤波是以最小均方误差为估计的最佳准则,来寻求一套递推估计的算法,其基本思想是:采用信号与噪声的状态空间模型,利用前一时刻地估计值和现时刻的观测值来更新对状态变量的估计,求出现时刻的估计值。

它适合于实时处理和计算机运算。

现设线性时变系统的离散状态防城和观测方程为:X(k) = F(k,k-1)·X(k-1)+T(k,k-1)·U(k-1)Y(k) = H(k)·X(k)+N(k)其中X(k)和Y(k)分别是k时刻的状态矢量和观测矢量F(k,k-1)为状态转移矩阵U(k)为k时刻动态噪声T(k,k-1)为系统控制矩阵H(k)为k时刻观测矩阵N(k)为k时刻观测噪声则卡尔曼滤波的算法流程为:预估计X(k)^= F(k,k-1)·X(k-1) 计算预估计协方差矩阵C(k)^=F(k,k-1)*C(k)*F(k,k-1)'+T(k,k-1)*Q(k)*T(k,k-1)'Q(k) = U(k)*U(k)' 计算卡尔曼增益矩阵K(k) = C(k)^*H(k)'*[H(k)*C(k)^*H(k)'+R(k)]^(-1)R(k) = N(k)*N(k)' 更新估计X(k)~=X(k)^+K(k)*[Y(k)-H(k)*X(k)^] 计算更新后估计协防差矩阵C(k)~ = [I-K(k)*H(k)]*C(k)^*[I-K(k)*H(k)]'+K(k)*R(k)*K(k)' X(k+1) = X(k)~C(k+1) = C(k)~

转载请注明出处51数据库 » ad软件滤波算法C

软件
前端设计
程序设计
Java相关