Who am I

我的照片
Hefei, Anhui, China
Research Fields: Satellite Geodesy

2012年11月29日星期四

窗函数的特性及其选择

1. 什么是“窗”
在频谱分析中,快速傅立叶变换是基本工具。快速傅立叶变换是基于周期无限的信号,而在实现过程中只能截取信号的一部分进行处理。其中截取的过程就是加“窗”。加窗会造成“频谱能量泄漏”和“栅栏效应”。为了减少泄漏和改善栅栏效应,有多种窗函数供选择。

2. 常用窗函数
矩形窗,三角窗,hanning窗,hamming窗,Blackman窗,Kaiser窗,等等。


有了如此多的窗函数,在实际应用中,我们该如何选择窗函数呢?

在介绍窗函数的选择之前,这里首先给出窗函数的几个指标特性。


3. 窗函数特性
考察窗函数的频率响应,通常有如下几个参数:主瓣宽度(越窄越好)、第一旁瓣衰减(越小越好)、旁瓣宽度以及旁瓣衰减速度(越快越好)。
主瓣宽度越窄,频率分辨率越高;第一旁瓣衰减越低,泄漏越小;
矩形窗主瓣宽度最窄但第一旁瓣衰减大;hanning窗和hamming窗具有较窄的主瓣宽度以及较小的第一旁瓣衰减(常用的两种窗函数),但hanning窗比hamming窗旁瓣衰减速度快多了。
理解:窗函数等同于权重函数,窗函数与信号在时间域的乘积等同于窗函数的频谱与信号的频谱在频域的卷积(卷积运算见http://zh.wikipedia.org/wiki/%E5%8D%B7%E7%A7%AF,实质是求和运算)。当旁瓣值越大,泄漏越大,所以,旁瓣值越小越好。窗口尺寸越大,主瓣宽度越窄,旁瓣衰减越大,频谱分辨率越高。

4. 窗函数的选择
hanning窗在大多数场合很有效,由于它具有良好的频率分辨率,并降低了频率泄漏。当你不了解信号的特性时,从hanning窗开始。
如果被测信号是随机或者未知的,选择hanning窗。
如果测试信号有多个频率分量,且测试的目的更多关注频率点而非能量的大小,在这种情况下,需要选择一个主畔够窄的窗函数,hanning窗是一个很好的选择。 
如果测试的目的更多的关注某周期信号频率点的能量值,那么其幅度的准确性则更加的重要,可以选择一个主畔稍宽的窗。
当信号在“远”频段包含强干扰时,选用具有高旁瓣转降率的窗函数(此时的窗函数可以理解成低通滤波器,旁瓣衰减越多,高频噪声抑制效果更好);
当信号在有用频率附近包含强干扰时,选择具有较低的最大旁瓣级别的窗函数;

参考文章:
http://baike.baidu.com/view/3888568.htm (重点)
http://hi.baidu.com/lexlin/item/20860680eb7c5f1cc31627b8 (频谱泄漏那段)

latex caption宏包使用说明(持续更新)

latex caption宏包可以定制图形,图标等标题样式,其中包括标题至图形的间距,标题的显示方式,标题的字体,以及标题对齐方式等等。

该博文将陆续完善该宏包常用的使用介绍。

首先,需要在导言区加载宏包caption2:\usepackage{caption2}

1. 标题样式更改(如Figure 改成 Fig.)
在导言区加上语句:
\renewcommand{\figurename}{Fig.}
如果只想在其中某幅图中修改,将该语句加到对应的Figure环境中即可。

2. 标题至图形或表格的间距
参见另一篇博文http://geowu.blogspot.de/2012/10/latex.html

3. 标题的分割符更改
标题的分割付默认是:,如果想更改为.,且.后面还想留点空白,可以通过重定义\captionlabeldelim来加以改变。在导言区或对应的Figure, table环境中添加如下语句:
\renewcommand{\captionlabeldelim}{.~}   % .后面有个空格
\renewcommand{\captionlabeldelim}{.}     % .后面不留空格

4. 标题对齐方式
通常的标题对齐方式有如下几种:
  • normal:     标题文本两边对齐,其中最后一行为左对齐
  • center:      标题文本居中对齐
  • flushleft:   标题文本左对齐
  • flushright: 标题文本右对齐
  • centerlast: 标题文本两边对齐,其中最后一行居中对齐
  • indent:      与normal相似,只是标题从第二行开始,每行行首缩进由命令\captionindent给出的长度。
  • hang:        悬挂缩进,与normal相似,只是标题从第二行开始,每行行收缩进与标题标记宽度相等的长度。
改变标题的对齐方式有如下两种方法:
  1. 在调用宏包时,设置对齐选项,如\usepackage[centerlast]{caption2},该方法将会改变全文的图形标题对齐方式
  2. \captionstyle命令来改变对齐方式。将该命令置于一环境中,仅仅改变这一环境中的标题对齐方式; 在环境外插入该命令,将改变之后的图形标题对齐方式。例:\captionstyle{centerlast}



参考资料:
http://www.ctex.org/documents/latex/graphics/node2.html,其中第18和19章。

2012年11月22日星期四

过采样和下采样

数字信号处理中,多速率(Multirate)滤波中经常用到的两个概念:过采样和下采样。

过采样(Oversampling):
使用远大于Nyquist频率进行采样,设原来的采样频率为fs,将采样频率提高到R×fs,R>1。
在这种采样的数字信号中,总的量化噪声功率不变,但这时量化噪声的频谱分布发生了变化,即将原来均匀分布在0 ~ fs/2频带内的量化噪声分散到了0 ~ Rfs/2的频带上。若R>>1,则Rfs/2就远大于音频信号的最高频率fm,这使得噪声大部分分布在频带之外的高频区域,而分布在频带之内的噪声就会相应的减少,于是,通过低通滤波器滤掉fm以上的噪声分量,就可以提高系统的信噪比。
优点:提高信噪比;
缺点:处理数据量大;
目的:改变噪声的分布,减少噪声在有用信号的带宽内,然后通过低通滤波器滤除掉噪声,达到较好的信噪比。

与过采样相对应的是欠采样(R<1),这里不做论述。

下采样(降采样,downsampling):
下采样就是抽取,对于一个样值序列间隔几个样值取样一次,这样得到的新序列就是原序列的下采样。下采样还是要满足采样定理才行,否则这样的下采样会引起信号成分的混叠。
好处:较少数据样点,减少运算时间。
matlab函数:y=downsample(x,n)
其中,x为原始采样数据,n为采样间隔,y为返回的降采样数据。

与下采样相对应的是上采样(upsampling),上采样就是内插,根据原始采样数据进行内插,这样得到的新序列就是原序列的上采样。

过采样和欠采样是原始采样;下采样和上采样是基于原始采样数据进行重采样

过采样——低通滤波——下采样


2012年11月16日星期五

firls和remez函数(最优滤波器设计)

firls和remez是比fir1和fir2更为通用的FIR滤波器设计函数。

firls从实际和理想频率响应之间误差平方和最小(最小二乘LS)的观点出发;
remez从实际和理想频率响应之间最大误差最小化的观点出发。
两者都称为最优滤波器设计,调用格式和语法规则相同,只是优化算法不同。

firls函数:
b=firls(n,f,a); or b=firls(n,f,a,w) (后者为加权最优滤波器)
b=remez(n,f,a); b=remez(n,f,a,w); (后者为加权最优滤波器)
式中n为滤波器阶数;f为滤波器期望频率特性归一化频率向量,范围为0~1;a为滤波器期望频率特性的幅值向量,a和f同长度,且为偶数;b为返回滤波器系数,长度为n+1.


fir1和fir2函数介绍(窗函数法)

fir1和fir2都是基于窗函数法设计FIR数字滤波器的函数。所谓滤波器设计,其实就是确定转换函数H的分子b和分母a。对于FIR滤波器,分母a=1,故只需确定分子b.

fir1用经典的窗函数法设计FIR滤波器,在通带波段的幅值响应为0db,fir2同样利用窗函数法,但其可处理任意的频率响应。

首先介绍fir1的用法:
b=fir1(n,wn[,'ftype',window])
其中,n为滤波器的阶数,对于高通、带阻滤波器,n需取偶数;wn为滤波器截止频率,范围为0~1(归一化频率);ftype为滤波器类型,缺省时为低通或带通滤波器;'high'为高通,'stop'为带阻;window为窗函数列向量,其长度为n+1,缺省时自动取hamming窗。b为滤波器系数向量,长度为n+1。

fir2函数:用于设计具有任意形状频率响应的FIR滤波器,调用格式为b=fir2(n,f,m[,npt,window]);
n为滤波器阶数;f和m分别为滤波器幅频响应的频率向量和幅值向量,取值为0~1(归一化频率);m和f具有相同的长度,window为窗函数,长度为n+1,缺省时取hamming窗;npt为对频率响应进行内插的点数,缺省时为512;b为滤波器系数向量,长度为n+1。



matlab freqz函数说明

freqz函数:计算数字滤波器的频率响应(frequency response)

调用形式:
1. [h,w]=freqz(b,a,n)
返回频率响应矢量h(复数)以及相对应的角频率矢量w(取值范围是0-pi). 输入值b和a是转换函数的分子和分母系数。n是一个正整数,返回值h,w的维数都为n。如果不给出n值,默认是512.

2. h=freqz(b,a,w)
b,a的意义同上,w是输入角频率矢量(维数至少为2),返回对应角频率的频率响应矢量h.

3. [h,w]=freqz(b,a,n,'whole')
b,a,n的意义同用法1,区别在于范围的角频率向量w的取值范围是0-2pi,h是对应的频率响应。

注:以上返回的频率都为角频率,以w表示,单位为rad。

4. [h,f]=freqz(b,a,n,fs)
b,a,n意义同上,fs为采样频率,h为返回的频率响应矢量,f为对应的频率(单位为Hz,取值范围为0-fs/2)。

5. h=freqz(b,a,f,fs)
对应用法2,区别在于输入的不是角频率w,而是频率f,fs为采样频率,返回h为频率响应矢量。

6. [h,f]=freqz(b,a,n,'whole',fs)
对应用法3,输出频率f的范围为0-fs.

7. freqz(b,a,...)
绘制滤波器的幅频、相频响应。

8. freqz(Hd)
用fdesign设计好滤波器Hd后,freqz(Hd)在fvtool中绘制幅频、相频响应。


2012年11月8日星期四

latex+bibtex 插入参考文献

latex+bibtex可以轻松插入参考文献,具体步骤如下:

1. 创建参考文献库,.bib文件格式
在我们用Jabref管理文件时,通常导入参考文章的bibtex citation,简单方便的创建文章记录。在写文章时,将Jabref管理的文件导出到一个.bib文件,如test.bib。bib文件的具体格式这里不多论述。

2. 创建主tex文件
创建主文件test.tex,注意文件名与.bib两者保持一致。在主文件里需要加入如下三条语句:

\bibliographystyle{plain}, 将该命令放在\begin{document}后边,其他类型包括:
  • unsrt: 参考文献编号按照引用的顺序,而不是作者字母顺序
  • alpha: 参考文献编号基于作者的名字和出版年份的顺序
  • abbrv: 缩写格式
\cite{title},这里的title是bib文件里@article后面的名称。
\bibliography{test.bib}, 该命令加在\end{document}命令前,调用test.bib

3.编译运行(共四步):
  1. latex或pdflatex命令编译test.tex文件;
  2. bibtex编译test.bib文件,该命令依赖于test.aux文件
  3. 再次用latex或pdflatex编译test.tex文件
  4. 最后用latex或pdflatex编译test.tex文件


2012年10月25日星期四

latex输入矩阵

这里讲述两种方法输入矩阵。

1. amsmath宏包提供的矩阵输入环境
  • matrix环境:没有括号的矩阵
  • pmatrix环境:用小括号括起来的矩阵
  • bmatrix环境:用中括号括起来的矩阵
  • Bmatrix环境:用大括号括起来的矩阵
  • vmatrix环境:用单竖线括起来的矩阵
  • Vmatrix环境:用双竖线括起来的矩阵
举例:
\begin{bmatrix} x_1\\ x_2\\ \vdots \\ x_n  \end{bmatrix}  =
\begin{bmatrix}
1 & t_1 & t_1^2 & \cdots & t_1^{n-1}\\ 
1 & t_2 & t_2^2 & \cdots & t_2^{n-1}\\ 
\vdots & \vdots  & \vdots & \ddots & \vdots\\ 
1 & t_n & t_n^2 & \cdots & t_n^{n-1}
\end{bmatrix}
\begin{bmatrix} a_0\\ a_1\\ \vdots \\ a_{n-1}\end{bmatrix}

结果如下:







2. latex自身提供的array环境
举例:
\left [ \begin{array}{lcr}
1 & 2 & 3 \\ 2 & 3 & 4 
\end{array}  \right ]
需要其它类型的括号可以更改红色标注的,如{},[],||,().
注:对于那些标注较多的矩阵(或者复杂矩阵),建议用该方法。


2012年10月24日星期三

vim拼写检查

在利用vim撰写文档时,如何也能享用类似word的自动拼写检查功能呢?以下将介绍两种实现vim拼写检查。

1. vim自带的拼写检查
vim编辑器自带拼写检查功能,可用如下命令控制:
:set spell   %开启拼写检查
:set spell spelllang=en_us   %开启拼写检查功能并指定语言为en_us,如果想检查德语,可用
:set spell spelllang=de
:set nospell   % 关闭拼写检查功能
几个相关的命令:
]s      :将光标移到下一个拼写错误处
[s      :将光标移到上一个拼写错误处
zg     :告诉拼写检查器该单词是正确的
zug   :取消zg
zw    :告诉拼写检查器该单词时错误的
zuw  :取消zw
z=     :显示一个有关的拼写建议列表
1z=   :总是取第一个建议的词

2. 利用插件Engspchk
下载:http://www.vim.org/scripts/script.php?script_id=195
安装:将对应文件放到.vim对应文件夹下
\ec    :检查拼写
\ee   :结束拼写检查
\ea   :选择拼写替换(依赖于agrep)

在我的vim中,mapleader "\" 被","替换了.


2012年10月23日星期二

latex 图形与标题的间距

latex插入的图形或表格,其中标题是由\caption命令生成,如:
\begin{figure}
\includegraphics[]{}
\caption{}  %caption在图形的下面
\end{figure}
又如:
\begin{table}
\caption{}  %caption在表格的上面
\begin{tabular}{cccc}
...
\end{tabular}
\end{table}
注:标题出现的位置由\caption命令决定。

标题上下方的间距由长度\abovecaptionskip和\belowcaptionskip默认分别为10pt和0,因为latex假定图形的标题位于图形的下方,故而在标题上方保留了更多的空白)。

