Portapack
文章平均质量分 73
老邵的开源世界
老邵的开源世界
软件无线电和无人机飞控的代码讲解和应用开发
展开
-
Portapack信号源 AM调制 (二)
我还测过FM调制了。也能看到调制度降低后,频率变化范围会减小。但是我的示波器只有频谱图,没有瀑布图,所以无法准确了解FM调制的基带波形到底是怎么样,只能通过波峰左右晃动大概看看。可以看出时基最小的时候看到的都是正弦波,这是载波。时基大了以后看到的才是包络,而这种包络与日常看到的随机噪声很像。加完调制深度后,我还测了锯齿波,也没有昨天变成三角波的问题了。不过今天用的设备里的hackrf是r8,昨天是r9。昨天说了还差一个调制深度要加。时基100ns/div。原创 2024-03-01 09:52:48 · 413 阅读 · 0 评论 -
Portapack信号源 AM调制
只有CW时,可以看到中间有个尖峰,如果用示波器时域测量,能测出频率是100MHz附近。尖峰旁边有一些小尖峰是因为hackrf硬件的SFDR不好,产生的杂散,由于它们无法由软件控制,后面请尽量忽略这些杂散。你可以自己选择各种基带信号,比如方波、三角波等,但是这些信号都必须经过FM调制后发射出去。接下来发正弦波,这时候你会看到,包络在变化,类似正弦波,并且频谱上除了中间载波的波峰外,还左右对称出现两条尖峰,这就对应了正弦波的基带信号。上图是方波,看着比较正常,可以用光标测出基波也是500Hz。原创 2024-02-29 10:29:21 · 450 阅读 · 0 评论 -
Portapack应用开发教程(十九)NavTex接收 E
接下来,要做的是继续更改解码代码,让它不要从stdin读取方波解码,而是要从声卡读取采样点,然后对声卡采样点做fsk解调,对解调出的方波来解码。实现的功能是从stdout取出方波的采样点幅度,然后把它转为解码输出。我现在已经成功把两部分解码的代码合并到一起。原创 2023-05-04 05:40:38 · 452 阅读 · 1 评论 -
Portapack应用开发教程(十九)NavTex接收 D
代码开头和结尾确实有15和102,对应0x0F和0x66,也就是[alpha]和[rep],就是通过找这两个phasing_signal,我们才能找到正确的起始位置。上回说到,我现在已经做到用自己的gnuradio流图从音频信号做fsk解调,得到方波。然后用c程序把方波转为二进制数。但是遗留问题是python解码,起始位如果错误,解的信息是错的。另外,也没有实现两个字符串的错位输出(这个功能是很好理解的,但是为了简化代码,我暂时没做)。另外结尾处也分别写出了A和B两列,经过比较完全一致,说明接收正确。原创 2023-05-01 12:47:05 · 767 阅读 · 0 评论 -
Portapack应用开发教程(十九)NavTex接收 C
而是直接读取wav文件,得到方波,再把这种方波用类似nrf解码的方式,通过fifo送到后面的解码程序。我又仔细研究了一下python解码程序,目标是想办法把它转化为c++程序,然后再对接到gnuradio上,这样用gnuradio解调,用c++解码,就能基本实现navtex接收了。后面我要重新下载NRF24-BTLE-Decoder,把它做简化,然后收fifo的输出,再print出来,把波形对应的每个采样点的值都打出来。接下来要做的,就是想办法获得解调结果,把它和我们要写的c++程序连起来。原创 2023-01-30 11:47:08 · 652 阅读 · 0 评论 -
Portapack应用开发教程(十九)NavTex接收 B
网页编码器生成的是16bit 11.025kHz的音频。ipynb项目需要使用的是32bit 44kHz的音频。另外,我的gnuradio和portapack用的都是8bit 48kHz的音频。然后我先用网页生成全部是R的信息、全部是O的信息,以及RO相间的信息。我还用gnuradio看了这些音频的波型,在尝试找规律。可以用来解码音频文件里的navtex文字信息。它用的ipynb,我不习惯,转换为了如下的python代码。可以把文字信息转为navtex格式的音频。不过音频的格式不太一样。原创 2022-10-05 13:51:06 · 1374 阅读 · 0 评论 -
Portapack应用开发教程(十九)NavTex接收
并且把我查到的navtex调制频率变化freq_deviation 170Hz填入到模块中,还把我根据音频频谱图上的中心频率1500Hz作为选频滤波器的中心频率填入。因此可以直接忽略这部分,剩下的就是FSK了。再后来我还要简化一下流图,把第三方模块里有用的部分直接拿到我自己的流图里来,也能用,这也就是视频里用到的程序了。后来我又仔细比较了一下每一瞬间的波形长短,发现都能和安卓软件对得上,说明gnuradio解调就做好了。我数了一下0.1秒内有10个UI,和我查询到的navtex的波特率100正好对应。原创 2022-10-03 22:02:34 · 1141 阅读 · 0 评论 -
Portapack应用开发教程(十七)nrf24l01发射 C
接下来看一下几个相关项目的代码。重点看看调制部分是如何实现的。从难易程度排序,我认为最好先看send_simplified项目,然后再看send和recv项目,最后看BTLE项目(HackRF发射)。send_simplified项目:btle_nrf24l01/send_simpified.ino at main · jamesshao8/btle_nrf24l01 · GitHub这个项目十分简单,里面只有一个ino文件,没有调用RF24库,而是直接完成了编码和底层调用。开头的几个函原创 2022-02-13 23:14:31 · 841 阅读 · 0 评论 -
Portapack应用开发教程(十七)nrf24l01发射 B
本项目github:一年多以前我实现了PortaPack接收nrf24l01/btle数据包。后来我一直想实现portapack/hackrf发射nrf24l01数据包,之前的思路是通过更改gr-noridc里的发射代码给它自己的接收代码或者另几个开源接收项目。但是一直没有成功。无论是编码还是调制部分都有问题。后来我想到了一个新方法。既然hac原创 2022-02-13 07:09:59 · 882 阅读 · 0 评论 -
Portapack应用开发教程(十五) APRS接收 C
过去一年,我一直在更新PortaPack硬件,软件这块暂停了很久。其实我当时做的APRS接收一直是有点问题,不是每次发射都能正确解调,并且有时候会跳出乱码。这是因为我只是在参考aprs tx代码写rx,并没有真的找到标准协议。后来我发现mayhem固件里有另一个老外也做了一个aprs接收,并且据说可以跟对讲机发出的标准的aprs信号互通。我先试了一下mayhem中的这一部分功能,发现用它发射给我的接收,我的接收虽然也能收,但也会有点问题,就跟对讲机发给我一样,出现false_detect的数据包原创 2022-01-29 21:43:21 · 2450 阅读 · 0 评论 -
Portapack应用开发教程(十八)电池选型 下
电池选型已经完成了,后面都用900mAh电池就行了。接下来我想继续挖掘一下源表的功能,比如电池仿真功能。利用这个功能,我可以测试PortaPack在不同电量百分比时的反应——看看右上角的电量显示的颜色到底对应于百分之多少的剩余电量。为实现这个功能,需要做以下步骤:1.需要在源表上对电池充满电。2.用ARB功能按照一定的规律对电池放电,放电过程中用LOG功能把电压电流都存在U盘里。3.放到最低电压后可以把U盘里的LOG拿到电脑上,并用源表提供的配套battery_modelling.py程原创 2021-12-14 21:07:51 · 858 阅读 · 0 评论 -
Portapack应用开发教程(十八)电池选型 中
接下来我要开始用源表来测量PortaPack在各种状态下的功耗,以及各电池的实际能量。所谓源表就是一个可以作为普通供电用途的电源,它除了供电外还能把电压和电流与时间关系像示波器信号一样记录下来。另外,它也可以作为负载消耗电能。我们要做的第一件事是测Portapack的功耗,如下图,把PP的供电口接到电源输出上,用NGM电源给PP供电。...原创 2021-11-29 21:46:42 · 5934 阅读 · 0 评论 -
Portapack应用开发教程(十八)电池选型 上
由于我想把PortaPack H3的外壳做得尽量轻薄,我必须把电池像上图那样塞在PortaPack和HackRF的之间(被GPIO包围起来的空间内),而不是像之前的型材外壳那样把电池放在HackRF和底壳之间。这样做的好处是整机厚度可以减少1/3,但是坏处是电池面积减小了不少。接下来我要做的是尽量找到长宽高能符合我预留空间的电量最大的电池。然而,市面上的电池容量可能标的不准确,不能光从电量标号来认定其真实储能能力。需要进行实际的测试。我的测试方案如下:一、测量电池与PortaPack接口(正..原创 2021-11-28 09:02:10 · 4430 阅读 · 0 评论 -
记一次成功的HackRF维修过程(射频部分)
HackRF的LNA可以说是最容易损坏的部分,平时有保护壳的状况下,其它地方不太容易坏,LNA(和另一块发射芯片)可以说是最容易损坏的部分了,只要开启LNA或者RF Gain,然后把板子放到有较强无线信号的环境中(比如旁边有WiFi路由器或者对讲机),哪怕接收的不是这个频段的信号也会把LNA烧掉,这是因为LNA比滤波器更靠近天线口,所有频段的信号都会未经过滤直接进入LNA。因此,我一般都提醒买家当心,不过有时运气不好没注意到还是会损坏,这里记录我为一位朋友修理这个LNA的全过程,总体来说就是:先对照原理图找原创 2021-10-24 20:50:05 · 3099 阅读 · 0 评论 -
Portapack应用开发教程(十七)nrf24l01发射
以前用portapack实现过nrf24l01的接收,接下去想试试发射功能。我在https://www.bilibili.com/video/BV1fV411y7rq里面讲过gr-nordic也可以接收,但是发射流图跑不起来,电脑性能不够。所以我打算分析一下它的代码,把核心部分重新用c++来实现一遍,看看性能能否提升一下。下面3个文件就是接收和发射的核心。原创 2021-02-11 11:20:29 · 936 阅读 · 2 评论 -
Portapack应用开发教程 (十六)Debug程序 H hackrf固件比较
portapack固件的芯片驱动看得差不多了。我们知道了这些芯片分为3类,iic通信、软件spi、硬件spi。接下来我们打开hackrf固件,看看flash芯片是哪类。然后看看它与同类别的其它芯片有哪些细微差别,一步步把这些差别改到portapack固件里去。打开hackrf/firmware/common/可以看到这几个文件max2837.c max2837_target.c | max5864.c max5864_target.c | rffc5071.c rffc5071_spi.c...原创 2021-01-17 23:06:49 · 1333 阅读 · 1 评论 -
Portapack应用开发教程 (十六) Debug程序 G rffc507x 模拟spi
接下来看看另一颗芯片rffc507x,它的功能是把射频信号变到2.4GHz左右的中频,然后再上一篇提到的max2837变频到基带。所以rffc507x功能和max2837是一样的,都是用来改变信号频率的。而且它们都是spi总线的。然而如果我们看rffc507x的代码。firmware/application/hw/rffc507x.cpp rffc507x.hpprffc507x_spi.cpprffc507x_spi.hpp可以发现虽然这颗芯片还是在用spi通信,但是它没有去调用...原创 2021-01-17 19:03:35 · 459 阅读 · 0 评论 -
Portapack应用开发教程 (十六) Debug程序 F max2837
接下来可以看max2837的代码了,它也是调用spi_arbiter来实现spi通信的。firmware/application/hw/max2837.cppmax2837.hpp但它引入了dirty resigster的概念。firmware/application/dirty_registers.hpp这个mask就是一连串bit,每个bit对应一个寄存器。需要配置哪个寄存器,就把它对应的bit设置为1。然后就会把内存里map变量存的内容写到对应寄存器里去。如果寄存器不需要写入,b.原创 2021-01-17 10:47:49 · 387 阅读 · 0 评论 -
Portapack应用开发教程 (十六) Debug程序 E max5864和spi实现
接下来可以看其它芯片了。我仍然不打算看max2837和rffc507x,而是观察max5864芯片,它是adc/dac芯片,它在portapack固件里涉及的代码量很少原创 2021-01-15 17:08:07 · 502 阅读 · 0 评论 -
Portapack应用开发教程 (十六) Debug程序 D si5351芯片和iic实现
前面一篇文章把portapack板子上的两颗iic的声卡芯片讲完了,接下来我想不要直接去看hackrf板子上的spi总线的芯片,而是讲另一个芯片si5351。这颗si5351芯片是时钟芯片,它是iic接口,但是它是在hackrf板子上的。相当于是portapack板子上的iic声卡芯片与hackrf板子上的spi芯片之间的过渡。代码位置在/firmware/application/hw/si5351.cpp和si5351.hpp...原创 2021-01-15 15:06:09 · 1065 阅读 · 0 评论 -
Portapack应用开发教程 (十六) Debug程序 C 声卡芯片wm8731和ak4951
我前面改了max2875的驱动代码,可以从max2875驱动输出不同内容到debug屏幕上了。验证了之前看的调用关系都是对的。但是max2875芯片和rffc507x芯片的代码我还看不太懂。无法仿照他们来实现flash芯片的驱动(都是spi的)。我还是决定从声卡芯片入手,因为他们是iic的,我在调试小四轴飞控时对mpu6050的操作也是经过iic的。另外,前段时间加入内置喇叭和麦克风时我也对声卡芯片比较熟悉了。其实Portapack声卡芯片有两种,老款和新款板子的声卡芯片是不一样的。对于两种芯片原创 2021-01-14 14:22:35 · 834 阅读 · 0 评论 -
Portapack应用开发教程 (十六) Debug程序 B
来看看ui_debug.cpp代码这一段是跟几个芯片有关的界面代码。DebugPeripheralsMenuView::DebugPeripheralsMenuView(NavigationView& nav) { add_items({ { "RFFC5072", ui::Color::dark_cyan(), &bitmap_icon_peripherals_details, [&nav](){ nav.push<RegistersView>(原创 2021-01-07 20:56:08 · 251 阅读 · 0 评论 -
Portapack应用开发教程 (十六) Debug程序
截止到第15篇为止,我已经开发了很多APP了。比较重要的包括:GPS发射、模拟视频接收、蓝牙接收、NRF24L01接收、SSTV接收、APRS接收我本来还想做NOAA接收。但是我觉得开发步骤都差不多。都是一些有关无线电通信的数字信号处理的开发。我现在想做一些不同的东西。跟硬件更相关的东西。比如如何和芯片交互,这样将来要自己加一些硬件模块也会更方便。我看了Mayhem代码。它把debug功能加回来了。Debug是一个界面,里面也有各个子菜单,可以用来测试按钮和芯片。芯片的测试方法主要是读芯原创 2021-01-05 23:34:58 · 855 阅读 · 0 评论 -
Portapack应用开发教程(十五) APRS接收 B
上一篇文章原理以及发射代码看得差不多了。接收机代码由于本来实现就不完整,不用多看,边改代码边理解。下面是我改得差不多了的代码,已经可以做到把aprs发射程序发的数据在afsk接收程序里显示了。我的核心思想是,绕开所有跟编码解码有关的东西,着重确保调制解调ok。这样的话那些什么一串111之间加个0之类的算法我就去掉了。另外本来是0要变频,1不变频,到达底层的时候重新编码为1是2200Hz恒定,0是1200Hz恒定。我把这部分编码也绕开了,我输入的比特数据直接决定了频率,如果比特是1就是2200Hz原创 2020-12-24 13:26:38 · 751 阅读 · 2 评论 -
Portapack应用开发教程(十五) APRS接收
APRS功能可以用对讲机来传输数字信息,以便在没有运营商网络的环境下共享位置,实现类似微信的位置共享功能,也可以用它来发短消息。有人买直接带aprs的对讲机,比较贵。也有人用普通对讲机和手机通过音频线对接,然后手机上运行aprsdroid软件来实现同样的功能。它的原理跟sstv比较类似,都是两次fm,把数据进行编码(手机中完成),然后用音频的高低音来表示编码10101(手机中完成),再把这个编码再次做fm调制(对讲机中实现)最终发射出去。portapack可以把手机和对讲机合并在一起,.原创 2020-12-04 14:42:44 · 3109 阅读 · 0 评论 -
Portapack应用开发教程(十三)控制遥控小车OOK
最近看到老外在github上找了个rf-car的程序,想往portapack上搬我感觉挺有趣。想起来以前hackrf.net上有类似教程,对应github上叫做gr-remotecar。我找出了我自己的遥控车,打算分析一下信号。流图上半部分是用来收遥控器信号并分析的,下半部分是发射用的,暂时要disable。我依次按下左前,左后,右前,右后,变形,发射几个按键,得到了几个信号图。左前:1011110000100000101111000010000010左后:00...原创 2020-08-12 13:23:47 · 1152 阅读 · 0 评论 -
Portapack应用开发教程(十一) 加入内置麦克风
现在我的portapack已经带内置电池+开关和内置喇叭了,为了使它用起来更像一个对讲机,我打算装一个内置麦克风上去。其实很久以前星天无线出的老款portapack是带有内置麦克风的,后来新款都把这个功能去掉了。我现在打算把它加回去,我评估了一下,需要改软件和硬件。软件部分我已上传至github,跟之前内置喇叭一样,我加了一个软件开关,软件开关可以切换使用3.5mm耳机带有的麦克风或内置麦克风。它具体的实现原理是根据AK声卡芯片的datasheet去使用56引脚,5引脚用来供电,6引脚用来接..原创 2020-05-20 23:11:11 · 1225 阅读 · 2 评论 -
Portapack应用开发教程(十) 猎狐功能和RSSI数值显示
视频参见:https://www.bilibili.com/video/BV1Y541147Sv可以看到当我在analog audio的app里,在nfm模式下,我可以点击RSSI按钮,这时候发出的声音会变为根据信号强弱而计算出的音调,这种音调是符合无线电测向运动的。只要在天线口装一个定向天线就可以用这种方式做无线电测向了。猎狐代码其实本身就已经隐藏在nfm解调里了,我只是把那些注释掉的代码重新加了回来。真正我自己加的是RSSI数值显示功能。因为有时候光靠声音辨别不够准确,我自己增加了一个RSS原创 2020-05-09 16:21:29 · 1035 阅读 · 0 评论 -
Portapack应用开发教程(九)加入喇叭功能
跟一个朋友聊起,原来portapack硬件上是支持喇叭的,只是软件没开。我找了找资料,在原作的repo里找到个issuehttps://github.com/furrtek/portapack-havoc/issues/284有个老外的评论,推荐去看看这两个代码。firmware\application\audio.cppfirmware\common\ak4951.cpp我看了...原创 2020-05-03 00:00:17 · 1569 阅读 · 0 评论 -
Portapack应用开发教程 自定义开机图片
本来想把这个当做开机logo发现不行,要先转一下图片(整个逆时针旋转2个90度,然后左右翻转),然后尺寸也不对186x248才会比较好(否则会超过范围),另外要调整对比度和亮度,否则可能完全变成黑色。总之,什么东西都是有范围的,否则在portapack上会有完全意想不到的结果。这些操作都用office 2010自带图片编辑软件完成。如下图:接下来用windows自带画图软件转为...原创 2020-05-03 00:00:44 · 318 阅读 · 0 评论 -
Portapack应用开发教程(八)pocsag收发改进
pocsag信号就是bb机。其实havoc固件已经实现了pocsag信号的接收和发射了。但是我发现一个问题,无法使用一个portapack来发pocsag给另一个portapack。当我调整到同一个中心频率的时候,可以看到当发射机在发的时候,接收机的信号强度会增加。但是没有数据出来。我本来以为是地址的问题,但是咨询了几个朋友后知道,portapack接收机是支持任意地址接收的,只要不勾选i...原创 2020-04-26 10:51:04 · 1656 阅读 · 0 评论 -
Portapack应用开发教程(七)nrf24l01解调
前段时间我在做低功耗蓝牙的时候看到了这个网页https://wiki.bitcraze.io/misc:hacks:hackrf但是我当时没有成功解调nrf24l01,反而成功搞定蓝牙了。后来我用了我自己新买的小四轴也没解调成功,所以我打算老老实实地重现那个网页上的步骤。正好我以前买过crazyflie的产品(小四轴和crazyradio模块),我就找出了这个crazyradio模...原创 2020-04-12 23:22:16 · 2707 阅读 · 0 评论 -
Portapack应用开发教程(六)低功耗蓝牙解调
前段时间我本来想解调apc220,这样我可以用portapack接收数传数据,但是这个模块资料太少。后来我想到其实四轴里也经常用nrf24l01或者低功耗蓝牙来做数传,这两种模块也都是fsk。而且更好的是已经有人写了nrf和btle的解调了,只不过这个人使用的是rtlsdr做接收然后stdout输出给他的解码程序。https://github.com/omriiluz/NRF24-BTLE...原创 2020-03-22 11:20:42 · 3073 阅读 · 0 评论 -
Portapack应用开发教程(五)模拟视频解调和数传
这几天我在做portapack的模拟视频解调。具体代码可以看我的github。由于改动比较大,所以这里我不具体讲代码,而是讲思路。我主要是基于模拟音频接收改的,我用了WFM接收的界面,解调部分我参考了AM接收和ADS-B接收,期间也参考了sstv发射的界面。ads-b虽然是数字信号,但是也是am解调的,模拟电视也是。但是在解调之前我需要看一下时域图以便调试。我观察到WFM接收有两个...原创 2020-03-08 22:03:03 · 3152 阅读 · 2 评论 -
Portapack应用开发教程(四)GPS应用具体更改
我把我做的更改加了注释gps_sim_app.cpp#include "gps_sim_app.hpp"#include "string_format.hpp"#include "ui_fileman.hpp"#include "io_file.hpp"#include "baseband_api.hpp"#include "portapack.hpp"#include ...原创 2020-02-14 14:23:57 · 3386 阅读 · 1 评论 -
Portapack应用开发教程(三)开发步骤
我的思路是这样的,既然我开发的应用是仿造replay的,我只要在前面找到的几个代码的地方复制出一个副本,稍加修改(改名),然后把加出来的代码文件加入对应CMakeLists里就行。我分了几步。第一步,在portapack主界面上先增加了一个按钮,这个按钮暂时还是连到replay上。第二步,对这个按钮就行修改,包括改名字,改图标(改图标还需要上网找图片,然后生成数据)。第三步,开始改...原创 2020-02-14 11:07:52 · 1815 阅读 · 0 评论 -
Portapack应用开发教程(二)代码结构
接下来我要做的是阅读代码,了解它的大致结构,知道哪些是我要改的。firmware下主要要改的在application文件夹和baseband文件夹下。application文件夹对应的是给用户看到的界面程序,baseband是界面对应的后台处理程序。由于我要做的程序基本是replay改的,所以我只要找到replay程序所在的几个代码的目录,然后依样画葫芦,写一个类似的程序即可,除此之外还要...原创 2020-02-13 22:50:18 · 1559 阅读 · 0 评论 -
Portapack应用开发教程(一)简介、编译、烧录及Hello World
之前做LimeSDR的GPS接收实验的时候我用到过Portapack,它可以发射GPS信号:https://blog.csdn.net/shukebeta008/article/details/103270214测试KerberosSDR测向功能时,我也使用Portapack来发射一个单音信号:https://www.bilibili.com/video/av78385598?from...原创 2020-02-13 22:41:41 · 8813 阅读 · 4 评论