LMS自适应滤波的FPGA实现(一)

LMS自适应滤波的FPGA实现

真的是准备电赛到不知道还要准备什么了 著

简书首篇,可以选择文末点个赞

from百度百科

本文较长,建议使用电脑端+简书目录配置使用

[TOC]

本文目录:
LMS自适应滤波的FPGA实现
原理-最优估计技术
术语/模型定义和基本假设
代价函数
最优维纳估计
实践-维纳-霍夫算法
matlab仿真结果
Widrow-Hoff最小二乘算法
原理推导
参数限定
最后的一些碎碎念
结语
参考文献

原理-最优估计技术

这一部分是建议大家看完后面的在跳回来.

术语/模型定义和基本假设

在立论之前,我们先定义一下相关信号量和系统模型,这次的系统大概是这个样子的:


网上找的,参考参考就行

有几个会反复提及到的参量:

x=自适应系统的输入
y=自适应系统 的输出
d=(自适应系统的)期望响应
e=d-y=估计误差

而且我们在这里还需要对信号的特性进行假设,我们假设信号是满足广义稳态(Wide Sense Stationary)的.并不需要严格平稳或者是各态历经.也就是说信号具有一下特性:
对均值有:
\eta =E{x} = \lim_{N\to \infty} \frac1N \sum_{N=0}^{N-1}x[n]
对方差有:
\sigma^2 = E{(x-n)^2} = \frac1N \sum_{N=0}^{N-1}(x[n]-\eta)^2
对自相关函数:
r[\tau] = E{x[t_1]x[t_2]} = E{x[t+\tau]x[t]} = \lim_{N\to \infty} \frac1N \sum_{N=0}^{N-1}x[n]x[n+\tau]
特别地:
r[0] = E{x[t]x[t]} = E\{ | x[t]|^2 \}

代价函数

这个又是现在机器学习er喜见乐闻的定义了,

我们在这里定义误差函数为: e[n]=d[n]-y[n]
其中d[n]是要估计的随机变量,y[n]是通过自适应滤波计算的估计点

我们在里用最小均方(也称最小二乘法)(也称平方误差代价函数)来定义代价函数:
J= E\{e^2[n]\} = \overline{(d[n]-y[n])^2}

最优维纳估计

这里推导的目的在于如何从理论上得到最佳的h[k] (下称f_k)

假设我们使用FIR滤波器来解决问题,则输出的响应为:
y[n] = \sum_{k=0}^{L-1}f_k x[n-k]
不妨使用向量来表达上式:
y[n] = \vec{x^T}[n]\vec{f} = f^T \vec{x}[n]
所以我们可以更新e[n]:
e[n] = d[n]-y[n] = d[n] - f^T \vec{x}[n]
进着,我们可以求解代价函数:
J = E\{e^2[n]\} = E\{ d[n]-y[n] \}^2 = E\{d[n] - f^T \vec{x}[n]\}^2 \\ = E\{(d[n] - f^T \vec{x}[n])(d[n] - f \vec{x^T}[n])\} \\ =E\{d[n]^2 -2d[n]f^T \vec{x}[n] + \vec{f^T}x[n]x^T[n]\vec{f} \}

在latex写向量是在太麻烦了,下省

大家可以回想一下梯度下降法,后面才会真正介绍,这里想进一步减少代价函数的话,只要对f求偏导就可以了
\nabla = \frac{\partial J}{\partial f^T} = E\{ -2d[n]x[n] +2x[n]x^T[n]f_{opt} \} =0
假设滤波器的权重向量f和信号向量x[n]是不相关的,则有:
E\{ d[n]x[n] \} = E\{ x[n] x^T[n] \}f_{opt}