可以通过\setlength命令来修改这两个长度,如:

\begin{figure}
\setlength{\abovecaptionskip}{0pt}
\setlength{\belowcaptionskip}{10pt}
\caption{}  %caption在图形的下面
\includegraphics[]{}
\end{figure}

通常情况下,将表格的标题放在上面,而图形的标题放在下面。想要达到这样的效果,可以在导言区定义如下命令:
\newcommand{\topcaption}{%
  \setlength{\abovecaptionskip}{0pt}%
  \setlength{\belowcaptionskip}{10pt}%
  \caption}
在希望得到上方标题的时候可用\topcaption{}来代替\caption{}即可。


2012年10月22日星期一

matlab库函数

将自己编写的函数库添加到matlab search path中,这些函数即可被其他函数调用,具体步骤如下:
file--set path--Add Folder--save

当然也可以使用addpath命令:
addpath D:/works/MyMatlabFunctions -end 
该语句将D:/works/MyMatlabFunctions文件夹加到matlab默认搜索路径的最后。


ghostscript和gsview

GhostScript是一整套的软件,这些软件提供了:
  • PostScript语言的解释器,这个解释器可以将PostScript语言的文件转换为光栅格式,在显示器上显示,并且可以在没有内建的PostScript语言能力的打印机上打印。
  • PDF文件的解释器,和上面的解释器拥有相同的能力。
  • 文件格式转化,将ps文件转化为pdf文件和将pdf文件转化为ps文件。

GhostScript起初是在Linux系统下开发的,继承了Linux的命令行操作方式。 现在已经从Linux版本移植到其他操作系统。
由于命令解释方式使用不太方便,GhostScript还提供了前端产品:

  • ghostview, gv,在Unix/X11下运行。
  • gsview,在Windows下运行(gsview不能单独运行,必须先安装了Ghostscript)。

gsview的注册码
32411-26380
18963-21159
16417-30959
来源于 http://bbs.ctex.org/forum.php?mod=viewthread&tid=27220


图片空白边缘处理

用latex撰写文档时,插入图片常用的格式为pdf, png和ps格式。在插入图片时,经常遇到的一个问题是:图片的空白边缘,会让生成的latex文档图片周围有大量空白,从而导致页面布局难看。最好的处理方式就是对图片进行编辑,去除图片的空白边缘。以下介绍几种去除图片边缘的方法。 

1. 用matlab绘制图形,保存图形时去除白边
用matlab绘图,如果将图片保存成pdf格式,会导致pdf图片空白边缘非常大。matlab file exchange里面提供了一些函数用来定制图形输出,其中一个很重要的功能就是裁剪白边。
函数文件的地址:http://www.mathworks.com/matlabcentral/fileexchange/23629-exportfig
在使用这些函数时,如果将图片保存成pdf或eps文件时,需要安装gphostscript,具体安装参见该博客另一篇帖子。
举例:export gcf -pdf -r720 'test'   %生成test.pdf文件,图片分辨率为720,默认裁剪。

2. 用GMT绘制的图形(ps),在转换成pdf或png的过程中可以去除白边
ps2raster test.ps -A -E720 -Tg(去除白边)  <====>  ps2raster test.ps -E720 -Tg(不去白边)   png
ps2raster test.ps -A -E720 -Tf (去除白边)  <====>  ps2raster test.ps -E720 -Tf (不去白边)  pdf

3. pdfcrop裁剪pdf
pdfcrop是texlive的一部分,可以用其很方便的裁剪pdf图片的空白边缘。
例:pdfcrop old.pdf new.pdf (生成的new.pdf边缘大小为0,默认)
pdfcrop --margins "5 10 5 10" old.pdf new.pdf (new.pdf边缘<left top right bottom>为5,10,5,10)
pdfcrop --margins 2 old.pdf new.pdf (new.pdf边缘<left top right bottom>都为2)
pdfcrop --margins "2 5" old.pdf new.pdf (new.pdf边缘<left top right bottom>为2,5,2,5)
margins的size单位为bp(bigpoint)

