成功完成首次卫星通联试验

在今年的辞旧迎新博文《2011新年好》中,我提出了今年希望能完成的一个愿望,就是能够进行一次卫星通联试验。眼看一年时间过去大半,在计划就要搁浅的时候,向来瞬间执行力超强的好友BG4KKS以迅雷不急掩耳盗铃儿响叮当的速度购入了一根UV双段的八木天线,促成了这次试验。

2007年,南京三中的同学们曾经与国际空间站(ISS)的宇航员进行过一次十分钟的天地对话,这次活动前后花费了2年半的准备时间外加经费16万元,这无疑会让人觉得卫星通信试验是一件很高不攀的事情。实际上,除了ISS的官方的业余无线电活动(ARISS)外,还有不少给业余无线电爱好者使用的卫星一直在围绕着地球运转,在地面上使用一些简单的设备就有希望通过这些卫星上的中继器,把信息从一个地方传递到另一个地方。

2009年底,中国在太原卫星发射基地通过一箭双星的方式发射了我国第一颗业余通信卫星希望一号(HO-68),期望通过中国自己的业余通信卫星在太空中传递自己的声音成为我计划进行卫星通信试验的一个动因。遗憾的是,在准备这次通联试验时,我们才发现,希望一号从今年一月底开始就因为一些设备故障无法打开各转发器,仅存留一个等幅电报(CW)的发射器不断发出表示“我在这里”的信标。所以,通过希望一号传递信息已经变得不可能,只能尝试接收来自它的信标。作为替换方案,我们选择了另外两颗国外的卫星SO-50AO-27做为进行语音通信试验的目标。

通过卫星的调频(FM)转发器进行语音通信,其实跟在地面上通过中继台进行语音通信非常相似:无线电台把信号通过上行频率发送给中继台,中继台接收到信号后进行放大并重新在下行频率上发送出去。由于中继台的天线能力、高度和功率通常都会大于一般的移动电台,所以可以起到扩大通信范围的作用。卫星通信,就是让卫星充当中继台的角色,把地面发送给卫星的信号,重新转发回地面,以达到地面直接通信较难达到的更大的覆盖范围。

当然卫星通信与地面中继台通信也还是存在一些不同的地方:

1) 时间窗口:业余通信卫星很多为低轨道卫星,绕地周期很短,所以对于一个特定的地点来说,卫星每次经过上空的时间都很有限,只有几分钟到十多分钟时间。必须提前计算好卫星通过的时间和角度,并抓紧分分秒秒,才能完成一次通联。

2) 飞行轨迹:如果使用八木天线等定向性非常强的天线,必须在卫星飞行过程中不断调整天线的角度对准卫星,才能保证通信的正常进行,所以必须提前知道卫星飞过上空时的轨迹。同时,如果飞行轨迹的仰角过低(贴近地平线),而通信地点不是在高山上,则可能会由于建筑物的遮挡而导致通信比较困难。

3) 多普勒效应:由于卫星与地球间存在较高的相对速度,在卫星接近和飞离时都会出现多普勒效应,导致频率飘移,所以在通信过程中需要不断调整接收发射频率才能补偿多普勒效应,达到较好的通信效果。

4) 转发器工作状态:卫星上的转发器受到电力等各种因素的制约,有可能不是一直可用的,所以在进行卫星通联前需要预先了解卫星过顶时转发器是否正在工作。对于有些卫星(比如SO-50),还需要通过向它发送特定的亚音信号,才能在一个时间段内激活它的转发器。这些都是要在做准备工作时所关注的。

要获知卫星飞过所在地上空的时间和轨迹,需要进行对于普通人来说非常复杂的天文计算,好在有很多软件可以帮我们来完成这样的计算,GNOME Predict就是Linux下的这类软件。通过在软件中载入卫星轨道根数(开普勒参数)和所在地坐标,就可以算出卫星后面的经过时间和轨迹。在Windows下,可以使用Orbitron软件,功能更为强大。使用这类软件时,一定要确认把软件中的卫星轨道参数更新到最新的数据,不然就会得出错误的结果。也有一些网站会提供在线的跟踪和预测数据,临时需要查阅的时候也很方便。

