软件无线电3-微相E316和HackRF实现FM调制解调

        前面介绍了基于Matlab、矢量信号器和HackRF One实现射频下的FM调制解调,今天分享的内容是用微相E316替代矢量信号器完成发射工作。注意本文仅用于科研和学习,私自搭建电台属于违法行为。

1.概述

微相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和计算机间接线图

        微相E316的射频输出用SMA射频线连接到HackRF One的天线接口(或者微相E316的射频输出和HackRF One的天线接口分别接一根天线),HackRF One 的USB接口连接至计算机,如图3所示。

图3 HackRF One接线图

2.Matlab生成FM调制基带IQ信号

2.1Matlab读取语音文件

        准备一段wav的语音文件,我用笔记本自带的录音机录制了一段自己的语音“软件无线电小方圆.wav“,MATLAB读取语音文件,并获取采样频率信息。

clc;
clear all;
%% ***************read file*************************************
filename ='./data_source/软件无线电小方圆.wav';
[m,fm]= audioread(filename);% fm = 48e3; %音频的采样率
sound(m,fm);
figure(1);
plot(m);title('原始的语音信号');

我的这段语音数据源采样率48kHz。时域波形如图4所示,

图4 原始语音信号时域波形

2.2相关参数设置和语音数据源初处理

        我用的载波频率192kHz,载波采样率1.92MHz,代码里类似这些参数大家可以根据自己的需求修改。FM宽带调制最大频偏75kHz。因为FM调制是用基带信号控制载波的频率,即与载波信号数据相乘,所以在这之前,我们需要将基带信号的采样率和长度进行处理,使其与载波信号采样率和长度保持一致,处理代码如下:

fs = 1.92e6; %采样率 载波的采样率
fc = 192e3; %载波中心频率
df = 75e3; %最大频偏  宽带75khz  窄带5khz
kf = (df*2^32/fs)/32767;
AC= 1024;%幅度
dt=1/fs;
m_len=length(m)*fs/fm;%按照载波采样率的长度计算
m_t=zeros(1,m_len);
for i=1:length(m)for j=1:fix(fs/fm)m_t((i-1)*fix(fs/fm)+j)=m(i); end
end

2.3 FM调制生成基带IQ信号

查表法实现信号发生器,MATLAB产生DDS,生成FM调制基带IQ数据,代码如下:

%************************* FM调制 ********************
n=0:1/1024:1023/1024;
s_rom=sin(2*pi*n);
c_rom=cos(2*pi*n);
w_r=0;%相位累加器
rrom_addr=0;%
dac_i=zeros(1,m_len);%I路信号 
dac_q=zeros(1,m_len);%Q路信号
for i=1:m_lenw_r = w_r + kf*m_t(i);if(w_r > 2^32) % 做32位累加器的溢出判断w_r= w_r - 2^32;elseif(w_r <0)w_r = w_r + 2^32; % 负的溢出时endrrom_addr=round(w_r/2^22);%读查找表的地址if rrom_addr == 0rrom_addr =1;enddac_q(i)=AC*s_rom(rrom_addr);dac_i(i)=AC*c_rom(rrom_addr);
end
data =  dac_i +1i*dac_q;

2.4 Matlab生成IQ文件

Matlab完成将2.3节里生成的FM调制基带IQ数据存为IQ文件,代码如下:

for i=1:Nsig(2*i-1)= real(data (i));sig(2*i)= imag(data (i));
end
fileID = fopen('WBFM.iq', 'wb');
% 写入数据,'short'指定数据类型为short(2字节整数)
fwrite(fileID, sig, 'short');
% 关闭文件
fclose(fileID);

3.上位机将IQ文件导入微相E316

步骤一:网线一端连接计算机,另一端连接微相E316,根据E316内部代码,设置计算机IP,我的E316 IP是192.168.1.11,计算机IP设置为192.168.1.33:

步骤二:上位机选择上一章里Matlab生成的IQ文件,点击“载入文件”,如图5所示:

图5 上位机载入IQ文件

步骤三:等待上位机打印区显示数据下发完成,如图6所示。

图6 上位机下发IQ文件

步骤四:发送次数改为0(连续发送),点击“开始发射”,停止则要点击“停止发射”,如图7和图8所示:

图7上位机设置连续发射

图8 上位机设置E316射频发射中

