- 博客(41)
- 资源 (9)
- 收藏
- 关注
原创 微相E316实现FM电台监听
微相E316、上位机和Matlab实现FM电台信号监听测试框图如1所示:图1微相E316实现FM信号监听框图通过上位机设置要采集的FM电台的频率、采样率和采集长度,完成FM电台信号的采集,然后将采集的FM调制IQ数据导入Matlab后,通过Matlab软件完成FM信号解调和播放。微相E316的网口和USB口连接计算机,如图2所示:图2 微相E316和计算机接线图微相E316的天线接收口连接天线,如图3所示。图3 微相E316和天线接线图。
2025-02-21 21:04:37
753
原创 软件无线电4-位同步
在数字通信系统中,同步主要有三种方式,载波同步、位同步和群同步。载波同步指在相干解调时,接收机的解调器需要产生一个与调制载波同频同相的相干载波。载波同步又称为载波恢复。位同步指接收机需要产生一个与调制信号符号速率相同,相位与最佳判决时刻一致的定时脉冲序列信号,位同步又称符号定时恢复或码元同步。群同步一般表示帧同步,接收机需要产生帧头同步序列。
2024-10-07 00:00:25
1216
原创 软件无线电3-微相E316和HackRF实现FM调制解调
微相E316和HackRF One实现FM调制解调测试框图如1所示:图1微相E316和HackRF One实现FM调制解调框图Matlab将FM调制基带IQ数据存为IQ文件,上位机通过网口将IQ文件发给微相E316,微相E316将基带IQ数据转换为射频信号发射,用HackRF One作为接收机接收FM信号,最后使用计算机开源软件SDRSharp监听FM解调后的语音。微相E316的网口和USB口连接计算机,如图2所示:图2 微相E316和计算机间接线图。
2024-09-26 21:03:52
1002
原创 Ubuntu中交叉编译armadillo库
网上关于交叉编译armdillo库比较少,借鉴了一些但是在前几天编译时总是磕磕绊绊,于是写一个详细的编译过程。交叉编译armdillo库包含两个步骤:交叉编译依赖库和交叉编译armdillo库。
2024-09-25 22:04:14
1515
原创 软件无线电2:矢量信号器和HackRF实现FM调制解调
整体实现框图如下所示:图1 矢量信号器和HackRF One实现FM调制解调框图Matlab完成FM调制后,将FM调制后的基带IQ数据通过网口发送到矢量信号器,矢量信号器将基带IQ转换为射频信号发射,用HackRF One作为接收机接收FM信号,最后使用计算机开源软件SDRSharp监听FM解调后的语音。测试所用矢量信号器如图2所示:图2 矢量信号器。
2024-09-17 21:49:51
1290
原创 软件无线电1-MATLAB实现FM调制解调
非相干解调不需要提取载波信息,将接收到的FM信号经过微分器,然后经过希尔伯特变换和包络检波,最后去偏置,得到的基带信号采样率1.92Mhz,同样使用MATLAB自带的函数resample进行40倍抽取处理,将基带信号的采样率降到48kHz,为了MATLAB播放出来效果更好,将信号幅值除以30处理后播放,我们可以将原语音数据播放效果和解调后的语音数据进行比较,非相干解调后的语音听起来也非常清晰。基带IQ信号分别和载波IQ信号相乘,之后相加,得到FM信号。FM宽带调制生成的FM信号时域波形和频谱如图4所示。
2024-09-11 21:25:20
2116
原创 AD9361系列-参考时钟
参考时钟输入源有两种方式:外部振荡器和外部参考时钟。当使用振荡器时,振荡器连接XTALN和XTALP两端,然后控制DCXO设置合适的参考时钟。当使用外部时钟直接将外部时钟连接到XTALN管脚(M12),然后跳过DCXO,连接到基带PLL和射频PLL。D4=1表示使用外部参考时钟,使能BBPLL,使能数字供电。RFPLL合成器 ,输出频率为80MHz。外部参数输入 ,输入频率为40MHz。接收合成器的参考时钟设置为2倍。发射合成器的参考时钟设置为2倍。
2023-02-27 22:34:29
2053
2
原创 PYNQ之linux下多线程
linux操作系统下多线程使得流程设计更加方便,子线程申请一般使用下面函数:int pthread_creat(pthread_t *tidp,const pthread_addr_t *addr,void *(*start_rtn)(void),void *args);其中tidp为线程id号;addr为线程属性,通常为空;第三个参数为线程执行的函数指针,第四个参数为线程函数的参数,通常为空。若创建成功则返回0,未成功则返回错误号。在编译时由于...
2021-09-05 09:33:03
286
原创 BPSK调制解调matlab仿真
前面有上网在线方式搭建linux操作系统,这种方法非常方便,唯一的缺点是需要上网,像一些保密单位,上外网不方便,这样应用起来就非常不方便,于是考虑使用离线的方式。在网上应该还没有我这种方式方法。第一步:下载u-boot和kernel正常情况下是进入github的xilinx项目中下载,但是不晓得什么原因,github经常无法正常登陆,...
2021-08-15 15:53:01
7131
原创 PYNQ搭建系统-Petalinux上网方式
这几年陆陆续续接触很多ZYNQ的板卡,不同的板卡似乎都有不同的搭建系统的方式方法。一直在寻找一个通用的方式来完成所有zynq板卡搭建,ug1144中使用petalinux工具搭建系统应该是比较通用的方式方法。第一步:vivado工程编辑 这是使用的是vivado2018.3版本的vivado,虚拟机中安装的petalinux也是相应的版本。具体步骤略。第二步:导出硬件,新建SDK工程 这样在工程目录下以.sdk为后缀的文件夹中会有design_1_wra...
2021-07-03 16:17:51
814
原创 PYNQ裸跑之读写SD卡
去年搞了一年的算法,今年终于得空继续学学PYNQ,参考了网上的例子,发现发现SD卡读写是如此简单。第一步:在zynq中接口设置中选中SD卡,在pynq的默认配置中已经选中SD卡,所以这里不需要任何操作。第二步:在SDK中添加xilffs库第三步:添加函数文件sd.c/******************************************************************************** Copyright (C) 2009...
2021-04-10 14:48:44
744
原创 PYNQ2裸跑之音频ADAU1761
前面在qt和matlab中实现了音频的播放,最终目的是在底层硬件中实现数据播放,之所以使用裸跑是为了更好的理解音频codec的相关配置和IIC、I2S的接口的通用代码的开发和测试。 芯片ADAU1761 是一款低功耗、集成数字音频处理功能的立体声音频编解码器,支持立体 声 48 kHz 录音和回放,采用1.8V 模拟电源供电,功耗为 14mW。立体声音频 ADC 和DAC 支持 8 kHz 至 96 kHz 范围内的采样速率,并支持数字音量控制。 配置接口...
2021-04-10 14:29:43
3069
2
原创 PCM音频播放QT2
在实际项目中,用到更多的是Qt播放音频数据流。我测试过使用优快云的定时器版本代码,会出现一些问题。QaudioOutput有两种模式,前面播放文件采用的是pull mode,这里采用push mode。Push模式可以采用定时器把数据写给QIODevice,这里还是使用MyDevice类来进行数据写入。功能:循环顺序播放三个音频文件流程:首先播放第一个文件,第一个文件播放完成播放第二个文件,第二个文件播放完成后,播放第三个文件,第三个文件播放完成后播放第一个文件。使用两个定...
2021-03-29 11:01:53
385
原创 音频播放1
在软件无线电中,经常需要做监听功能,需要把模拟或者数字解调话音进行播放,这个时候需要上位机或者底层DA进行音频播放。而一般采集或者解调的音频信号基本为PCM格式。获取PCM音频文件为了测试音频播放功能,第一步需要获取PCM音频文件。获取方式很多种,记录我所使用的两种方式方法。1.1 Qt例子程序获取打开audiorecorder例子工程,就可以看到以下界面:设置音频格式,文件类型,采样率和通道数,然后点击output选择文件存储路径,点击Record就可以开始正常录音,最后点击Stop
2021-03-23 21:33:11
330
原创 模拟FM调制解调matlab仿真
FM的调制解调相对AM复杂一些,网上也更多的是介绍AM解调,FM解调相对少很多,而且也很少FM的解调代码,但是在网上找到一个可以用,做了一点修改发现效果还不错,记录下来调制信号生成:clear;clf;close allFs=800e3;fz=80e3;fj=1e3;i=4096;A=1;Kf=0.2; t=(1:i)/Fs; tf=(1:i-1)/Fs; f=((1:i)-1)*Fs/i; tz=1; ...
2020-09-20 23:33:39
7329
2
原创 Qcustomplot使用记录
Qcustomplot是一个非常好用的第三方画图库,这里记录一下如何使用该IP。第一步:下载文件第二步:添加文件到工程2.1在main函数的头文件中添加头文件:#include "./qcustomplot/qcustomplot.h"2.2 在pro文件中添加printsupport支持,这因为qt是5.0以上版本QT += printsupport第三步:提升widget为Qcustomplot类void SCAN_ITU::cust...
2020-09-17 16:14:03
217
原创 模拟信号调制1
1、FM调频信号调频信号在广播中广泛应用,且在短波通信中,线性调频信号也会有很广泛的应用。调频信号的时域表达式如下所示: 其中是音频调制信号,调制角频偏。问:为什么需要对调制信号积分?解:表示的是信号的瞬时相位,如果是一个单音信号,信号的瞬时相位是从-pi到pi周期变化的。而对相位进行微分就是频率,所以FM信号的频率为。可以看出调制信号对载波信号的频率进行改变。假设调制信号是一个正...
2020-09-17 16:08:48
2038
原创 模拟信号调制2
4.单边带信号(SSB) 单边带是在双边带进行滤波得到的,过滤掉上边带,就是LSB,过滤下边带,就是USB。单边带时域表达式如下所示:LSB: USB: 是的Hilbert变换,也就是对该信号进行π/2的移相。Matlab实现USB调制:baseFm= cos(2*pi*Fm*t);...
2020-09-17 16:08:28
1326
原创 功率放大器2-模型
1.功放非线性特性 功放在饱和区会出现非线性,而非线性表现在幅度和相位上,幅度和相位曲线如下图所示:2.功放模型 功放可以分无记忆和记忆系统模型两种。2.1 Saleh模型 Adel.A.M.Saleh在1982年提出Saleh模型,主要用于描述行波管功率放大器(Traveling Wave Tube Amplifier,TWTA)的非线性特性,TWTA的AM/AM特性和AM/PM特性都非常明显,Saleh模型曲线拟合模型极坐标系表达...
2020-09-15 20:58:52
6139
5
原创 功率放大器Power Amplifiers1-基础
1.PA的非线性 功放非线性是指当功放的输入信号为小电流信号时,输出功率随着输入功率线性增加,输出信号功率与输入信号功率比值不变,即增益为一固定值,称这一状态为线性状态。当功放输入大电流信号时,输出信号与输入信号的功率比发生变化,且功率比逐渐减小,即增益出现压缩现象。最终结果为输入信号功率增加,而输出功率不变,称这一状态为饱和状态。为了提高功放效率,使得信号发射距离更远,需要将功放长期工作在饱和区。但是功放在未达到饱和状态之前,增益已经出现压缩,也就是所谓的功放非线性失真。 ...
2020-09-14 19:43:06
7227
2
原创 Matlab中如何使用fdattool
fdatool设置,在matlab输入fdatool可以保存为函数文件名称为fir1,生成的m文件内容为function Hd = fir1%FIR1 Returns a discrete-time filter object.% MATLAB Code% Generated by MATLAB(R) 9.0 and the Signal Processing Toolbox 7.2.% Generated on: 16-Nov-2018 15:57:29..
2020-08-05 19:55:35
1271
原创 matlab读取CSV文件
在vivado抓取数据后,或者quartus中逻辑分析仪抓取数据后,都可以导出为csv文件。matlab可以很方便使用csv文件,具体读取如下所示:function csv_data =fread_csv(filename,row1,colum1,row2,colum2,row3,colum3,row4,colum4,len)fid = csvread(filename,row1,colum1,[row1,colum1,(row1+len),colum1]);fid2 = csvread(fil
2020-08-02 10:48:41
3078
原创 modelsim仿真读写文件
FPGA在做功能仿真过程中,例如算法实现,数据处理等,往往需要把实际采集的数据作为仿真的输入,所以需要实现对文件数据的读写操作,具体读写操作代码如下所示:`timescale 1ns / 100psmodule wr_rd_file#( parameter FILE_NUM = 2, parameter DATA_WITH = 32, parameter DATA_LEN = 2048)( input clk , input rst_n , input
2020-08-02 10:36:08
1276
2
原创 获取FPGA芯片序号
往往可以通过获取xilinx芯片的DNA,然后再进一步加密运算,就可以实现代码的加密。具体获取DNA的代码如下所示:module dna_read( input sys_clk, input rst_n, output [95:0] dna_read_data, output dna_read_vld);wire dna_dout;wire dna_read;wire dna_shift; DNA_PORTE2 #( .SIM_DNA_VALUE(
2020-08-02 10:16:58
1846
1
原创 Qt基础篇---线程使用
换了新部门,对FPGA底层的使用不多,更多的是c和c++,于是开始了Qt界面的学习,在练习c和c++的同时,学习做界面,很多测试就不需要依赖别人。 Qt中的QThread类提供了平台无关的线程。一个QThread代表了一个在应用程序中可以独立控制的线程,它与进程中的其他线程分享数据,但是独立执行的。相对于一般的程序都是从main()函数开始执行,QThread从run()函数开始执行。默认的,run()通过调用exec()来开启事件循环并在线程内运行一个Qt事件循环。要创建一个线程,需要子...
2020-05-17 15:54:45
539
原创 PYNQ2裸跑之网络
Zynq中所有开发板都是以lwip echo例程来检测网络硬件是否正常,实际做项目中,该pro会显得很繁琐。借鉴了FPGADesigner的博客,对软件提供的例子工程进行了简化修改。我所使用vivado版本:2018.3第一步:新建工程 将PYNQ2板卡文件复制到“Xilinx\Vivado\2018.3\data\boards”,就可以进行板卡预配置。如果没用可...
2020-04-20 22:32:41
526
原创 Vivado中FFT9.0仿真2
1.仿真环境搭建一开始准备用vivado自带的仿真器来仿真,发现一直报错,类似于没有库文件。然后想到需要用modelsim仿真,可是发现用10.4c仿真,vivado还是报错,差异在于以前vivado版本是17.2,现在为18.1。探索很久,查阅18.1版本说明,需要使用10.6c版本的modelsim。下载10.6c版本的modelsim安装该部分略编译仿真库在model...
2020-04-03 16:12:53
967
原创 记忆管理之xilinx生成网标文件
1.将需要封装的模块设置为顶层模块2.更改综合配置More options -mode out_of_contextFlatten_hierachy full3.综合,完成后打开综合4.2017.4以前版本输入以下XX为模块名称输入 write_verilog -mode port F:/FPGA/XX.v2018.1以后输入 write_verilog -mode synth...
2020-02-25 20:12:52
493
原创 烧写QSPI
在裸跑中需要将代码固化在QSPI中,需要烧写QSPI1、新建fsbl在裸跑的工程中打开SDK,File—>NEW—>Application Project, 名称设置为fsbl。2、创建Image右击fsbl-->Create Boot Image添加裸跑的elf文件3、烧写bin添加刚刚生成的BOOT.bin文件同时添加fsbl中...
2019-12-26 15:54:54
855
原创 在petalinux生成SD卡启动镜像文件
这个部分也是参考开发板和别人写的文章最终在开发板上实现,为了便于记忆,放网上记录一下。1、生成hdf文件这一部分在vivado新建工程,然后生成bit文件,然后导出硬件,在根目录下有hdf文件。2、在linux下新建工程2.1在桌面创建一个工程目录,进入该目录cd ~/Desktop/mkdir petalinux_pro2cd petalinux_pro22.2 设置petal...
2019-12-25 09:44:21
1495
原创 ZYNQ中BRAM的使用
BRAM用来传输命令很方便,不管是在linux系统下还是裸跑。第一步:在PL端添加IP后,一般默认设置。第二步:在addr中设置大小,这里设置64k 这里设置完后,再打开IP会发现大小并没有改变,这是因为没有综合。第三步:添加io,把BRAM的输出设置为IO,并双击,设置为READ WRITE. 第四步:综合综合我们的IP,结束后,再打开,会发现深度变...
2019-11-18 21:31:14
3969
原创 PYNQ2中第一个linux程序
尝试了很多裸跑下的功能测试,发现对于网口通信还是在linux系统下,流程控制更加方便,于是有了linux第一个应用程序:点亮LED.1、硬件设置新建工程,添加gpio如下所示:找到分配的物理地址,如下所示:添加管教约束xdcset_property IOSTANDARD LVCMOS33 [get_ports {GPIO_tri_o[0]}]set_property IOSTAND...
2019-07-01 20:14:18
518
原创 验证DDS输出
1、配置DDS的IP设置输出位宽和相位位宽,时钟设置为100MHz。设置为stream默认2、添加仿真tb`timescale 1ns / 100psmodule AA_tb( ); reg clk;reg rst_n;initialbegin #0 clk = 1'b0; #2 rst_n = 1...
2018-11-09 13:32:25
1028
2
原创 PYNQ2中USB Webcam
1、网络摄像头 该摄像头为很久以前用来视频的摄像头,直接插在USB接口上,免驱。2、打开主页http://192.168.2.99:9090/notebooks/common/usb_webcam.ipynb然后在common中选择usb webcam工程,此时照片为默认的照片。3、运行运行后的结果如下图所示,照片变成摄像头拍摄的照片。4、代码分析from...
2018-11-09 08:37:41
3366
2
原创 Vivado FFT9.0仿真验证
在网上看了很多的介绍,基本都是一样的,但是根据这些博客,自己验证了下发现结果和matlab中不一样。1.配置IP核 用vivado17.2 IP版本为9.0,配置首先配置最大长度为64,时钟为100MHz,将长度可以改变选中,如下图所示:进一步的配置,设置数据为整型,未缩放,输入16bit,输出自然顺序(不然虚部不方便验证)。第三页默认2.tb...
2018-11-08 14:50:08
2956
3
原创 Zynq3-PL端中断请求
1、参考 米联客的PL端中断请求。主要是为了更直接的感受中断过程和SDK中中断处理函数。2、搭建工程 生成zynq,自动连线,选中中断,普通中断,如下图所示:然后添加GPIO0,允许中断,设置为input 位宽为1,然后添加GPIO1,设置为output ,位宽为4。需要注意的是,如果一切都按照默认的来,GPIO0和GPIO1会变成6bit,需要清除board配置,如下图所...
2018-10-30 16:30:48
738
原创 PYNQ2之ZYNQ的PS读写DDR
1、前期准备 和前面的不一样这里需要用到DDR,所以需要在PS中正确配置DDR,这也是看别人zedboard板卡教程自己却一直实行不了的原因。问题一:串口打印问题 首先是串口驱动问题,网上下载驱动,安装一直提示未正确安装驱动,设备工作不正常。 解决方法:板卡接上电脑,开机,然后联网,打开360驱动大师,然后会出现一个未安装驱动的USB设备,然后点击...
2018-10-29 21:01:51
6450
4
原创 P2中ZYNQ的PS控制PL端LED
第一个ZYNQ的实验,用于熟悉开发环境和板卡,通过GPIO控制LED,由于P2在ps端没有LED,所以需要通过axi总线控制PL端LED。1、参考设计参考的是黑金的《PL 端和 PS 端的协同设计流水灯实验 》。2、新建工程新建一个工程,选择zynq的FPGA,然后Create Block Design,然后右击Add ip,输入zynq,如下图所示:然后更改里面配置,首先...
2018-10-29 20:55:03
2701
3
pynq2中zynq的IP预配置脚本
2020-04-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人