Linux下的卫星跟踪软件,HO-68正在经过南京上空

Linux下的卫星跟踪软件,HO-68正在经过南京上空

我们所有的通信设备是仅仅是两个手持电台(俗称“对讲机”):YAESU FT-60R加上0.4米长的UV双段橡胶天线和Kenwood G71A加上新买的U段7单元V段4单元的八木天线,两个电台的最大发射功率都不到5W。另外,我们还用手机和GPS用来获得精确的时间、位置和角度信息。

Kenwood G71A和UV双段八木天线

Kenwood G71A和UV双段八木天线

星期六晚上在仙林某学校的教学楼楼顶进行了第一次试验,首先是尝试抄收希望一号HO-68的信标信号。首次试验免不了有点手忙脚乱,不过还是非常顺利的在两个电台上都抄收到了来自太空的信号:一阵“噗噗”的声音。因为希望一号的信标信号是不到200mW的CW信号,而我们没有用于抄收CW信号的设备,只能用调频设备去接收这个信号,CW信号经过调频设备“错误”的解调后,就只能得到一串“噗噗”的噪音,而不是一般人想象中的”嘀嘀“的电报声。这些“噗噗”声按Morse码解码后就得到了希望一号信标的内容,包含它的呼号BJ1SA,遥测信号起止符XW XW和相关遥测数据。

一段完整的希望一号HO-68信标录音(有剪辑):

继续尝试通过SO-50进行语音转发,虽然我们有两个电台,但由于只有一个“牛”天线,所以很难进行有效的通联。不过我还是抱着“侥幸”心理通过我的FT-60R加上橡胶天线进行了一次呼叫,G71A上抄收到了这个信号!虽然信号非常的微弱几乎被淹没在噪音中难以辨识,但是我们的声音的确是变成电波实实在在的去天空转了圈又回到了地球上,心情非常激动。不过这也就是我们这天在SO-50上的唯一收获了。

有了周六的基础,周日下午我、BG4KKS和BG4XPH一同再次试验SO-50和AO-27时就显得更加信心十足。成果也很不错,在SO-50上,我们抄收了若干日本业余电台的通联过程,不过由于信道很繁忙,我们没有机会插入呼叫。在AO-27上,我们成功完成了与泰国电台HS35NP的通联,信号55(语音清晰,信号强度中等),并联络上了沈阳的BG2TOS。

卫星飞得很快,每次有效通联试验的时间也非常短暂,前后准备和等待了一天多时间,实际能说上话的时间也就不足5分钟,颇是意犹味尽。在一个电话就能打遍全球的年代,业余无线电通信这种古老而又“高科技”技术显得很没有性价比。然而无线电运动的魅力也许也就在于每次你想说话时,不知道能不能说得成,也不知道会跟谁说上话。期待下次卫星通联试验。

除了完成了卫星通联试验,周日早上在栖霞山上还完成了数次UV段的远距离通信,这天的信号传播很给力,我们成功联络了南京、仪征、常州、无锡、芜湖、宜兴和南通等地的电台,收获颇丰。其中与南通的直频通信(不通过中继)直线距离达到了190公里,打破了我所参与过的通信试验中黄山到芜湖直频149公里的小小记录。

在即将结束一天活动前,我们在仙林的亚东城某高楼顶还第一次观测到了国际空间站(ISS)飞过南京上空的景象,它的亮度很高,所以用肉眼就可以轻松观测。唯一的重点是你得知道它会在这个时候飞过你的上空,并且最好知道经过的轨迹,这样才会比较容易在天空中找到它。怎么才能知道这些信息?请参考本文第十段……

魔术小游戏 – 猜车厢

整理硬盘时发现了这个2002年时写的已经被我自己都忘记到犄角旮旯里的小程序,虽然它从2002年8月起就一直在Internet上以一个几乎固定的URL存在,也曾经在CSDN软件中心发布过,但似乎所有的搜索引擎都没有发现它的存在。