所以结果就呼之欲出了:
\vec{f_{opt}} = E\{ \vec{x}[n] \vec{x^T}[n] \}^{-1} E\{ d[n]\vec{x}[n] \}
一定要注意这里的x[n]是一个列向量,列向量,列向量
所以其实结果已经非常明显了,下面还是分开讲讲:

  1. E\{ \vec{x}[n] \vec{x^T}[n] \}
    很显然这个就是自相关矩阵,其中的矩阵形式是这样的:
    \begin{bmatrix} {x[n]x[n]} & {x[n]x[n-1]} & \cdots & x[n]x[n-(L-1)] \\ x[n-1]x[n] & x[n-1]x[n-1] & \cdots \\ \vdots & & \ddots &\vdots \\ x[n-(L-1)]x[n] & \cdots & \cdots \end{bmatrix}\quad

=
\begin{bmatrix} {r[0]} & r[1] & \cdots & r[L-1] \\ r[1] & r[0] & \cdots & r[L-2] \\ \vdots & & \ddots &\vdots \\ r[L-1] & r[L-2] & \cdots &r[0]\end{bmatrix}\quad

  1. E\{ d[n]\vec{x}[n] \}
    这里因为d[n]是一个标量,所以这个矩阵就是一个互相关函数的列向量而已

所以我们可以将f改写成:
f_{opt} = \vec{R_{xx}}^{-1}\vec{r_{dx}}

从公式我们可以看到,如果f_{opt}存在的一个前提在于,R_{xx}的逆必须存在,也就是说R_{xx}必须是非奇异矩阵,所以这才是我们前提所假设的广义平稳需要,因为对于广义平稳信号来说,他的R_{xx}就是一个非奇异矩阵,并且存在逆矩阵

回代到代价函数,我们可以得到估计的标准误差,这里不给出过程了(懒)
J_{opt} = r_{dd}[0] -f^T_{opt}r_{dx}

实践-维纳-霍夫算法

也就是上面所说的算法,现在我们假设输入是一个由曼彻斯特编码的信号m[n],幅值B=10,外加两个噪声:

  1. 高斯白噪声5dbm吧 2. 电力线噪声,幅值A=50 频率60Hz

现假设采样频率是电网噪声的4倍,即240Hz,我们用一个二抽头的FIR滤波器来解决这个问题

所以现在的d[n]为:
d[n] = Acos[\pi n/2] +Bm[n] +\sigma^2 n[n]
自适应滤波的输入的基准信号x[n]为:
x[n] = cos[n\pi /2 + \phi]
其中\phi = \pi/6是一个角度偏移量.所以系统的输出是:
y[n] = f_0 cos[n\pi/2 +\phi ] + f_1 cos[(n-1) \pi/2 +\phi ]

所以:
对于自相关函数:
r_{xx}[0] = E\{ (cos[n\pi /2 + \phi] )^2 \} = \frac12
r_{xx}[1] = E\{ cos[n\pi /2 + \phi] sin[n\pi /2 + \phi] \} = 0

对于互相关函数:
r_{dx}[0] = E\{ (Acos[\pi n/2] +Bm[n] +\sigma^2 n[n]) cos[n\pi/2 +\phi ] \} = \frac A2 cos(\phi) = 12.5\sqrt{3}
r_{dx}[1] = E\{ (Acos[\pi n/2] +Bm[n] +\sigma^2 n[n]) sin[n\pi/2 +\phi ] \} = \frac A2 cos(\phi-\pi) = 12.5

所以下矩阵为:
f_{opt} = \vec{R_{xx}}^{-1}\vec{r_{dx}} = \begin{bmatrix} {r_{xx}[0]} & r_{xx}[1] \\ r_{xx}[1] & r_{xx}[0] \end{bmatrix}^{-1} \begin{bmatrix} {r_{dx}[0]}\\r_{dx}[1] \end{bmatrix} \\ = \begin{bmatrix} {2} & 0 \\0 & 2\end{bmatrix}^{-1} \begin{bmatrix} 12.5\sqrt{3}\\ 12.5 \end{bmatrix} \\ = \begin{bmatrix} {2} & 0 \\0 & 2\end{bmatrix} \begin{bmatrix} 12.5\sqrt{3}\\ 12.5 \end{bmatrix} = \begin{bmatrix} 25\sqrt{3}\\ 25 \end{bmatrix}