4. pdfedit裁剪
打开pdf文件,选择page--Edit Page Metrics--输入裁剪点的坐标--change。

5.  illustrator, adobe acrobat, inkscape
用这种大型的软件处理和编辑pdf文件,当然也包括裁剪。
注:inkscape是一个矢量图软件。

2012年10月20日星期六

matlab 正态分布密度曲线

本文主要包含两个内容:如何绘制正态分布曲线;如何将直方图与概率密度图联系起来。

绘制正态分布曲线:
norx=normpdf(x,mu,sigma)
其中:x为数据分布区间,如-1:0.1:1; mu为均值; sigma为标准差; norx为对应x区间的密度。
如果直接用normpdf(x),默认是标准正态分布(即mu=0,sigma=1)
norx=norx.*100  %转化成百分比
plot(x,norx,'r-') %绘制密度曲线
注:如果mu和sigma不知道,需要先求出;此外,还有一些normfit函数可以估计一组正态分布数据的均值和标准差。

直方图与概率密度图:
直方图的纵坐标:频率/组距,这样直方图每个bar的面积表示的就是概率。所以在将直方图和概率密度图联系起来时,一定要注意直方图纵坐标的意义(别忘了除以组距)。


2012年10月19日星期五

matlab 绘制统计直方图

这里介绍hist函数结合bar函数绘制统计直方图

一组原始采集数据,如:data=[2 3 -4 -1 4 -5 1 5 -2 -3]; 数据范围为range=-5:5;
首先可以采用hist函数进行分组:
n=hist(data,range);  将数据data根据range进行分组;返回数组n,n的维数同range;
然后用bar画图:
bar(range,n,'hist');   绘制直方图(柱状图),对分组较少的适用。

有时并没有给定分组范围range,而是希望分成count组:
还是使用hist函数分组:
n=hist(data,count); 将原始数据data自动分成count组,根据原始数据值函数自动设定分组范围,返回值n为数组,维数为count,内容为每一分组的频数;
bar(n); 绘制直方图;
如果这里没有给定count,hist(data)默认分成10组。

hist(data,range)直接绘制直方图,但是每个bar之间有间隙,所以,如果想没有间隙的直方图,推荐使用第一种方法。分组如果较多的话,推荐这种方法。


2012年10月15日星期一

gfortran 编写动态库时遇到 ‘relocation R_X86_64_32 against’错误

如题,用gfortran编写动态链接库时遇到 ‘relocation R_X86_64_32 against ...’错误,做如下处理即可:
在生成.o文件时,用:gfortran -c -fPIC *.f90
在生成.so文件时,用:gfortran -shared -fPIC -o libxxxx.so *.o

ubuntu 12.04安装ubuntu Tweak

安装步骤:
  • sudo add-apt-repository ppa:tualatrix/ppa
  • sudo apt-get update
  • sudo apt-get install ubuntu-tweak

2012年10月13日星期六

hyperref宏包简介

hyperref宏包主要用于生成链接以及交叉引用。以下是一些关于这个宏包的使用说明。

1. 加载宏包:\usepackage{hyperref},这句话放在引言区加载宏包语句的最后一行,因为这个该宏包重新定义了很多Latex命令。

2. 该宏包提供了很多options,有如下三种方式设置这些options:
  • 文档类说明的选项对hyperref也起作用,如:\documentclass[dvipdfmx]{article}
  • 加载该宏包时设置options,如:\usepackage[colorlinks=true,...]{hyperref}
  • 用hypersetup语句设置,在加载该宏包后,\hypersetup{colorlinks=true, bookmarks=true,...}

3. 常用的一些options
colorlinks   用颜色来表示超链接,默认是用box来表示,colorlinks=true
linkcolor     内部链接的颜色(默认为红色)
anchorcolor anchor text的颜色(默认为黑色)
citecolor      参考文献引用的颜色(默认为green)
filecolor       url for local files的颜色
urlcolor       urls链接的颜色
frenchlinks  用small caps来表示链接
bookmarks  pdf文档创建书签(默认为true)
bookmarksopen 默认为false
bookmarksnumbered  书签包含章节号(默认为false)
CJKbookmarks  书签支持中文,默认时false
citebordercolor, filebordercolor, linkbordercolor, ..., pdfborder设置链接box的颜色和类型,具体参见hyperref manual
pdfpagemode  设置pdf文件打开时的状态,默认时empty,另一个常用设置为FullScreen
pdftitle             设置pdf文档的title属性
pdfauthor         设置pdf文档的author属性
pdfsubject, pdfcreator, pdfproducer, ...等可以设置pdf文档的其他一些信息
pdfview, pdfstartview, 设置文档查看时的状态,常有Fit(fits the page to the window), FitH(fits the width of the page to the window), FitV(fits the height of the page to the window), FitR, FitB, FitBH, FitBV等值可以选择。
此外,还有一些driver,页面大小的选项,具体可参见hyperref manual。

TC目录操作的快捷方式

\表示根目录;
ctrl+\: 回到根目录;
Ctrl+←或ctrl+→: 将光标下的文件夹在另一个窗口打开;
Ctrl+↑:将选中的文件夹在一个新的窗口中打开;
Ctrl+T:打开一个新的窗口;Ctrl+W:关闭当前窗口;
Ctrl+U:交换左右文件窗口;
Ctrl+B:把当前文件夹下所有子目录中的文件放在一起显示;
Ctrl+F:连接FTP服务器;
Ctrl+shift+F:断开FTP服务器;
Ctrl+D:将当前路径加到收藏夹;
Ctrl+M:批量修改文件名;
Ctrl+’+’:选中所有文件;
Ctrl+’-’:取消选中所有文件;
Ctrl+R: 刷新窗口;
Ctrl+P: 把当前路径拷贝到命令行;
Backspace:返回上一级目录;

Alt+←:返回前一个访问过的目录;
Alt+→: 返回后一个访问过的目录;
Alt+↓:显示历史文件夹;
Alt+’+’:选中所有具有相同扩展名的文件;
Alt+’-’:取消选中所有具有相同扩展名的文件;
Alt+F7:搜索;
Alt+Enter: 打开文件属性窗口;

matlab几个常用的快捷键