这是一个魔术大师大卫·科波菲尔的观众互动魔术的翻版,某年春晚上李咏用过一个演化的版本表演过。最近看了一本不错的数学科普书:从惊讶到思考-数学的印迹,其中有一节介绍了一些电视互动魔术中如何通过概率学原理给人造成错觉。不过我这个魔术不是错觉,而是有简单而确定的数学原理在里面,想不明的TX可以到我的那篇有关二进制的文章里去寻求启发。

下载地址是:http://www.freemindworld.com/g34/csdn/Magic.zip

程序截图

程序截图

UI比较丑。用VC6写的,Windows用户应该没有鸭梨,Linux用户可以用wine,但预先要把Visual C++的运行库装上。从现在的眼光看,用原生应用程序来做这么简单的应用实在是自找麻烦,完全可以很简单的用JavaScript在网页上来实现。我在考虑是不是可以做一个在Bambook上运行的Widget呢?

劳动节到了,祝大家节日快乐!

折腾O2 Joggler

由于我的WD My Book World Edition在内存升级过程中遇难,好友给我介绍了一个新玩具:O2 Joggler电子相框,它是一个OpenPeak给O2 OEM的产品。

记得曾经某人在拿到作为T公司20周年纪念品的电子相框后,在第一时间把它大卸八块,然后失望的把它合起来——一个基于VCD芯片做的相框实在没有什么好折腾的。相比之下,O2 Joggler的硬件配置就很有折腾的余地:Intel Atom Z520 1.33 CPU, 512 RAM, 1G Flash, GMA500, 7寸800*480电容触摸屏, RT8169 1000M网卡, RA2870 802.11N无线网卡, 1 USB 2.0。而曾经在HiPDA论坛上的团购价格已经低至450元。

O2 Joggler,相机不在手头,就从网上找个图吧

O2 Joggler,相机不在手头,就从网上找个图吧

虽然配置不错,不过很快就会发现它做什么东西都有软肋:做下载机要外接硬盘,做平板电脑用的话它没有电池,做车载多媒体设备的话它没有GPS和3G模块,做高清播放盒吧它没有视频输出接口。我的目的还是用它做下载机,所以直接用硬盘底座外挂3.5寸硬盘,按着当年折腾My Book的方法折腾它。

操作系统选择:理论上任何可以通过EFI引导的x86操作系统都可以。出于驱动的原因,目前比较完善的还是基于Ubuntu的GNU/Linux发行版,尤其是适合于Netbook的REMIX或者Mint,Android 2.2的工作还在进行中。我还是选择了我最熟悉的Debian,虽然这也许不是个最好的选择。编译Linux Kernel需要的Patch在这里有个列表。Joggler自己有一个原生的定制过的GNU Linux操作系统,也可以用于实现各种应用,但各种前端应用都需要基于Flash来做。

操作系统安装:网上有不少已经装好的镜象,可以直接用。对于我来说,则是用debootstrap装一个干净的Debian才会比较合我口味,大部分的工作可以参考JogglerWiki上的这篇文章来完成。目前,标准安装一个Debian + XFCE的桌面,基本上可以把大小控制在1G以内,这样就可以把操作系统放到Joggler内置的Flash中。当然,在实验各种系统时,还是先放在U盘上外置引导会比较让人放心,因为这样完全不会动到原来的系统,就不致于把Joggler变成砖头。

应用软件:反正是个标准的x86的GNU Linux,其它应用软件您该怎么装怎么装吧……从这个角度来说,Joggler太像一台真正的电脑了,所以反而也没有太多可以折腾的地方。

目前Joggler相关的资料比较完整的地方是JogglerWiki,我在这里索引一下比较有用的一些信息。

1. 拆机视频:拆机可以把USB无线网卡拨掉换成个大U盘内置,可以接出更多USB口,可以换CPU散热片(目前相框的支架就是CPU的散热装置,最好别把它拆了),加装ZIF接口的PATA硬盘