4.微相E316生成FM信号

        微相E316读取网口接收的IQ文件,得到FM调制基带IQ数据,根据设置的频率,我的E316代码内部设置发射频率492005270Hz,如图9所示,E316将FM调制基带IQ数据经过上变频和混频后,通过射频DA发送FM信号。

图9 开始连续发射

5.HackRF One接收FM信号

在电脑上打开软件SDRSharp,打开后具体操作步骤如下:

步骤一:打开设置,选择硬件HackRF One,如10所示:

图10 SDRSharp设置选择HackRF One

步骤二:选择Radio模式,勾选WFM,如图11所示

图11 SDRSharp选择WFM

步骤三:打开监听开关,如图12所示

图12 SDRSharp打开监听开关

步骤四:设置监听频率490MHz,如图13所示

图13 SDRSharp设置监听频率

步骤五:调节音量和增益值,如图14所示,使收听效果更好。

图14 SDRSharp设置音量和增益

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/53686.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Excel 设置自动换行

背景 版本&#xff1a;office 专业版 11.0 表格内输入长信息&#xff0c;发现默认状态时未自动换行的&#xff0c;找了很久设置按钮&#xff0c;遂总结成经验帖。 操作 1&#xff09;选中需设置的单元格/区域/行/列。 2&#xff09;点击【开始】下【对齐方式】中的【自动换…

教授(优青)团队一站式指导:专业实验设计、数据分析、SCI论文辅助。基因表达分析、转录因子、组蛋白、染色质、DNA等高通量检测及基因功能分析

可高通量检测组蛋白不同修饰在基因组上的位点; 可用于模式物种和非模式物种的研究&#xff0c;无需特异性抗体; 完整的DAP-seq解决方案。 DAP-seq可高通量检测转录因子或DNA结合蛋白在基因组上的结合位点; 可用于模式物种和非模式物种的研究&#xff0c;无需特异性抗体; 完整的…

探索C语言与Linux编程:获取当前用户ID与进程ID

探索C语言与Linux编程:获取当前用户ID与进程ID 一、Linux系统概述与用户、进程概念二、C语言与系统调用三、获取当前用户ID四、获取当前进程ID五、综合应用:同时获取用户ID和进程ID六、深入理解与扩展七、结语在操作系统与编程语言的交汇点,Linux作为开源操作系统的典范,为…

深入解析前端优化:防抖与节流的区别与应用场景

在现代前端开发中&#xff0c;防抖&#xff08;Debounce&#xff09;和节流&#xff08;Throttle&#xff09;是两种常见的性能优化技术&#xff0c;尤其是在处理高频触发事件时&#xff0c;它们能够有效避免不必要的函数执行&#xff0c;减少资源开销&#xff0c;并提升用户体…

计算机网络笔记002

### 课堂讨论对话 **学生A**: 老师&#xff0c;计算机网络的组成是怎样的&#xff1f;&#x1f914; **老师**: 非常好的问题&#xff01;计算机网络主要由硬件、软件和通信协议三部分组成。我们先从硬件开始讨论吧。 **学生B**: 硬件包括哪些设备呢&#xff1f;&#x1f60…

会员业务出口网关的设计与实现

01# 背景介绍 1.1 出口网关是什么 出口网关&#xff08;Egress Gateway&#xff09;是一种部署在云或企业网络中的网络组件&#xff0c;它控制着从内部网络&#xff08;如企业内网、内部微服务网络&#xff09;流出到外部网络&#xff08;如公共互联网或其他外部服务&#xf…

uniapp view设置当前view之外的点击事件

推荐学习文档 golang应用级os框架&#xff0c;欢迎stargolang应用级os框架使用案例&#xff0c;欢迎star案例&#xff1a;基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识&#xff0c;这里有免费的golang学习笔…

2024.9.25 数据分析学习

资料&#xff1a; 【开课吧哩堂】数据挖掘项目之用户流失预警系统_哔哩哔哩_bilibili 五万字 | Spark吐血整理&#xff0c;学习与面试收藏这篇就够了&#xff01;-腾讯云开发者社区-腾讯云 (tencent.com) 黑马程序员Spark全套视频教程&#xff0c;4天spark3.2快速入门到精通…

SQL进阶技巧:如何利用if语句简化where或join中的条件 | if条件语句的优雅使用方法

