实验室师生享有使用服务器资源的权力,同时具有维护设备安全与正常运行的义务。
若设备出现问题,请先思考我能帮助做些什么,谢谢!
实验室师生享有使用服务器资源的权力,同时具有维护设备安全与正常运行的义务。
若设备出现问题,请先思考我能帮助做些什么,谢谢!
在浙江大学信号所的服务器上,采用JupyterHub
搭建了供同学、老师们共享使用的开发网站,可以进行程序开发、文档撰写等工作。
该网站的域名为:https://hub.fwzju.com,需要在浙江大学校园网环境下访问。
JupyterHub brings the power of notebooks to groups of users. It gives users access to computational environments and resources without burdening the users with installation and maintenance tasks. Users - including students, researchers, and data scientists - can get their work done in their own workspaces on shared resources which can be managed efficiently by system administrators.
JupyterHub runs in the cloud or on your own hardware, and makes it possible to serve a pre-configured data science environment to any user in the world. It is customizable and scalable, and is suitable for small and large teams, academic courses, and large-scale infrastructure.
该网站主要采用Python3
编程语言,另有gcc
, gfortran
等,可根据需求进行扩充。
具体的使用方法参见https://jupyter.org中的相关说明文档。
需要使用的同学、老师请发送邮件至< wfeng@zju.edu.cn>申请账号,请包含如下信息:
1 | 姓名:XX |
如果需要搭建新的开发环境,请发送邮件至 wfeng@zju.edu.cn 对需求进行说明,在上述信息基础上补充如下信息:
1 | 开发环境关键词: |
版本管理工具Git及相关网站等用法简单教程,默认采用Git bash for Windows
,补充说明包括TortoiseGit, SourceTree
等可视化工具的用法。
git --help
,更多帮助:git help tutorial
git init
TortoiseGit
: 目录空白处右击选择Git create repo here
git add [filename or directory]
git mv [src] [dst]
git rm [filename]
git commit
git log
TortoiseGit
: 目录空白处右击TortoiseGit > Show log
TortoiseGit
: 目录空白处右击TortoiseGit > Show Diff with previous version
通过Git GUI
创建SSH key
,用于与服务器端加密通信,可设置密码
复制public key
中的内容,添加到Github的相应设置中
生成的密钥文件保存在User/[name]/.ssh/
文件夹下,id_rsa
为私钥用于校验,id_rsa.pub
为公钥用于服务端匹配
验证与GitHub的加密通信:ssh -T git@github.com
还可以通过ssh-keygen
命令或者PuTTYgen
进行密钥配置,原理大致相同。
remote_repo
,如git@github.com:[account]/[repo].git
git clone remote_repo
git remote add remote_repo
git push
git fetch
git pull
(存在丢失本地修改内容的可能)git pull
与git fetch
的区别,参考:https://blog.csdn.net/weixin_41975655/article/details/82887273更新到Win10 1809后部分程序字体出现显示错误现象,如AIDA64中中文字符显示:
错误的原因在于这些程序并未采用Unicode编码,而Win10 1809以UTF-8格式显示这些字符,结果出错。该bug暂时还未修复,可以通过设置让中文显示正常。
在 设置 - 时间和语言 - 语言 - 管理语言设置 中:
非 Unicode 程序的语言 设置有个 Beta版的选项:
勾选了该选项后,采用非Unicode的程序会出现字符显示错误的问题,bug来源于此。
取消该选项并将区域设置为中文(简体,中国)后,采用中文编码的程序恢复正常显示。
随着互联网的发展,搭建网站的技术门槛和使用成本都急剧降低。有如下几个痛点得到极大缓解:
下面将讲解免费托管方式下的网站开发所使用的工具和开发流程。
在阿里云上以合适的价格购买喜欢的域名,和淘宝没区别。
域名解析设置中注意区分记录类型,如类型A常用于将域名指向自建服务器的IP地址,类型CNAME则是将域名转向另一个域名。本文采用CNAME记录类型。
首先安装Git和Node.js开发工具,Windows平台下载安装即可,Linux平台使用yum、apt等包管理工具安装或者下载源码编译安装。
其次安装Hexo,命令为:1
npm install hexo-cli -g
安装完成后初始化网站编译环境:1
2
3hexo init blog
cd blog
npm install
此时编译环境以及搭建完成,可以开启本地服务以查看网站效果:1
2npm install hexo-server
hexo server
然后开始进行网站内容的创作。发表新内容的命令为:1
hexo new [layout] <title>
[layout]
值内容所在的页面,采用默认页面则可以省略。<title>
为新建内容的标题,执行完该命令后在source
目录里会生成<title>.md
的文档。
最后,通过Markdown编辑器如Typora对生成的文档进行编辑,完成后执行如下命令生成静态网页:1
hexo generate
网站的源文件可由GitHub的仓库进行托管,将修改并完成编译的网页文件推送至GitHub相应的仓库中。流程大致如下:
修改网站编译环境根目录下的_config.yml
文件中的deploy
参数:
1 | deploy: |
将生成的静态网站文件部署到GitHub:
1 | hexo deploy |
创建netlify账号并关联GitHub账户,按照网站指引添加网站内容,选择网站对应的仓库,完成后发布网站。
需要注意的是,如需使用自己的域名,不仅要在netlify中进行域名的填写,还要在阿里云中对相应的域名进行解析设置。设置方式为采用CNAME类型将自己的域名指向netlify所提供的二级域名。
开发免费托管的静态网站所使用到的工具较多,操作流程略微有些繁琐。不过开发技术门槛并不高,基本上按照这些工具的官方说明文档进行操作即可。过程中所使用到的命令都很简单,甚至没有编程基础也可以操作,唯一需要的是耐心。
采用这种方式部署网站的好处是能够轻松实现网站的迁移,变更托管平台或者域名都不会对网站内容造成影响,比采用WordPress搭建的网站容易很多。
网站搭建好了即可将重心放到丰富内容和美化网站上,慢慢折腾吧^_^
冯玮(wfeng@zju.edu.cn)
定义常用的数学符号含义,以及常用系统的关系式。
标量符号 | 含义 |
---|---|
$a$ | 幅度 |
$b, d, o, q, u, x, y$ | 通用 |
$e$ | 指数 |
$g$ | 增益 |
$l$ | 长度 |
$h$ | 高度 |
$t$ | 时间 |
$p$ | 概率 |
$n$ | 离散时间序列 |
$f$ | 频率 |
$\omega$ | 角频率 |
$r$ | 距离 |
$s$ | 符号 |
$v$ | 运动速度 |
$w$ | 权系数 |
$z$ | 深度 |
$c$ | 声速 |
$\theta$ | 到达角 |
$m$ | 模号 |
$i, j$ | 序号 |
$k$ | 载频序号 |
$\mu$ | 均值 |
$\sigma^2$ | 方差 |
$h(t)$ | 信道冲激响应 |
$\delta (t)$ | 脉冲信号 |
$H(\omega)$ | 信道传递函数 |
${A_m}\left( {r,z} \right)$ | 在距离$r$深度$z$处第$m$号模函数的幅度 |
${\Psi _m}(z)$ | 随深度$z$变化的第$m$号模函数 |
$B$ | 带宽 |
$L$ | 似然函数,或序列长度,或片段个数 |
$W$ | 加权系数 |
$N$ | 数量,或阵元个数 |
$M$ | 数量,或模的个数 |
$\Omega$ | 频点个数 |
$J$ | 目标函数 |
$x (t)$ | 发射信号 |
$y(t)$ | 接收信号 |
$n(t)$或$v(t)$ | 噪声信号 |
$\tau$ | 时延 |
$\rho$ | 密度 |
$\alpha$ | 衰减系数 |
$\eta$ | 相关系数 |
$\mathcal{N} \left( \mu,\sigma^2 \right)$ | 均值$\mu$为方差为$\sigma^2$的高斯分布 |
$\mathcal{CN} \left( 0,\sigma^2 \right)$ | 零均值,方差为$\sigma^2$的复高斯分布 |
$\vec x (r,z)$ | $x$的位置为$(r ,z)$ |
矢量符号 | 含义 |
---|---|
$\bf{x}$ | 小写黑体字母表示向量 |
$\bf{X}$ | 大写黑体字母表示矩阵 |
$\bf{\Sigma}$ | 协方差矩阵 |
$\mathbf{H}$ | Channel mixing matrix |
$\bf{s}$ | 发送的符号向量 |
$\bf{f}$ | 滤波器系数向量 |
运算符 | 含义 |
---|---|
${( \cdot )^T}$ | 转置 |
${( \cdot )^*}$ | 共轭 |
${( \cdot )^H}$ | 共轭转置 |
$*$ | 卷积 |
$E [\cdot]$ | 求期望 |
$\widetilde{\bf a}$ | 归一化 |
$\hat{a}$ | $a$的估计 |
$\text{tr} ({\bf A})$ | 矩阵${\bf A}$的迹 |
$({\bf A})^\dagger $ | 矩阵${\bf A}$的伪逆 |
$\text{Cov} (X, Y)$ | 求两个随机变量的协方差 |
$\nabla$ | 拉普拉斯算子 |
Time: $y(t) = h(t) * x(t) + v(t)$
Discrete Time: $y_n = \sum_{i=0}^{N-1} h_i x_{n-i} + v_n$
Vector form: $\mathbf{y}_k = \mathbf{H} \mathbf{x}_k + \mathbf{v}_k$
Frequency: $Y=HX+V$
Single frequency: $Y_k=H_k X_k+V_k$
冯玮(wfeng@zju.edu.cn)
一种建立在稀疏特性基础上的新型的采样理论。
石光明等综述了CS理论框架及关键技术问题,并着重介绍了信号稀疏变换、观测矩阵设计和重构算法三个方面的最新进展, 评述了其中的公开问题, 对研究中现存的难点问题进行了探讨, 最后介绍了 CS 理论的应用领域 [1]。
Candes[2],Romberg,Tao[3]和Donoho[4]等人构造了具体的算法。
可压缩信号向量${\bf x}_{M \times 1}$和压缩后信号向量${\mathbf y}_{N \times 1}$具有如下线性关系
$$
\bf{y} = \bf{A} \bf{x},
$$
其中$\bf{A}=\bf{\Psi} \bf{\Phi}$为字典矩阵,包含感知矩阵${\bf \Psi}_{M \times N}$和表示矩阵${\bf\Phi}_{N \times N}$两部分组成,并且$M < N$,${\mathbf y}$实现了对${\mathbf x}$的稀疏表示。若$\bf{A}$满足约束等距条件,则可由观测信号${\mathbf y}$重构源信号${\mathbf x}$。
如何设计感知矩阵${\bf \Psi}$
求解稀疏矩阵方程,重构源信号,重构算法可分为三大类[1]:
贪婪追踪算法:匹配追踪(Matching Pursuit, MP)算法,收敛速度快,不是全局最优解。改进算法:正交匹配追踪(OMP)。
凸松弛法:基追踪(Basis Pursuit, BP)算法,具有全局最优解,计算复杂度高。内点法、梯度投影法。
组合算法。
感知矩阵与稀疏变换基的不相干特性
感知矩阵列之间的相干性[5]
声纳[6]与雷达
图像采集
冯玮(wfeng@zju.edu.cn)
由阵列信号做波束形成处理,可以估计信道的到达角度(direction-of-arrival, DOA)。
采用压缩感知方法(compressive sensing, CS)与波束形成相结合,目的在于提高对DOA的分辨能力。压缩感知方法利用的是信号自身的稀疏特性,能够使用少量基本信号的线性组合表示一目标信号,以低于奈奎斯特采样率对信号进行采样。然后通过解凸优化问题从这些较少的采样中恢复或重构原始信号。
压缩感知波束形成方法相比传统方法,具有更高的DOA分辨力。但是该方法的性能还与许多因素相关,比如接收信号的相关性、单个片段或者多个片段信号、接收阵的结构、阵元的间距等。
可压缩信号向量${\bf x}_{M \times 1}$和压缩后信号向量${\mathbf y}_{N \times 1}$具有如下线性关系
$$
\bf{y} = \bf{A} \bf{x},
$$
其中$\bf{A}=\bf{\Psi} \bf{\Phi}$为字典矩阵,包含感知矩阵${\bf \Psi}_{M \times N}$和表示矩阵${\bf\Phi}_{N \times N}$两部分组成,并且$M < N$,${\mathbf y}$实现了对${\mathbf x}$的稀疏表示。若$\bf{A}$满足约束等距条件,则可由${\mathbf y}$重构${\mathbf x}$。
Xenaki et al. 在压缩感知的框架下,详细地探讨了DOA估计问题 [1]。文中指出应用压缩感知方法求解欠定问题时依赖两个条件,一是需要精确掌握信号的稀疏性,二是感知基与表示基要足够不相关。其次,该文介绍了压缩感知和凸优化的基本原理,采用 cvx 工具包计算优化目标函数。
Gerstoft et al.研究了针对针对多个测量数据的压缩感知波束形成方法,分别采用了LASSO(least absolute shrinkage and selection operator)[2]和稀疏贝叶斯学习方法(sparse Bayesian learning, SBL)[4]进行DOA估计。针对LASSO方法提出正则化参数$\mu$的选择方式。
Xenaki et al. 将DOA估计常用的方法进行了对比,包括CBF, MVDR, MUSIC和CS方法 [1]。
Xenaki et al. 探讨了压缩感知波束形成方法中存在的一些问题 [1]。首先是基失配,例如信号的实际DOA不在DOA感知基的离散点上,那么与DOA稀疏性假设存在矛盾,估计性能会显著下降。其次,感知矩阵的列之间要保证足够的不相关性,通过计算列之间的相关系数或者约束等距性来进行评估。文中评估了角度估计偏差、角度分辨力与列相关性的关联性。最后,该文研究了稀疏性与噪声水平之间的关系,提出了对优化函数进行迭代对角线加载的方式来降噪,并与其他DOA估计方法进行了性能对比。
Xenaki et al. 采用DOA连续的表达形式,引入原子范数来构建优化函数,用于克服基失配问题[3]。
首先测试下当前Hexo对Math的支持情况:
$$ \begin{eqnarray} \nabla\cdot\vec{E} &=& \frac{\rho}{\epsilon_0} \ \nabla\cdot\vec{B} &=& 0 \ \nabla\times\vec{E} &=& -\frac{\partial B}{\partial t} \ \nabla\times\vec{B} &=& \mu_0\left(\vec{J}+\epsilon_0\frac{\partial E}{\partial t} \right) \end{eqnarray} $$
$ npm install hexo-renderer-mathjax --save
修改文件_config.yml
,添加内容(貌似不加也行):
plugins:
- hexo-renderer-mathjax
原来的CDN已不再使用,所以需要修改文件\node_modules\hexo-renderer-mathjax\mathjax.html
这部分的注入代码。新的通过连接CDN加载MathJax的js代码为:1
2
3<script type="text/javascript" async
src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
</script>
添加MathJax后写几个公式发现渲染出了很多问题,原因是Hexo默认先使用hexo-renderer-marked引擎渲染MarkDown,然后再交给MathJax渲染。hexo-renderer-marked会把一些特殊的markdown符号转换为相应的html标签,比如在markdown语法中,下划线_
代表斜体,会被转化为< em>标签,\\
也会被转义成一个\
。而类Latex格式书写的数学公式下划线_
表示角标,\\
表示公式换行,有特殊的含义,所以MathJax引擎在渲染数学公式的时候就会出错。
解决方法有人提出更换Hexo的MarkDown渲染引擎,用hexo-renderer-kramed 替换默认的hexo-renderer-marked引擎,但我看了下hexo-renderer-kramed的文档说明,如果用这个引擎的话,要改变我的MarkDown书写习惯,还是不用了,并且换了这个引擎还是没有完全解决问题。
最终解决方法是参考一篇博文中修改hexo-renderer-marked渲染引擎的js脚本,去掉对 _
和 \\
的转义。Hexo默认的MarkDown渲染引擎hexo-renderer-marked会调用marked模块的marked.js脚本进行最终的解释,这个脚本在Hexo安装后的node_modules\marked\lib\目录中。有两点修改:
针对下划线的问题,取消_
作为斜体转义,因为marked.js中*
也是斜体的意思,所以取消掉_
的转义并不影响使用markdown,我平时一般不用斜体,就是用也更习惯用*
作为斜体标记。针对marked.js与Mathjax对于个别字符二次转义的问题,我们只要不让marked.js去转义\\,\{,\}
在MathJax中有特殊用途的字符就行了。编辑node_modules\marked\lib\marked.js 脚本,
【第一步】
将451行的1
escape: /^\\([\\`*{}\[\]()# +\-.!_>])/,
替换为1
escape: /^\\([`*\[\]()# +\-.!_>])/,
这一步取消了对\\,\{,\}
的转义(escape)
【第二步】
将459行的1
em: /^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
替换为1
em:/^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
这一步取消了对斜体标记_
的转义
这样带来一个问题就是,以后每次更换电脑,在新电脑上安装完Hexo环境后,都要手动修改marked.js
文件。