2. Joggler的有线网卡没有MAC地址,必须用软件设置

3. 内置Flash跟外置的U盘一样可以引导系统,你可以用fdisk对它重新分区合并使用。但必须保持第一个分区是FAT的EFI的引导分区。这里有些资料可以参考。Joggler不是很容易变砖的,实在你很不幸的把它变砖以后,还可以通过热插拔EFI芯片解决。

4. 内置喇叭在闲置时可能会会轻微爆音,MS是由于CPU节能引起,解决方法有若干种,但好像不是每个人都说有效。

5. 在我这里外置USB硬盘有时会出现异常断开的问题,这个问题对于下载机来说会非常致命,尤其如果系统是装在USB设备上的话,会直接导致系统死掉。目前的线索是一个Ubuntu的一个BUG报告,不过我还没有试成功,而最近几天这个问题却似乎没再出现。

6. 很多人报告Joggler发热量太大,70度以上后自动降频后慢到无法使用。但我这里没有出现过,温度一般在35-41度左右,长期开Flash应用(比如豆瓣电台)会升到51度。如果屏幕长期打开会更热一些。

7. 在我的系统中,Google Chrome常常会导致系统完全死锁,不知道是不是跟这个有关,总之我直接换用Firefox绕过了这个问题。

8. Joggler还有一个很不起眼的设备,那就是它顶上的一个光线传感器,加载i2c的模块后,可以用程序读它的数据,通常可以用来调整屏幕亮度用。相关代码在这里

9. 理论上Joggler的硬件配置播放1080p的高清视频是没有问题的,当然你需要自己编译一个VAAPI的mplayer。不过我这里实测结果是720p的视频播放基本问题不大,但1080p还是基本没戏,我对此表示无鸭梨,难道我真的需要在这么小的屏幕上放这么高清的视频么?

目前我的Joggler在我这里是勤勤恳恳的运行rtorrent和amule-daemon做下载机,用cronjob打开豆瓣电台做闹钟。更多的应用就慢慢再开发了。

盛大Bambook锦书首发体验

虽然有段时间不太看好E Ink了,但上个月还是莫名其妙脑子发热预定了一个盛大的Bambook锦书。最近E Ink产品价格有很大松动,不过至少在一个月前,6寸屏的E Ink卖999的价格还是比较厚道的。

盛大对内测用户的不公对待和9月28日这样尴尬的发布日期(考虑到长假和物流速度)引发争议和失望无数,还好最后还是争了一口气(也要多亏那常常不争气的宅急送也争了口气),让一小半的预定用户在28日当天收到了Bambook,剩下的应该也有一大半可以在长假前收到。

谈谈到货后的第一体验。在快递员面前当面打开包装验机:包装没得说,内外两层都不错。Bambook自身的设计也算漂亮,做工精致,比某个号称做礼品级电纸书的厂商的产品要精美的多。开机速度则很让等着我验货快递员GG觉得不爽:大约需要90秒的时间,还好电子书很少需要关机。打开包装开机前屏幕上没有任何显示,其实如果像Kindle一样默认可以显示一个简单的使用说明也许会是个不错的设计。开机后有一个新用户向导,马马虎虎。

盛大Bambook锦书

盛大Bambook锦书

Bambook使用的是16级灰度的E Ink屏幕,指标上来看是不错的,不过如果只是看小说,也没有什么用处。我不看漫画,只能放张照片进去看看,确实比以前用的汉王N510的显示效果要好上很多。不过总体感觉上屏幕的底色比较重,“纸”不白,不知道是不是因为外壳太白的原因。

最值得一提的是翻页的速度,默认的情况下,翻页的速度已经非常快。比我见过的翰林V3、汉王N510和Kindle 2都要快上一大截。如果在设置中打开了“速度优先”模式,则翻页的速度更上一个台阶,几乎看不到翻页的闪屏过程了。不过这种模式下翻久了“纸”的底色会变得更加发灰。