目录 0 问题场景 1 数据准备 2 问题分析 2.1 需求一 2.2需求二 3 小结 0 问题场景 有两张表,一张用户下单表user_purchase(用户ID粒度)包含用户ID、订单ID和下单消耗金额和一张用户维表user_info包含用户ID、用户年龄和用户是否实名认证。 user_purchase user_info 需…

网络编程,端口号,网络字节序,udp

前面一篇我们讲了网络的基础&#xff0c;网络协议栈是什么样的&#xff0c;数据如何流动传输的&#xff1b;接下来这篇&#xff0c;我们将进行实践操作&#xff0c;真正的让数据跨网络进行传输&#xff1b; 1.网络编程储备知识 1.1 初步认识网络编程 首先我们需要知道我们的…

用户态缓存:环形缓冲区(Ring Buffer)

目录 环形缓冲区&#xff08;Ring Buffer&#xff09;简介 为什么选择环形缓冲区&#xff1f; 代码解析 1. 头文件与类型定义 1.1 头文件保护符 1.2 包含必要的标准库 1.3 类型定义 2. 环形缓冲区结构体 2.1 结构体成员解释 3. 辅助宏与内联函数 3.1 min 宏 3.2 is…

Ubuntu24.04中安装Electron

1. 安装Nodejs 使用代理服务从github下载并执行Nodejs安装脚本(假设代理服务器为192.168.2.150:10792) curl -x 192.168.2.150:10792 -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash #注意&#xff0c;Nodejs官网的安装命令少了下面这一行: …

OpenHarmony(鸿蒙南向)——平台驱动指南【MIPI CSI】

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 持续更新中…… 概述 功能简介 CSI&#xff08;Camera Serial Interface&#xf…

深度学习基础及技巧

机器学习中的监督学习 监督学习是通过对数据进行分析&#xff0c;找到数据的表达模型&#xff0c;对新输入的数据套用该模型做决策 主要分为训练和预测两个阶段 训练阶段&#xff1a;根据原始数据进行特征提取&#xff0c;然后使用决策树、随机森林等模型算法分析数据之间的特…

AuthorizationPolicy 是一个重要的配置对象,用于定义服务间的访问控制和权限管理。

在 Istio 服务网格中&#xff0c;AuthorizationPolicy 是一个重要的配置对象&#xff0c;用于定义服务间的访问控制和权限管理。它允许管理员根据一系列规则来决定服务间的访问权限&#xff0c;从而增强系统的安全性。 AuthorizationPolicy 的作用 AuthorizationPolicy 主要用…

vue项目npm run serve 报错,Error: read ECONNRESET at TCP.onStreamRead

背景&#xff1a;vue2的项目&#xff0c;之前npm run serve一直可以正常使用&#xff0c;突然每次启动都会报错了&#xff0c;报错信息如下&#xff1a; node:events:492 throw er; // Unhandled error event ^ Error: read ECONNRESET at TCP.onStreamRead (n…

使用python搭建Web项目

使用python搭建Web项目 服务器基本配置安装python配置仓库镜像源安装conda管理python环境&#xff08;可选&#xff09; 使用django 框架搭建web项目迁移数据库到mysql项目依赖 服务器基本配置 安装python // 检测python版本 python --version python3 --version // 安装pyth…

【动态规划-多重背包】【hard】力扣2585. 获得分数的方法数

考试中有 n 种类型的题目。给你一个整数 target 和一个下标从 0 开始的二维整数数组 types &#xff0c;其中 types[i] [counti, marksi] 表示第 i 种类型的题目有 counti 道&#xff0c;每道题目对应 marksi 分。 返回你在考试中恰好得到 target 分的方法数。由于答案可能很…

Leetcode 136 只出现一次的数字

题目链接&#xff1a;136. 只出现一次的数字 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性…

计算机毕业设计Python+Flask微博情感分析 微博舆情预测 微博爬虫 微博大数据 舆情分析系统 大数据毕业设计 NLP文本分类 机器学习 深度学习 AI

首先安装需要的python库&#xff0c; 安装完之后利用navicat导入数据库文件bili100.sql到mysql中&#xff0c; 再在pycharm编译器中连接mysql数据库&#xff0c;并在设置文件中将密码修改成你的数据库密码。最后运行app.py&#xff0c;打开链接&#xff0c;即可运行。 B站爬虫数…