平均算法

 

1、调和平均数:Hn=n/(1/a1+1/a2+...+1/an)

2、几何平均数:Gn=(a1a2...an)^(1/n)

3、算术平均数:An=(a1+a2+...+an)/n 

4、平方平均数:Qn=√ (a1^2+a2^2+...+an^2)/n 

这四种平均数满足Hn≤Gn≤An≤Qn 的式子即为均值不等式


【MA】:求简单移动平均
用法:MA(X,N),求X的N日移动平均值。
算法:(X1+X2+X3+...+Xn)/N
例如:MA(CLOSE,10) 表示求10日均价。特例:MA(X,0)表示X所有数据的平均。

【EMA】:求指数平滑移动平均
用法:EMA(X,N),求X的N日指数平滑移动平均。
算法:若Y=EMA(X,N),则Y=[2*X+(N-1)*Y']/(N+1),其中Y'表示上一周期Y值。
例如:EMA(CLOSE,30) 表示求30日指数平滑均价。

【SMA】:求移动平均
用法:SMA(X,N,M),求X的N日移动平均,M为权重。
算法:若Y=SMA(X,N,M),则 Y=[M*X+(N-M)*Y']/N,其中Y'表示上一周期Y值,N必须大于M。
例如:SMA(CLOSE,30,1) 表示求30日移动平均价。

【DMA】:求动态移动平均
用法:DMA(X,A),求X的A日动态移动平均。
算法:若Y=DMA(X,A),则 Y=A*X+(1-A)*Y',其中Y'表示上一周期Y值,A必须小于1。
例如:DMA(CLOSE,VOL/CAPITAL) 表示求以换手率作平滑因子的平均价。

【TMA(X,N,M)】:递归移动平均
用法:tma(x,n,m),求x的递归移动平均,n、m为权重.都必须小于1,n+m==1。

算法:若y=tma(x,n,m) 则 y=(n*y'+m*x), 其中y'表示上一周期y值。初值为m*x。
例如:tma(close,0.9,0.1)表示求x的递归移动平均。

【WMA(X,A)】:加权移动平均
用法:wma(x,n),求x的加权移动平均。

算法:若y=wma(x,a),则y=(n*x0+(n-1)*x1+(n- 2)*x2)+...+1*xn)/(n+(n-1)+(n-2)+...+1),x0表示本周期值,x1表示上一周期值。



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
滑动平均算法(Moving Average Algorithm)是一种用于平滑数据的滤波算法。在Verilog中实现滑动平均算法可以通过以下步骤: 1. 定义输入和输出信号:根据你的需求,定义一个输入信号来接收需要平滑的数据,以及一个输出信号来输出平均后的数据。 ```verilog module moving_average ( input wire clk, input wire reset, input wire [DATA_WIDTH-1:0] data_in, output reg [DATA_WIDTH-1:0] data_out ); ``` 2. 定义滑动窗口:滑动平均算法需要一个滑动窗口来存储一定数量的数据。可以使用一个FIFO(First In First Out)队列作为滑动窗口。 ```verilog reg [DATA_WIDTH-1:0] window [WINDOW_SIZE-1:0]; reg [WINDOW_SIZE-1:0] head; reg [WINDOW_SIZE-1:0] tail; ``` 3. 实现滑动平均逻辑:在每个时钟周期内,将新的输入数据放入滑动窗口,并计算窗口内数据的平均值。 ```verilog always @(posedge clk or posedge reset) begin if (reset) begin // 复位滑动窗口和计数器 head <= 0; tail <= 0; data_out <= 0; end else begin // 将新的数据放入窗口 window[head] <= data_in; head <= head + 1; if (head == WINDOW_SIZE) begin head <= 0; end // 计算窗口内数据的平均值 reg [DATA_WIDTH-1:0] sum = 0; integer i; for (i = 0; i < WINDOW_SIZE; i = i + 1) begin sum <= sum + window[i]; end data_out <= sum / WINDOW_SIZE; end end ``` 4. 定义参数:根据需要,定义滑动窗口的大小和数据宽度。 ```verilog parameter DATA_WIDTH = 8; // 数据宽度 parameter WINDOW_SIZE = 4; // 滑动窗口大小 ``` 这是一个简单的Verilog代码示例,实现了滑动平均算法。你可以根据具体需求进行修改和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值