Wi-Fi的功能基本可用,除非你的Wi-Fi配置用了证书之类的比较麻烦的东东。通过Wi-Fi使用“云中书城”的体验也还不错,尤其是同步RSS的功能,还是很方便的,只可惜现在还不支持自定义的RSS,只能同步官方提供的一些源。听书功能的TTS合成语音比想象中的要强,不过对于我来说,这个功能好像没什么用。

Bambook对于我来说的最大软肋就是不支持自有书的直接阅读,任何格式(包括TXT)都需要用盛大的“云梯”软件(Windows-Only)转换成盛大的私有格式SNB才能放入Bambook阅读。那个转换软件的能力实在是不能让人恭维。目前我的做法是先用calibre把文件都转成EPUB,然后再用盛大的软件转成SNB,勉强可用。PDF就算了,在不能横屏显示的6寸屏上,也不用对它指望什么了。

其它的缺点要列也是可以列出一大堆,鉴于目前国内电子书产品的整体现状,懒得写了,总之Bambook要做为一个盛大旗下的文学网站的专用阅读器,现在看起来是基本合格的。如果主要想用它看看别的自有书籍(尤其是非文学),还是要慎重。

最后说说可折腾性。Bambook的硬件配置总体来看还算不错,但如果想要把OpenInkpot这样的开源固件移植到Bambook上,目前来看还缺少太多的信息。虽然Bambook用了Android系统,目前也似乎还没有流传出任何有关如何折腾的信息。我试了一下,Bambook无论是用USB还是Wi-Fi,连接后都以是网络的形式与外界交换数据。默认情况下,USB连接电脑后,会以RNDIS/Ethernet Gadget的形式出现(Windows/Linux中都可以),默认配置了静态IP 192.168.250.2。如果用Wi-Fi,则是以DHCP的形式获取IP地址。用nmap工具扫描这两个地址,都只能看到它开放了一个5000号的TCP端口,设备与盛大“云梯”软件的数据交换都通过这个端口进行。所以目前唯一Hack出来的一点点东西就是可以通过修改“云梯”安装目录下的config.ini文件,把里面的IP地址由192.168.250.2改成Wi-Fi分配给Bambook的地址后,可以实现“云梯”与Bambook的无线互连。也有人在研究SNB的文件格式,目前来前只能算是有初步的进展。如果把它分析透了,也许以后可以给calibre写个插件直接生成SNB格式。

学习机时代

不知道有没有朋友对下面的这个画面有所记忆。

游戏截图

游戏截图

那是15年前没有电脑用的年代。那时,在中国市场上,基于任天堂FC(Family Computer)的所谓“电脑学习机”曾经风靡一时,借着“学习”两字,欺骗了无数望子成龙的家长,大家争先恐后的把这种新型的家电引入家中,结果发现,家里又多了一台浪费时间、浪费视力的游戏机。

对于我来说,我是先看书学了电脑,然后才拥有了学习机,所以虽然学习机担负着游戏机的重任,更多的,它还是担负着模拟电脑的作用。在上面,我最多时间都花在写BASIC程序上面,其次是练打字(包括五笔字型),再其次是LOGO语言。我的学习机是金字塔的PEC-9388,跟下面这个图除了型号以外一模一样。金字塔是当年我觉得最有技术含量的一个学习机品牌,在我的印象中,它有很多创新的地方,比如,它可以外接打印机、软驱,可以扩展内存,可以通过图中那个简单的“声像转换器”播放“普里奇声像带”。然而,市场一次又一次的证明,技术不能代表一切。在“你拍一,我拍一,小霸王出了学习机”的广告声中,金字塔这个牌子很快消失在大众的视野中。

学习机照片

学习机照片

前几天跟一朋友聊天,他说,小时候玩学习机的时候一个很大的遗憾就是说明书上有一个很长的游戏程序一直没有成功运行起来过。