matlab常用的几个快捷键:
  • ctrl+r    注释
  • ctrl+t    取消注释
  • ctrl+i    自动对齐程序
  • ctrl+]    增加缩进
  • ctrl+[    减少缩进
  • ctrl+y   恢复撤销的更改
  • ctrl+w  关闭当前窗口
  • ESC    清除命令行中一行
  • ctrl+u   同ESC
  • ctrl+k   清除光标后至行尾的字符

2012年10月12日星期五

将vim打造成IDE (Fortran)

更新于2012年10月12号
利用vim的插件,可以将vim打造成功能强大的IDE,这些功能主要包括文件快速跳转,变量快速跳转,变量自动补全,快速的批量注释等等。
1. ctags+taglist
主要功能:实现变量的快速跳转;
安装过程:
1> 首先安装ctags

ctags用于产生代码索引文件,建议安装exuberant ctags,下载地址:http://ctags.sourceforge.net/
将文件解压后,进入其目录后,进行安装:
  1. ./configure
  2. make
  3. sudo make install
至此,ctags安装结束。
2> 安装taglist
下载taglisthttp://sourceforge.net/projects/vim-taglist/files/,解压后将对应文件夹下的文件放到~/.vim/的对应文件夹下;进入vim,在normal模式下输入:helptags ~/.vim/doc即完成taglist的安装
3> ctags+taglist的配置和使用 (Ctags的设置待补充)
测试ctags的安装位置: which ctags,输出结果如果是:/usr/local/bin/ctags
则在~/.vimrc文件中添加如下语句:
let Tlist_Ctags_Cmd="/usr/local/bin/ctags"    
nmap <silent><F9> :TlistToggle<cr>    %定义F9快捷方式打开Taglist窗口,如果后面设置了winmanage后,可以取消该映射。

在taglist其作用之前,必须先用ctags命令生成tags文件,如:ctags -R main.f90,然后打开main.f90文件,F9即可调出taglist了。

2. winmanager
主要功能:多窗口显示和管理,可以将taglist和netrw(filelist)窗口整合起来;
首先下载:http://www.vim.org/scripts/script.php?script_id=95,然后将对应文件放到~/.vim/对应文件夹下(其中plugin下有三个.vim文件,都拷贝到对应目录下)。进入vim,在normal模式下输入:helptags ~/.vim/doc即可完成安装。
然后在~/.vimrc文件中添加如下语句:
let g:winmanagerWindowLayout='FileExplorer|Taglist'
nmap <silent><F8> :WMToggle<cr>  %定义F8为快捷方式
注:fileexplorer是netrw插件控制的(FileList),这个插件vim默认自带,所以不需要自己安装。
按下F8后可以打开FileList和TagList,再按下F8关闭该窗口。
不同窗口见的跳转:ctrl+w+w(默认)。

3. MiniBufExplorer
功能:多文件编辑时,文件存放在buffer里,并可以快速切换文件。
安装方法:同上面的Taglist和winmanager插件。
在.vimrc文件中添加以下语句进行设置:
let g:minibufexplmapwindownavvim=1    %ctrl+h/j/k/l进行窗口切换
let g:minibufexplmapwindownavArrows=1    %ctrl+箭头进行窗口切换
使用:
<Tab>移动到下一个buffer;
<Enter>打开光标所在的buffer;
d:删除光标所在的buffer;

4. nerd_commenter
主要功能:只能注释,多行注释与反注释,支持多种程序语言。
安装:方法同上,但别忘了进入vim后,在normal模式下输入:helptags ~/.vim/doc,才完成安装。
然后在.vimrc文件中加入如下语句:
let mapleader=","   
map <c-t> ,cc   %定义ctrl+t快速注释(适用与normal和visual模式下)
map <c-r> ,cu  %定义ctrl+r快速取消注释(normal和visual模式下)
注释命令:
,cc        注释当前行或者选中的文本
,cu        取消当前行或选中文本的注释
,ci         切换选中行的注释状态
,c+space   同,ci
,cA       添加注释到行尾,并进入插入模式
,cl         注释符左对齐
,cr         注释符右对齐

5. Neocomplcache
主要功能:智能自动补全
安装:解压后,将plugin和doc里面的文件放到~/.vim/对应文件夹下,但是解压后还有一个autoload文件夹,直接放到~/.vim/下;最后vim normal模式下:helptags ~/.vim/doc,完成安装。
然后,在.vimrc文件中添加语句:
let g:neocomplcache_enable_at_startup=1
重启vim后即可生效了。

最后,看看设置完的效果:

2012年10月11日星期四

gvim Fatal IO error 11

用命令行打开gvim时,出现错误,关闭gvim后不久出现gvim: Fatal IO error 11 (Resource temporarily unavailable) on X server :0.0.

可以用以下方法启动gvim:
  1. gvim -f: 可以正常启动
  2. 从终端启动gvim

2012年10月4日星期四

ubuntu软件包管理命令



APT (高级软件包工具) 是一个强大的包管理系统,而那些图形化程序如 添加/删除 应用程序 和 Synaptic 都是建立 在它的基础之上的。APT 自动处理依赖关系并在系统软件包执行其他操作以便安装所要的软件包。 运行 APT 要求管理权限 。 可以被 APT 使用的一些常用命令:
 安装软件包:
 sudo apt-get install packagename 
 删除软件包:
 sudo apt-get remove packagename 
 获取新的软件包列表:
 sudo apt-get update 
 升级有可用更新的系统:
 sudo apt-get upgrade 
 列出更多命令和选项:
 apt-get help 
 2、安装/卸载 .deb 文件
 这 些是Debian 软件包。这些与 Ubuntu 相关的软件包文件使用 .deb 后缀是因 为 Ubuntu 与 Debian GNU/Linux 发行版有着紧密的关系。您将需要管理权限来安装 .deb 文件 。
 要安装 .deb 文件,简单地双击它,然后选择 安装软件包 即可。
 或者,您也可以打开一个终端并输入:
 sudo dpkg -i package_file.deb   来安装 .deb 文件。
 如需卸载 .deb 文件,在您软件包管理器中反选它,或输入:
 sudo dpkg -r package_name 
 3、将 .rpm 文件转为 .deb 文件
 另 一种软件包文件是 .rpm为后缀的 Red Hat 软件包管理器文件。我们并不建议在 Ubuntu 系统中安装它们。在绝大多数情况 下,Ubuntu 自身的 .deb 软件包是可用的。然而,如果绝对必要,可以使用程序 alien 将 .rpm 文件转化为.deb 文件。
 安装 alien 程序。
 在终端使用管理权限运行以下命令:
 sudo alien package_file.rpm 
 4、安装 tarballs
 以 .tar.gz 或 .tar.bz2 作 为后缀名的文件是在 Linux 和 Unix 中被广泛使用的 tarballs 的打包文件。 如果在任何 Ubuntu 软件库中都没 有 Ubuntu 的软件包,您可以按照软件包自带的指示使用命令行来安装和卸载 Tarball 文件。 Tarballs 通常包括程序的源代码,并 且需要 编译 才能使用。要做到这一点,一般需要其它软件 。
 5、dpkg命令
 dpkg -i /**/**/**.deb 安装软件
 dpkg -x **.deb 解开.deb文件
 dpkg -r /-p 删除并清配置
 更详细的 用dpkg --help 查询 如下:
 dpkg -i|--install <.deb 文件的文件名> ... | -R|--recursive <目录> ...
 dpkg --unpack <.deb 文件的文件名> ... | -R|--recursive <目录> ...
 dpkg -A|--record-avail <.deb 文件的文件名> ... | -R|--recursive <目录> ...
 dpkg --configure <软件包名> ... | -a|--pending
 dpkg -r|--remove | -P|--purge <软件包名> ... | -a|--pending
 dpkg --get-selections [<表达式> ...] 把已选中的软件包的列表打印到标准输出
 dpkg --set-selections 从标准输入里读出要选择的软件包列表
 dpkg --update-avail 替换现可安装的软件包信息
 dpkg --merge-avail 把文件中的信息合并到系统中
 dpkg --clear-avail 清除现有的软件包信息
 dpkg --forget-old-unavail 忘却已被删除,现在却不能安装的软件包
 dpkg -s|--status <软件包名> ... 显示软件包详尽的状态信息
 dpkg -p|--print-avail <软件包名> ... 显示软件包当前可供安装的版本的详细信 息
 dpkg -L|--listfiles <软件包名> ... 列出所有“属于”该软件包(或多个软件包)的文件
 dpkg -l|--list [<表达式> ... 简明地列出软件包的状态
 dpkg -S|--search <表达式> ... 搜寻拥有该文件(或多个文件)的软件包
 dpkg -C|--audit 检查搜寻残损的软件包
 dpkg --print-architecture 显示目标机的体系架构(借助 GCC)
 dpkg --print-gnu-build-architecture 显示目标机体系架构的 GNU 版本的表示
 dpkg --print-installation-architecture 显示本地主机的体系架构(用于安装)
 dpkg --compare-vesions <甲> <关系> <乙> 比较版本号 - 见下
 dpkg --help | --version 显示本帮助文档以及版本号
 dpkg --force-help | -Dh|--debug=help 强制操作时,有关出错方面的帮助
 dpkg --licence 显示版权和许可证的条文
 6、ubuntu下apt-get 命令参数
 常用的APT命令参数
 apt-cache search package 搜索包
 apt-cache show package 获取包的相关信息,如说明、大小、版本等
 sudo apt-get install package 安装包
 sudo apt-get install package - - reinstall 重新安装包
 sudo apt-get -f install 修复安装"-f = ――fix-missing"
 sudo apt-get remove package 删除包
 sudo apt-get remove package - - purge 删除包,包括删除配置文件等
 sudo apt-get update 更新源
 sudo apt-get upgrade 更新已安装的包
 sudo apt-get dist-upgrade 升级系统
 sudo apt-get dselect-upgrade 使用 dselect 升级
 apt-cache depends package 了解使用依赖
 apt-cache rdepends package 是查看该包被哪些包依赖
 sudo apt-get build-dep package 安装相关的编译环境
 apt-get source package 下载该包的源代码
 sudo apt-get clean && sudo apt-get autoclean 清理无用的包
 sudo apt-get check 检查是否有损坏的依赖
 其中:
 1 有SUDO的表示需要管理员特权!
 2 在UBUNTU中命令后面参数为短参数是用“-”引出,长参数用“――”引出
 3 命令帮助信息可用man 命令的方式查看或者
 命令 -H(――help)方式查看
 4 在MAN命令中需要退出命令帮助请按“q”键!!
 选项 含义 作用
 sudo -h Help 列出使用方法,退出。
 sudo -V Version 显示版本信息,并退出。
 sudo -l List 列出当前用户可以执行的命令。只有在sudoers里的用户才能使用该选项。
 sudo -u username|#uid User 以指定用户的身份执行命令。后面的用户是除root以外的,可以是用户名,也可以是#uid。
 sudo -k Kill 清除“入场卷”上的时间,下次再使用sudo时要再输入密码。
 sudo -K Sure kill 与-k类似,但是它还要撕毁“入场卷”,也就是删除时间戳文件。
 sudo -b command Background 在后台执行指定的命令。
 sudo -p prompt command Prompt 可以更改询问密码的提示语,其中%u会代换为使用者帐号名称,%h会显示主机名称。非常人性化的设计。
 sudo -e file Edit 不是执行命令,而是修改文件,相当于命令sudoedit。
 
 7、Ubuntu软件推荐
 sudo apt-get install virtualbox#
 sudo apt-get install build-essential pkg-config xserver-xorg-dev linux-headers-`uname -r`
 sudo apt-get install libc6-dev
 sudo apt-get install apt-build #frontend to apt to build, optimize and install packages
 sudo apt-get install nautilus-open-terminal dpkg-dev
 sudo apt-get install testdisk #Partition scanner and disk recovery tool
 sudo apt-get install mkisofs # Creates ISO-9660 CD-ROM filesystem images
 sudo apt-get install cramfsswap #swap endianess of a cram filesystem (cramfs)
 sudo apt-get install cramfsprogs squashfs-tools #cramfs squashfs
 sudo apt-get install aptoncd # Installation disc creator for packages downloaded via APT
 sudo apt-get install language-support-zh language-pack-zh#安装中文语言支持
 sudo apt-get install compiz compizconfig-settings-manager compiz-corecompiz-fusion-plugins-extra compiz-fusion-plugins-unsupported emeraldemerald-themes#安装compiz/fusion 有史以来最炫的3D桌面
 sudo apt-get install stardict stardict-common stardict-cdict-gbstardict-cedict-gb stardict-hanzim stardict-langdao-ce-gbstardict-langdao-ec-gb stardict-oxford-gb stardict-xdict-ce-gbstardict-xdict-ec-gb stardict-jcedict stardict-jedictstardict-jmdict-en-ja stardict-jmdict-ja-en wyabdcrealpeopletts#安装StarDict
 sudo apt-get install kde-i18n-zhcn kde-i18n-zhtw#k程序中文支持,很讨厌kde ,但不太讨厌qt程序可以这样装
 sudo apt-get install gnome-common # common scripts and macros to develop with GNOME
 sudo apt-get install makeself #utility to generate self-extractable archives
 sudo apt-get install sun-java5-jdk #安装Java5环境
 sudo apt-get install sun-java5-plugin #安装Java5环境
 sudo apt-get install sun-java6-jre#安装JAVA6环境
 sudo apt-get install sun-java6-jdk #安装JAVA6环境#
 sudo update-alternatives --config java#设定JAVA环境
 sudo apt-get install nautilus-open-terminal #在右键菜单中加入打开终端
 sudo apt-get install qt4-qtconfig#qt4 gui配制工具, 如字体等,很讨厌kde ,但不太讨厌qt程序可以这样装
 sudo apt-get install kcontrol #k程序gui配制工具,很讨厌kde ,但不太讨厌qt程序可以这样装
 sudo apt-get install smbfs #smbfs挂载支持
 sudo apt-get install nfs-common #nfs
 sudo apt-get install samba nfs-kernel-server #samba
 sudo apt-get install nmap #网络端口扫描工具
 sudo apt-get install nmapfe #nmap前端
 sudo apt-get install kinstaller #application installer
 sudo apt-get install ubuntu-restricted-extras #有用的东东。skyx强力推荐
 sudo sudo apt-get install bum #系统服务管理软件
 sudo apt-get install sysv-rc-conf #一款基于perl的开机进程调整工具,sysv-rc-conf执行命令即可
 sudo apt-get install rcconf # Debian Runlevel configuration tool
 sudo apt-get install rar unrar p7zip* #安装rar 7zip
 sudo apt-get install rpm alien #安装rpm支持
 sudo apt-get install yum rpm #redhat相关
 sudo apt-get install xpdf xpdf-chinese-simplified #安装pdf查看软件
 sudo apt-get install xchm xpdf-chinese* #安装chm查看软件
 sudo apt-get install gnomebaker k3b#安装刻录软件
 sudo apt-get install brasero #gnome上的刻录软件
 sudo apt-get install subversion #svn
 sudo apt-get install meld #一个文件、目录比较器
 sudo apt-get install kompare # 又一个文件比较器
 sudo apt-get install xxdiff #- a graphical file and directories comparison and merge tool
 sudo apt-get install mc #类似norton commander 工具,skyx 吐血推荐
 sudo apt-get install gnome-commander #gnome 上类似Total commander的工具
 sudo apt-get install krusader #kde 上类似Total commander的工具
 sudo apt-get install rox-filer#一个简单的文件管理软件
 sudo apt-get install ghex #GNOME 上的十六进制文件编辑器
 sudo apt-get install rxvt yakuake tilda kuake konsole multi-gnome-terminal pyqonsole #几个终端
 sudo apt-get install pcmanx-gtk2 qterm mozilla-plugin-pcmanx #安装bbs 客户端
 sudo apt-get install mozilla-thunderbird thunderbird-gnome-support latex-xft-fonts #thunderbird
 sudo apt-get install ntfs-3g ntfs-config #ntfs写入支持,装完后运行ntfs-config,把两个钩打上即可。楼下方法作废
 sudo apt-get install googleearth googlizer gtalk#google相关,skyx友情提示:不推荐马甲 gtalk
 sudo apt-get install kvm #Full virtualization on x86 hardware 华推荐
 sudo apt-get install vmware-player #Free virtual machine player from VMware
 sudo apt-get install socks4-server socks4-clients #一个socks 代理服务器/soks4代理客户端
 sudo apt-get install liferea #超强的rss reader ,明显比akregator好用, 由zhuqin_83吐血推荐
 sudo apt-get install axel-kapt gwget aria2#多线程下载工具,也可在论坛search 超强工具prozilla,由雕啸长空吐血推荐
 sudo apt-get install privoxy #河#蟹# mixmaster anon-proxy socat#突破风锁线和雁过无痕
 sudo apt-get install kdebluetooth #超简单的ubuntu与蓝牙手机互传文件工具
 #蓝牙请参见:   http://www.in9.cn/r.php?url=http://forum.ubuntu.org.cn/viewtopic.php?t=61426&highlight=
 sudo apt-get install build-essential #build-essential
 sudo apt-get install proxychains #一个socks4 socks5代理软件 ,可以支持apt-get代理
 sudo apt-get install viewglob #一个shell相关的工具
 sudo apt-get instll eva amsn wengophone skype licq #安装im语音视频聊天软件
 sudo apt-get install beryl emerald emerald-themes#安装beryl
 sudo apt-get install gkrell* #很好的一个东东,装了就知道了
 sudo apt-get install conky# 有意思的一个系统monitor
 sudo apt-get install imagemagick# e(ee)大力推荐的批量修改图片的软件,现在论坛个别人在搞个人崇拜
 sudo apt-get install kolourpaint #又一个画图软件
 sudo apt-get install tuxpaint #好玩的画图软件
 rgbpaint #getdeb上有,最弱,但很小巧的画图软件
 mtpaint(getdeb上有,比gpaint强一点的画图软件)。
 sudo apt-get install rbot # ruby写的irc bot
 sudo apt-get install gqview #一个图片浏览器
 sudo apt-get install ksnapshot #一个抓屏程序
 sudo apt-get install vncserver #vncserver,vncview默认已经安装了
 sudo apt-get install tightvncserver tightvnc-java #另一个vnc
 sudo apt-get install vim-full #vim无法高亮显示,然后编辑 /etc/vim/vimrc,取消syntax on前面的"注释符号
 sudo apt-get install firestarter #图形接口的防火墙设定程序
 sudo apt-get install flashplugin-nonfree #安装浏览器Flash插件
 sudo apt-get install gftp kftpgrabber filezilla kasablanca#安装ftp客户端
 sudo apt-get install build-essential # 安装编译环境
 sudo apt-get install mysql-client mysql-server #安装mysql服务
 sudo apt-get apache2 mysql-server php4 php4-gd php4-mysql #安装LAMP
 sudo apt-get install d4x azureus amule ktorrent mldonkey-servermldonkey-gui rtorrent qtorrent bittornado-gui bittorrent-guitorrentflux deluge-torrent# 几个下载/bt/电驴 工具
 sudo apt-get install sysstat #安装sar, iostat and mpstat
 sudo apt-get install xvidcap gnome-splashscreen-manager #安装屏幕视频录制 / splash 管理
 sudo apt-get install istanbul #Desktop session recorder
 sudo apt-get install sysinfo xsysinfo#系统信息查看
 sudo apt-get install scrot imagemagick #截图工具

2012年9月26日星期三

latex 使用子目录

当需要大量的图形文件时,你可能希望将它们存放到一个子目录下。例如放到 子目录 images 下,这时你试图用如下的命令来插入图形 file.eps。
\includegraphics{images/file.eps}


这种做法存在以下问题:

  1. 效率不高,当打开大量的文件时,给出子目录名增加了文件名的长度,占用内存;
  2. 文件名中包括子目录会使文件依赖于操作系统;
对于图形文件存在于子目录下的情形,有两种办法:
  1. 将子目录加到TeX搜索路径中
  2. 用\graphicspath指明所用的子目录。
首先,介绍第一种方法:
用如下语句设置环境变量“TEXINPUTS”:TEXINPUTS=“/dir1:/dir2:”;export TEXINPUTS
当LaTeX在TeX搜索文件时,首先寻找目录dir1和dir2,然后再搜索默认路径。所以,可以将图形所在的子目录先加到环境变量中,然后直接:\includegraphics[]{aa}即可

第二种方法:
\graphicspath{{dir1/}{dir2}}告诉LaTeX从目录dir1/和dir2/下寻找图形文件。
然后在插入图形命令中:\includegraphics[]{aa}


补充:
在使用文件名时,尽量给出文件名的全称(包括扩展名),因为如果在没给出扩展名时,系统尝试打开多种格式的文件,如:
\includegraphics{file}
将使 \includegraphics 命令试图打开下列文件: file.eps file.ps file.eps.gz file.ps.gz file.eps.Z


2012年9月24日星期一

beamercolorbox环境

beamercolorbox环境可以在文本周围绘制一个矩形的frame.

用法:
\begin{beamercolorbox}[options]{beamer color}
contents
\end{beamercolorbox}

举例:
\setbeamercolor{postit}{fg=black,bg=yellow}
\begin{beamercolorbox}[sep=1em,wd=5cm]{postit}
      Place me somewhere!
\end{beamercolorbox}

常用的选项:
  • wd=width设定box的width
  • dp=depth 设定box的depth
  • ht=height 设定box的height
  • left 设定box中的文本左对齐
  • right 设定box中的文本右对齐
  • center 设定box中的文本居中对齐
  • leftskip=xx, 在box里设定leftskip
  • rightskip=xx,在box里设定rightskip
  • sep=xx, 设定文本周围extra space的size
  • colsep=xx, 设定文本周围extra color separation space
  • shadow=<true or false>, 在box背后绘制shadow
  • rounded=<true or false>, box的边界是rounded 
  • ignorebg 忽略背景色
  • vmode  vertical mode when the box starts,默认是hmode

2012年9月21日星期五

win7系统 麦克设置

偶然遇到,突然间QQ语音都没有声音,用win7自带的录音,也没有声音。

确定是驱动都安装正确,肯定是麦克风没设置好。

按如下步骤设置麦克风:
控制面板——硬件和声音——声音——管理音频设备——录制——外接麦克风(同时禁用其它麦克风)——属性(级别,麦克风)——配置——设置麦克风——耳机式麦克风

WIN+R, 输入soundrecorder,录音测试

\rule \hrule, \hfill, \hrulefill

\rule命令的用法:\rule[depth]{width}{height},详细见链接:
http://en.wikibooks.org/wiki/LaTeX/Rules_and_Struts
\rule一个很常见的用法是在一个box命令中加\rule{0pt}{height},绘制一个最小高度为height的柱子。

\hrule:绘制一条水平的rule(尺子),rule包含三个参数(width, length, depth)

举例:
\hrule    可以得到一条水平直线(默认宽度为0.4pt,length适应周围环境)
\hrule width2pt length 2cm depth2pt  可以得到一条定制的直线

同样,也有\vrule命令,绘制一条竖直的rule。如果\hrule和\vrule参数一致,得到的结果也相同。

\hfill: 水平空白,弹性长度填充。

举例:
This \hfill is a text.     This将会左对齐,is a text将会右对齐,中间就是\hfill填充。之所以是弹性长度,是根据内容来填充空白。

\hrulefill:一行剩余的空白用rule填充。
该命令与\hrule的不同在于:两者生成的直线上下空白不同,且\hrulefill是填充剩下的空白,而\hrule在该行下重新绘制一条直线。

\vspace和\vskip命令的区别

在编写latex文档时,\vspace和\vskip命令都能产生一个垂直距离。然而两者有什么区别呢?

1. \vspace是latex命令,\vskip是tex命令。

2. 使用方法:
\vspace{1cm};
\vskip 1cm;

3. 效果的区别
\vspace命令是在命令出现的当前行输出完后,才生成垂直间距;生成间距后,继续之前段落的内容(逻辑上还是相同的一段);

\vskip命令是在命令出现时立马生成垂直间距;生成间距后,开始一个新的段落(逻辑上分段)。

2012年9月20日星期四

vim批注的快捷方式

这里不介绍常用的visual模式下方法,也不给出常用命令的替换方式,而是给出一种映射方式。
当然,NERD_comment.vim插件也提供了快捷注释的功能,这里也不多述。

这里的注释符号以‘%’为例,在vimrc文件中加入如下语句:
" F4 for comment

vmap <F4> :s=^\(\)=\%=g<cr>:noh<cr>                 % visual 模式下
nmap <F4> :s=^\(\)=\%=g<cr>:noh<cr>                 % normal 模式下
imap <F4> <ESC>:s=^\(\)=\%=g<cr>:noh<cr>      % insert模式下

" F6 for uncomment
vmap <F6> :s=^\(%\)==g<cr>:noh<cr>
nmap <F6> :s=^\(%\)==g<cr>:noh<cr>
imap <F6> <ESC>:s=^\(%\)==g<cr>:noh<cr>

本质也是vim的替换命令。
:noh表示nohlsearch命令。

重新打开一个新的terminal后,F4和F6就可以用来添加注释和取消注释了。

2012年9月13日星期四

octave 默认编辑器修改

octave的默认编辑器是emacs,如何将其修改为vim或gedit呢?

首先,新建~/.octaverc文件;

然后,在文件中添加如下语句:
edit editor "vim %s"                                                #使用gvim作为编辑器
edit editor "gnome-terminal -e \"vim %s\""         #在gnome-terminal中打开vim作为编辑器
edit editor "gedit %s"                                             #使用gedit作为编辑器


其中,前两句修改成vim,后一句修改成gedit,根据情况自己选择其中一种吧。

2012年9月11日星期二

latex 数学粗体符号

数学符号通常要求是斜体,如何获得斜体粗体符号呢?

latex中,通常有以下三种主要方式获得粗体符号:
  1. latex自身提供的\mathbf命令
  2. "amsmath"宏包提供的\boldsymbol和\boldmath命令;
  3. "bm"宏包提供的\bm命令.
以上三种方式又有哪些区别呢?

首先介绍\mathbf命令
  • 用法:$\mathbf{abc}$
  • 该命令可以得到粗体字母,但是是直立罗马的粗体,并非斜体;
  • 该命令只对普通字母a-z,A-Z起作用;
接下来介绍\boldsymbol
  • 用法:$\boldsymbol{abc}$
  • 该命令可以得到斜体粗体字母;
  • 该命令即可以对普通字母起作用,也可以对希腊字母起作用.
\boldmath命令
  • 用法:\boldmath    $abc$   \unboldmath
  • 该命令可以得到\boldsymbol命令的结果
  • 该命令是对整个数学公式起作用(包括数学公式中的标点符号等),而其它几个命令都是对公式中的部分符号起作用。
\bm命令
  • 用法:\bm{abc}
  • 该命令与\boldsymbol命令结果相同
举例:

$\mathbf{\sigma}$ \qquad $\mathbf{abc}$ \qquad $abc$ \\
$\bm{\sigma}$ \qquad $\bm{abc}$ \qquad $abc$ \\
$\boldsymbol{\sigma}$ \qquad $\boldsymbol{abc}$ \qquad $abc$ \\
\boldmath
$\sigma$ \qquad $abc$ \qquad abc
\unboldmath

以上代码,可以得到如下结果:
因此,在输入数学公式中,如果希望得到粗体符号,建议用\bm和\boldsymbol命令。

2012年9月10日星期一

latex-suite技巧总结

1. 输入模式下, F5插入环境
  • 在空白行,按下F5后,会给出一些环境选项,如果没有你想要的环境名,可以直接输入。
  • 如果一行中有个word,按下F5后,该word即作为环境名;
  • 选中一些文本后,按下F5,选择或者输入环境名后,选中的文本即可作为该环境的内容。
  • SHIFT+F5,更换环境名
2. F7与F5作用类似,不同的是F7插入的是命令。SHIFT+F7, 更换命令名。
3.输入((,{{,[[之类的符号可自动替换成\left\right类型
4.三个大写字母,快速插入环境
  • EFA ----->   flushleft                   
  • EFR ----->   flushright
  • EEA ----->   equarray
  • EEQ ----->   equation
  • EQE ----->   quote
  • EQN ----->   quotation
  • ELI   ----->   list
  • EDE  ----->  description
  • EEN  ----->  enumerate
  • EIT   ------> itemize
  • ETE   -----> table
  • ETR   -----> tabular
5.双引号可自动替换成``或'',而且是自动左右匹配
6. 设置编译命令
打开.tex文件,normal模式下,输入\ll命令,可以编译文件;\lv命令可以查看编译结果;但通常情况下默认的编译命令对应的是latex, 查看结果对应的是dvi.
现在希望使用pdflatex命令,用evince查看pdf文档,修改~/.vim/ftplugin/latex-suite/texrc文件:
第一处(91行左右,不同版本位置稍有不同),
88 if has('macunix')
89   TexLet g:Tex_DefaultTargetFormat = 'pdf'
90 else
91  TexLet g:Tex_DefaultTargetFormat = 'pdf'
92 endif

让tex总是被编译成pdf

第二处(147行左右),
144  elseif has('macunix')
145  "Let the system pick. If you want, you can override the choice here.
146  TexLet g:Tex_ViewRule_ps = ''
147  TexLet g:Tex_ViewRule_pdf = 'evince'

指定用evince程序打开pdf文档。

重启VIM后,以上修改即可生效。
:TTarget命令可以 修改默认的文件格式。
7. 一些快捷键设置(在~/.vim/ftplugin/tex.vim中修改):
nmap   <Tab>  <C-j> 用Tab键代替Ctrl-j跳转
imap   <Tab>  <C-j>
vmap   <Tab>  <C-j>
map    <F2>   <ESC>:w<CR>\ll   "F2保存并编译(如果maplead改成了",",该命令变为,ll)
imap   <F2>   <ESC>:w<CR>\ll
map    <F3>   <ESC>\lv               "F3查看
imap   <F3>   <ESC>\lv

8. 临时取消快捷键定义,比如你想输入双引号,可是一打出"就自动变成``,那么要怎么禁止自动替换,直接输出"呢?记住 <Ctrl-v> 即可!如:
<Ctrl-v>"            得到 "
SS<Ctrl-v>S      得到 SSS
~<Ctrl-v>~         得到 ~~


latex插入多种格式的图片

latex撰写文档的时候,通常要处理多种格式的图片,如何正确处理呢?

首先,简单介绍一下常见的几种图片格式:

  • eps    矢量图形,latex能较好处理该格式图片
  • jpg    位图,通常照片的格式
  • png   位图,方便网络传输的图片格式
  • tiff     位图,有压缩和非压缩格式
  • pdf    (pdf格式的图片兼容性应该很好,因为最后的文档格式也是pdf格式)
然后,介绍常用的latex编译命令,及其能处理的图片格式:

     1.   latex+dvipdfmx (等价与latex+dvips+ps2pdf)
          该命令只能处理eps格式的图形文件
     2.   pdflatex
          该命令能够处理jpg, png, jpeg, pdf格式
     3.   xelatex
          该命令能够处理eps和jpg格式的图片

那么,如果需要同时插入eps和png等其它图片格式,该怎么做的?

解决思路有两种:
  1. 将所有的图片格式转成eps,然后用组合命令latex+dvipdfmx处理;也可以将eps转成其它格式处理(推荐转成pdf),然后用pdflatex处理;
  2. 修改命令方式或第三方宏包来进行处理,而不需要对图片进行转换。
利用第一种思路,涉及到图片格式的转换,以下简单介绍转换方法。
  • png  ----->  eps                ImageMagick/netpbm命令
  • jpeg ----->  eps                ImageMagick/netpbm命令
  • tiff   ----->  eps                ImageMagick/netpbm命令
  • eps  ----->  pdf                epstopdf命令
  • tiff   ----->  png               ImageMagick/netpbm命令
  • tiff   ------> pdf                tif2eps+epstopdf命令
此外,还有convert 命令(可以用脚本实现批处理),ImageMagick/mogrigy命令(可以批处理)。

注:ImageMagick是linux系统下一款图形格式转换软件。

利用第二种思路,实现pdflatex编译命令能够处理eps图片

方法一:将eps图片转成pdf格式,\includegraphics{pic},pdflatex自动调用相应的pdf文件;

方法二:加载epstopdf宏包,\usepackage{epstopdf}, 编译时命令需要带上参数,如下:                  pdflatex -shell-escape filename.tex   (如要生成索引,该命令需要执行两次)

2012年7月11日星期三

ubuntu下安装ifort xe

Intel Fortan Compiler简称ifort, windows下的ifort是收费的,但是linux系统下提供免费的ifort,可以在下面的链接中下载需要的版本(必须先注册,随后会收到官网发来的邮件,里面提供了接下来安装需要的series-number)http://software.intel.com/en-us/articles/non-commercial-software-download/

在安装ifort之前,需要先安装一些软件包
sudo apt-get install build-essential
sudo apt-get install g++
sudo apt-get install gcc-multilib
sudo apt-get install rpm
sudo apt-get install openjdk-6-jre-headless
sudo apt-get install libstdc++6

将下载下来的文件解压  tar -zxvf l...tgz

安装
进入上面解压过后的文件夹,./install.sh
安装一共分六步,根据自己的需要选择设置信息,一般一路enter下去即可。

修改运行环境信息
将source /opt/intel/bin/ifortvars.sh ia32 (或者根据安装最后一步的提示将红色部分替换掉)添加到 ~/.bashrc文件里

检测安装是否成功

2012年7月2日星期一

Ubuntu 命令行打开pdf文件

为了不用每次查看文件都要去打开文件夹,双击打开文件,用命令行查看pdf文件大大提高了工作效率。

在命令行窗口中输入:evince filename.pdf,即可打开filename.pdf文件

为了不用每次输入evince命令,可在.bashrc文件中加入alias evi='evince',然后source .bashrc即可。再重新打开的新的命令窗口中,evi就生效了

2012年6月27日星期三

Ubuntu下网速慢的原因及其解决方法

机子上安装了window7和ubuntn双系统,在window下上网速度良好,但是在ubuntu下网速慢了很多。很显然,这是系统设定或是网卡驱动问题。

首先,查看网卡驱动类型:
lspci | grep Realtek
得到的结果是:Ethernet controller: Realtek Semiconductor Co. Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 06)
查询相关资料,http://forums.linuxmint.com/viewtopic.php?f=49&t=80757,当前的驱动版本只在3.0核系列运行良好。

解决办法:
下载Linux网卡驱动:http://www.realtek.com.tw/Downloads/downloadsView.aspx?Langid=1&PNid=13&PFid=5&Level=5&Conn=4&DownTypeID=3&GetDown=false#2
解压文件至任意位置;
打开命令终端,进入解压后文件夹,sudo ./autorun.sh

更新结束。 每一次升级系统,都需要更新驱动。

参考资料:
http://ubuntuincident.wordpress.com/2011/12/15/wired-network-speed-is-very-slow/

2012年6月22日星期五

latex宏包汇总 (持续更新)

1. ragged2e
自动断词
2. color
设置字体颜色
3. geometry
设置页面格式(如页边距等)
4. enumerate
设置编号
5. graphicx
插入图形
6. subfigure
插入子图形
7. float
浮动图形位置
8. caption
设置图片标题格式(标题字体大小,标题距图形的间距)

latex 插入图形位置的控制

图形环境有一个可选参数允许用户来指示图形可能被放置的位置,常用的选项参数为:
H或h ---- 当前位置,即该图形环境的地方
T或t  ----  页面顶部
B或b ----  页面底部
P或p ----   浮动页,将图形放置在一只允许有浮动对象的页面上

如果在图形环境中,没有给出上述任一参数,缺省为[htbp],默认顺序是h-t-b-p

如果不喜欢latex自动安排图形位置,可以使用下面两种方式设定图形位置
方法一:   使用float
首先在导言区加上: \usepackage{float}
然后在需要插入图片的地方设置图片插入位置,如\begin{figure}[H],或者\begin{figure}[T]

方法二: 设置图片自动排版顺序
如果,在插入图片的位置使用\begin{figure}[!htb]   %禁止自动排版图形位置,则默认插入到当前位置;
如果,在插入图片的位置使用\begin{figure}[h]或\begin{figure}[t]或\begin{figure}[bth],则按设定的位置排版图形(该方法要求字母h,t,b,p为小写)

latex 插入图形

LaTex中一般只直接支持插入eps格式的图形文件,因此在图片插入之前,需要获得eps格式文件。

ps文件转化为eps文件
Linux系统下,利用命令ps2eps将ps文件转化为eps文件

将生成的eps文件,放到.tex文件的同一目录下

插入图形:LaTex插入图片是通过一些latex图形处理宏命令来实现的,主要有graphicx包,psfig包,epsfig包等,这里主要介绍第一个包的用法。
1. 在文档导言区部分加上:
\usepackage{graphicx}
2. 在需要插入图片的地方引用
\includegraphics[height=高度]{图片文件名}    或者
\includegraphics[width=宽度]{图片文件名}
其中:高度和宽度必须给出单位,可用cm或in作为单位。如[height=1.5in]
图片文件名是指欲插入的图片文件的文件名,图片通常是eps格式的(对于jpg, png格式,通常也适用)。
此外,还可以使图片旋转,\includegraphics[height=高度][angle=角度]{图片文件名}
3. 包含eps文件格式的tex文件编译
首先:用latex命令编译tex文件            latex *.tex
然后: 用dvipdf命令编译.dvi文件       dvipdf *.dvi
当然,可以用xdvi命令查看.dvi文件    xdvi *.dvi

latex插入子图
当需要插入的只有一个图时,利用上述的方法即可解决;如果需要插入多个图,每个图都有个子标题,然后有个总的大标题时,可用下面的方法。
1. 在导言区加上  \usepackage{subfigure}
2. 在需要插入图片的地方加入如下代码:
\begin{figure}[H]
\centering
\subfigure[SubFigure1Caption]{
       \label{Fig.sub.1}
       \includegraphics[height=x]{Figure1Name.eps}}
\subfigure[SubFigure2Caption]{
       \label{Fig.sub.2}
       \includegraphics[height=x]{Figure2Name.eps}}
\caption{FigureCaption}   %总的标题
\label{Fig.Label}
\end{figure}

参考资料:

2012年4月20日星期五

ubuntu下安装G77


用如下方法安装g77
  1. 在/etc/apt/source.list中最后头添加如下源(以root的身份,或用 sudo):
  deb http://hu.archive.Ubuntu.com/ubuntu/ hardy universe
  deb-src http://hu.archive.Ubuntu.com/ubuntu/ hardy universe
  deb http://hu.archive.Ubuntu.com/ubuntu/ hardy-updates universe
  deb-src http://hu.archive.Ubuntu.com/ubuntu/ hardy-updates universe
  2. . 然后执行如下:
  sudo apt-get update
  sudo apt-get install g77

2012年4月2日星期一

matlab计时

1. tic, toc函数


tic; %计时开始
program body;
toc;   %计时结束


2. cputime函数    %  显示matlab启动后,所占用cpu的时间


t0=cputime;
program body;
t=cputime-t0;


3. clock, etime函数
clock: 显示系统时间;etime: 计算两次调用clock的时间差;


t0=clock;
program body;
t=etime(clock, t0);



2012年3月16日星期五

matlab 拟合

多项式拟合
p=polyfit(x,y,n)
其中x,y是输入数据,对应自变量和应变量;n表示多项式拟合的阶数。
函数的结果p是多项式的系数;
Y=polyval(p,x1)
根据拟合求出的多项式系数p,求解x1变量对应的y值;

2012年3月14日星期三

频谱分析



信号的分类
信号分类的方法有很多,这里只给出四种后面将会涉及的分类方式。
按数学关系:确定性信号和随即信号;
按能量特性:能量信号和功率信号;
按取值特征:连续信号和离散信号;
按重复特性,周期性信号和非周期性信号。
随机信号:不能用确定的数学关系来描述的,其值的变动服从统计规律,常用一些数学统计量来描述该类信号的特征。
周期信号:每隔一定时间T,周而复始且无始无终的信号。
以下将重点阐述能量信号和功率信号的概念。我们选择一个具体的物理系统来引出这两种信号的概念。已知阻值为R的电阻上的电压和电流分别为v(t)i(t),则通过电阻的瞬时功率为:p(t)=v2(t)/R=i2(t)R。方便起见,假设电阻R1Ω。故在1Ω电阻上消耗的能量为:
                                                                      
其中f(t)为电压或者电流。
注意积分区间是从,如果积分值存在,则该信号为能量信号;如果该积分不存在,则考虑求该信号的平均功率,如下式:
                                                                  
若该值存在,则该信号即为功率信号。
几点备注:
ü  能量信号的平均功率为0,即E/TE有限,T无限)为0
ü  功率信号的能量为无穷,即PT(P有限,T无限)无穷;
ü  信号f(t)可以既非功率信号也非能量信号(如单位斜坡信号f(t)=tEP都不存在;
ü  信号f(t)不可能同时既是功率信号也是能量信号(容易理解);
ü  一般来说,周期信号和随机信号都是功率信号而非周期的确定信号是能量信号
ü  除了具有无限能量和功率的信号外,非周期信号要么是能量信号要么是功率信号;

时域和频域
时域和频域是信号通常的两个表示方式。
所谓时域就是自变量是时间,而纵轴是信号的变化,描述了信号在不同时刻取值的函数。
频域的自变量是频率,纵轴是该频率的振幅或相位或功率或能量,描述了一个信号的频谱结构。
如何将信号从时域转换到频域?
一般通过傅里叶变换将信号从时间域转换到频率域。注意,并不是所有的信号都能满足傅里叶变换的条件,通常情况下周期信号满足傅里叶变换的条件。对于测量中经常碰到的随机信号,并不满足傅里叶变换的条件。但是通常会截取其中一段(即样本,用样本的统计值来估计整体信号的频谱特征),而截取的这一段可以进行傅里叶变换,进而可进行功率谱分析。
将信号从时间域转换到频率域后,信号即可表示成很多的谐波之和。
振幅谱:用频域做横坐标,每个谐波的振幅做纵坐标,绘出的图形称为振幅谱;
相位谱:用频域做横坐标,每个谐波的初始相位做纵坐标,绘出的图形称为相位谱。
功率谱和能量谱:
(1)(2)式进行傅里叶变换得到信号能量和功率在频域的表示方式,这里不介绍推导过程,只讲述这两个概念的意思。
能量谱密度,也称能量谱,表示信号能量在各个频率的分布情况,信号的总能量等于各个频率分量单独贡献出的能量的连续和。
功率谱密度:也称功率谱,反映了信号功率在各个频率的分布情况,信号的平均功率等于各个频率分量单独贡献出的功率之连续和。

随机信号的特征
随机信号是一类持续时间无限长,具有无限大能量的功率信号,它不满足傅里叶变换条件,而且也不存在解析表达式,因此就不能应用确定信号的频谱计算方法去分析随机信号的频谱。然而,虽然随机信号的频谱不存在,但其相关函数确实是确定的。如果随机信号时平稳的,那么其相关函数的傅里叶变换就是它的功率谱密度函数。
由于在测量中经常用到的是随机信号,这里简单给出描述随机信号的数学指标。这些指标通常包含期望、方差、相关函数、自协方差、互相关函数、互协方差等。

功率谱密度估计
本文以下将详细介绍功率谱估计的方法及其matlab实现。功率谱估计的方法可以分为经典谱估计法和现代谱估计法。
首先,给出一个结论:随机信号自相关函数的傅里叶变换为信号的功率谱密度,互相关函数和互功率谱密度也是一傅里叶变换对。
经典谱估计法概述:
经典谱估计法最常见的有BT(Blackman-Tukey)法和周期图法,它们都是通过傅里叶变换来实现的。BT法是间接法,它先由采样数据估计不同延迟的自相关函数,然后用不同的窗函数对自相关估值开窗加权,再对加权后的自相关估值做傅里叶变换,得到功率谱估计。周期图法是直接法,它是直接将采样数据(也可经窗函数加权)做傅里叶变换,再取其幅度平方而得到功率谱估计。两种方法的结果是一致的。
然而,以上两种方法求出的功率谱分辨率低,故出现了一些改进的方法。大体改进思路是:对数据进行分段,每段求取功率谱密度,继而求平均功率谱密度;数据分段,每段用窗函数进行加权,继而求平均。此外,分割的每段数据还可以有数据重叠。
以上就是经典谱估计方法的发展历程,以下依次用简单的matlab例子进行说明。经典谱估计法的常用matlab函数有periodogrampwelch函数。
1、 直接法:
直接法又称周期图法,它是把随机序列x(n)N个观测数据视为一能量有限的序列,直接计算x(n)的离散傅立叶变换,得X(k),然后再取其幅值的平方,并除以N,作为序列x(n)真实功率谱的估计。
clear;
Fs=1000; %
采样频率
n=0:1/Fs:1;
%产生含有噪声的序列
xn=cos(2*pi*40*n)+3*cos(2*pi*100*n)+randn(size(n));
window=boxcar(length(xn)); %
矩形窗
nfft=1024;
[Pxx,f]=periodogram(xn,window,nfft,Fs); %直接法
plot(f,10*log10(Pxx));  %10*log10(Pxx)  %
将结果转化为分贝(dB
为了进一步说明直接法的原理,这里也给出了不用periodogram函数的直接法部分程序:
pxx1=abs(fft(xn(1:256),Nsec).^2)/Nsec;   %根据psd的定义
pxx2=abs(fft(xn(256:512),Nsec).^2)/Nsec;
pxx3=abs(fft(xn(512:768),Nsec).^2)/Nsec;
pxx4=abs(fft(xn(768:1024),Nsec).^2)/Nsec;
pxx=10*log10((pxx1+pxx2+pxx3+pxx4)/4)  % 转化为分贝
 2、间接法:
间接法先由序列x(n)估计出自相关函数R(n),然后对R(n)进行傅立叶变换,便得到x(n)的功率谱估计。
clear;
Fs=1000; %
采样频率
n=0:1/Fs:1;
%
产生含有噪声的序列
xn=cos(2*pi*40*n)+3*cos(2*pi*100*n)+randn(size(n));
nfft=1024;
cxn=xcorr(xn,'unbiased'); %计算序列的自相关函数
CXk=fft(cxn,nfft);
Pxx=abs(CXk);
index=0:round(nfft/2-1);
k=index*Fs/nfft;
plot_Pxx=10*log10(Pxx(index+1));
plot(k,plot_Pxx);
3
、改进的直接法:
对于直接法的功率谱估计,当数据长度N太大时,谱曲线起伏加剧,若N太小,谱的分辨率又不好,因此需要改进。
3.1Bartlett
Bartlett
平均周期图的方法是将N点的有限长序列x(n)分段求周期图再平均。
clear
Fs=1000;
n=0:1/Fs:1;
xn=cos(2*pi*40*n)+3*cos(2*pi*100*n)+randn(size(n));
nfft=1024;
window=boxcar(length(n)); %
矩形窗
noverlap=0; %
数据无重叠
p=0.9; %
置信概率
[Pxx,Pxxc]=pwelch(xn,nfft,Fs,window,noverlap,p); 
%该方法采用的主要是矩形窗
index=0:round(nfft/2-1);
k=index*Fs/nfft;
plot_Pxx=10*log10(Pxx(index+1));
plot_Pxxc=10*log10(Pxxc(index+1));
figure(1)
plot(k,plot_Pxx);
pause;
figure(2)
plot(k,[plot_Pxx plot_Pxx-plot_Pxxc plot_Pxx+plot_Pxxc]);
3.2
Welch
Welch
法对Bartlett法进行了两方面的修正,一是选择适当的窗函数w(n),并再周期图计算前直接加进去,加窗的优点是无论什么样的窗函数均可使谱估计非负。二是在分段时,可使各段之间有重叠,这样会使方差减小。
clear;
Fs=1000;
n=0:1/Fs:1;
xn=cos(2*pi*40*n)+3*cos(2*pi*100*n)+randn(size(n));
nfft=1024;
window=boxcar(100); %
矩形窗
window1=hamming(100); %
海明窗
window2=blackman(100); %blackman

noverlap=20; %
数据无重叠
range='half'; %频率间隔为[0 Fs/2]只计算一半的频率
[Pxx,f]=pwelch(xn,window,noverlap,nfft,Fs,range);
[Pxx1,f]=pwelch(xn,window1,noverlap,nfft,Fs,range);
[Pxx2,f]=pwelch(xn,window2,noverlap,nfft,Fs,range);
plot_Pxx=10*log10(Pxx);
plot_Pxx1=10*log10(Pxx1);
plot_Pxx2=10*log10(Pxx2);
figure(1)
plot(f,plot_Pxx);
pause;
figure(2)
plot(f,plot_Pxx1);
pause;
figure(3)
plot(f,plot_Pxx2);

分辨率与频谱泄露
在周期图法中,对有限长0-(N-1)的随机数据序列可以看做无限长的随机数据序列经矩形窗开窗截断的结果,我们知道两个时间序列相乘的傅里叶变换等于两个时间序列傅里叶变换的褶积。如果信号的真正功率集中在一个窄的频带内,则该褶积运算将把这个窄带的功率扩展到邻近的频段,这种现象称之为泄露现象。弱信号的主瓣很容易被强信号泄露到邻近的副瓣所淹没或畸变。对于短观测数据序列,功率谱轨迹的分辨率是不高的。

结论
在经典谱估计中,总体存在着频率分辨率低、方差性能不好的问题,原因是谱估计时需要对数据进行加窗处理,用有限个数据或其自相关函数来估计无限个数据的功率谱。