matlab仿真结果

现在给出matlab仿真结果:


源码可联系作者获取

Widrow-Hoff最小二乘算法

从上面的最优维纳估计我们可以知道,实际上这种方法是理论不可实现的,因为自相关矩阵当系统规模变大的时候后变得极其的庞大和冗余,而且计算时间也极其长,所以我们需要一种方法来得到新的R_{xx}^{-1}

Widrow-Hoff最小二乘(LMS)算法是一种实时近似逼近R_{xx}^{-1}的实用方法,而且在后面的讨论中我们会发现他有较好的性能.而且公式极其对机器学习有基础的同学友好.

原理推导

实际上我们可以放弃对f_{opt}一次性求解,进而变成逐次按梯度逼近,也就是:
f[n+1] = f[n] -\frac{\mu}2\nabla [n]
这条公式相信学过梯度下降的同学都很熟吧...

所以现在我们对误差的估计就变成了对误差方向的估计,而用梯度下降的思想来考虑这个问题的话,我们就需要让误差的均值向每一个f进行求导,即:

\nabla [n] = \begin{bmatrix} \frac{\partial E\{e[n]^2\}}{\partial f_0}& \frac{\partial E\{e[n]^2\}}{\partial f_1} &\cdots &\frac{\partial E\{e[n]^2\}}{\partial f_{L-1}}\end{bmatrix}^T

实际上我们总不可能在FPGA上算误差的均值吧,所以这里要取真的误差值作为估计值:
\hat\nabla [n] = \begin{bmatrix} \frac{\partial e[n]^2}{\partial f_0}& \frac{\partial e[n]^2}{\partial f_1} &\cdots &\frac{\partial e[n]^2}{\partial f_{L-1}}\end{bmatrix}^T = 2e[n]\begin{bmatrix} \frac{\partial e[n]}{\partial f_0}& \frac{\partial e[n]}{\partial f_1} &\cdots &\frac{\partial e[n]}{\partial f_{L-1}}\end{bmatrix}^T

所以实际上:
\hat\nabla [n] = -2e[n]\frac{\partial e[n]}{\partial \vec{f}} = -2e[n]x[n]

回代到最初的起点,得:
f[n+1] = f[n] -\mu e[n]x[n]
请记住,这条是最为重要的公式.

参数限定

这里唯一要注意的参数就是这个每次迭代的\mu,在这里我们不展开,大家学过机器学习的可以迁移思考一下梯度下降的学习率(learning rate)过大或者过小对算法的影响

最后的一些碎碎念

实际上这篇博客我是不太想写的,因为其实这个工作是大二上学期的时候做的了.但是最近看机器学习的时候看到梯度下降的时候想了一下,还是决定写一下.

其实如果大家有修过高等代数或者吴恩达的机器学习的话,实际上你可以看到,前半部分的最优估计技术其实就是正规方程法,后半部分的Widrow-Hoff最小二乘算法就是通用的梯度下降法
再者,如果大家有修过凸优化理论的内点法的话,其实这个就是内点法里面的牛顿法...

结语

这就是我们要用FPGA实现的算法了,其实算法已经写完很久了,但是因为最近电赛的原因就重写一次吧...
但是因为这篇博客的公式实在是太多了,我都不好意思再写FPGA的结构设计了,就留待明天更新吧.

参考文献

高斯白噪声的产生
latex画矩阵
LMS算法自适应滤波器
自适应滤波器及LMS自适应算法的理解
通信原理教程(第三版) --樊昌信著

数字信号处理的FPGA实现

想我尽早更新的方法之一

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,302评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,232评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,337评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,977评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,920评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,194评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,638评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,319评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,455评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,379评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,426评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,106评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,696评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,786评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,996评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,467评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,043评论 2 341