这个话题似乎很容易引起共鸣。要在学习机上成功运行这个最大行号达到2770的程序(实际上也就200来行)几乎每个人都会遇到共同的困难:打字可能还不够熟练;不熟悉F-BASIC语言;早期的学习机没有外存(或者虽然有存磁带的功能,但你没有一个可靠的录音机),断电输入的程序就没有了;程序运行出错不会调试;有些学习机说明书上的程序印刷存在错误……

迄今为止我总共把这个程序输入过4次,第一次完全没运行成功,一堆错误;第二次运行后在过第一关时出现逻辑错误,无法继续;第三次通过自己修改和调试,成功运行,并把它存入到磁带中;第四次,这几天在电脑上的学习机模拟器中把它又输入了一次,存入到虚拟磁带中。到现在我还清楚得记得前两次录入这个程序后把要学习机关机前的那种不舍的心情。

为了重温这个程序,上网找了一大圈,但毫无所获,只好辛苦母亲把当年那本学习机的说明书找出来,拍成照片传给我。真没想到这本书已经被我看得这么破了,上面还写着那时试图分析代码而写上去的注释。现在来看,这些注释写得真傻,完全不能帮助理解代码。Code Reading也是一门本领,还是要多多修练才是。

说明书

说明书

要找一个完美的模拟器,也不是一件容易的事,网上有很多小霸王学习机的ROM,但真正能在上面完全正常的运行这个程序的却并不好找。最后终于找到了一个可用的ROM,而且这个ROM中恢复了被小霸王学习机去掉了的存取磁带的功能。更让人惊喜或郁闷的是:这个ROM的压缩包里还带了一个虚拟磁带文件,读入内存后发现,这就是我踏破铁鞋无觅处的这个游戏程序,只不过做了一些修改。令人有点费解的是,这份代码的可读性很不好,比如:FOR循环的NEXT子句都放在一个语句的后面用冒号隔开而不单独写一行;很多语句中省略了很多空格:

2400 IF XPOS(4)>222ORXPOS(4)<24ORMOVE(4)=0 THEN ERA4:POSITION4,0,0

这种语法对于BASIC来说好像是不合法的,不过学习机可以正常的解析。

不过当我看到这个程序最后被加上了一段在通关以后播放音乐的子程序的时候,我马上就理解了为什么要把程序改得如此没有可读性:学习机的F-BASIC环境中可用的内存只有4030个字节,这个程序原本就很长,基本上已经到了内存用光的程度,为了加上这段子程序,就必须从前面的代码中省出内存来,所以,少打几个空格,把多行程序并入一行,都是为了省出宝贵的内存啊。这在现在这种内存跟大白菜一样便宜的年代,哪怕就是在做嵌入式相关的开发,也不太可以想象吧。

对于我自己来说,学习机给我留下的最大的遗憾是我一直没有搞明白它的汇编语言和调试环境。所以它的BASIC语言中PEEK/POKE和CALL这几个语句,对于我来说也是没有什么用而又异常神秘的。在那个资源和信息缺乏的年代,我抄过一本讲6502汇编的小册子,但这本书最终并没有帮助我学会6502汇编。如今,我有足够的积累和足够的信息可以去弄明白6502,但却是缺少了动力和精力去研究它,也许这个东西就已经永远的成为记忆的一部分了吧。

PS. 几个背景知识:

学习机中可以用来写游戏程序的BASIC环境,叫F-BASIC,也就是Family BASIC。可是小霸王偏要把它改叫G-BASIC(Game BASIC),而把F-BASIC用于Float BASIC,也就是指可以支持浮点运算的BASIC语言环境,结果就把这两个名词给搞混乱了。本文中的F-BASIC是指Family BASIC。

有关普里奇声像带,这个东西现在应该很多人都不知道了,好像连Wikipedia上都没有。这是一种可以用普通的磁带和立体声录音机,通过适当的设备,在电视上播放出画面(主要是静态的图像,过一段时间翻一页)和声音的技术。原理是在立体声磁带的两个声道上,一个声道录正常的单声道音频信号,另一个声道上录调制过的数据信号(听起来跟调制解调器发出的声音类似),然后由转换设备把数据信号解调出来并转换成图像显示出来。