矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 7301|回复: 24

PythonSDR-AM/FM的IQ信号调制和解调

[复制链接]
     
发表于 2023-7-30 22:33:49 | 显示全部楼层 |阅读模式
本帖最后由 LoveVirus 于 2023-7-30 22:46 编辑

初涉SDR,感觉这次跨越难度比我从单管机到超外差的跨越还大,概念众多,一时难以消化。

*************************************************************************************
ScreenShots20230730-143409.png
这是我当前学习的的相关知识点


*************************************************************************************
ScreenShots20230730-093951.png
这是常见的几种SDR接收架构,直采,直接转换,超外差,其中


直采-号称是SDR的"圣杯",这种结构把大部分处理过程都移到了数字部分,灵活性极大,但是缺点是依赖一个高速ADC,高速ADC采样的数据又依赖高速DSP处理器,但是高速ADC,高速DSP也就意味着高价格,高成本

直接转换-也交零中频,优点是滤波结构简单,但是存在直流偏差

超外差-也叫低中频,这种结合传统超外差变频和数字处理的优势,是一种低成本方案



在上面的结构中,adc接收到的数据也分为单路模拟信号和双路正交模拟信号,

单路模拟信号优点是只需要一片adc,但是adc采样率要求稍高,正交变换通过数字处理实现,IQ

信号无相位偏差,对dsp性能要求较高

双路正交模拟信号需要两片adc,但是adc采样率要求降低一半,dsp无需做正交变换处理,dsp压力较小,但是IQ信号存在相位偏差

*************************************************************************************
微信截图_20230730205328.png

IQ信号,这是一个在数字通讯中非常基本的概念,我在尝试理解这个概念上花费了大量精力,但是感觉还是尚未完全理解,打开教材和网站,对于IQ信号的解释大多是长篇数学推导,以至于都误以为是进入了数学领域,忘记了自己的初衷。我尝试不用复杂难懂的高数,只依赖初等数学来理解和解释这个概念。

*************************************************************************************
ScreenShots20230730-102702.png

这是一个基本的正弦信号曲线,描述一个信号有三大要素,幅度A,频率F,相位P,调制和解调信号也是对这三个属性进行控制和解析,但是这和IQ有什么关系呢?

假如我们在现实世界里面搜集测量一个电波信号,在某一时刻我们获得一个电压值,由于这个电压值是孤立的,可能属于这个正弦波上的任意一点,得到这个点的数值,我们无法确定或者推算出这个正弦波的幅度,频率和相位信息,也就是说当前是信息缺失的,不完整的,你也能会说我们可以等搜集到完整的信号后再去计算,我们这是一个连续的规则信号,如果信号是一个不规则,任意形状的波形,我们处理起来更棘手。

*************************************************************************************
u=2365012856,199408910&fm=30&app=106&f=PNG.png

我们举个生活中的列子,现在有一个飘再空中的气球,单凭这一张照片,我们无法判断出气球当前是静止的还是运动的,运动方向是什么,运动速度是多少,当前我们的信息是缺失的,如果再有一张不同时刻的照片我们判断起来就容易多了。

*************************************************************************************
正弦波.png
继续回到我们的正弦波,如果我们需要两个点来记录这个波形,哪两个最近点最能表达完整的信息呢,很明显是1/4周期的两个点是包含波形完整信息的最近的两个点,1/2周期和整个周期的两个点因为同在0电位,反而不容易判断,实际上1/4周期的点,可以计算出幅度,频率,相位,而这个属性恰恰是描述一个波最重要的三个要素。


说了这么多,这又和IQ什么关系呢,对于接收来讲IQ信号是对同一个电磁波在1/4周期时刻采集的两个值,接收方要想精确获取此两个周期的值需要PLL做同频同相处理,也就是相干解调的条件,如果不同频同相,此两个数值可能有所偏差。
*************************************************************************************
ScreenShots20230730-103021.png

对于单个波形来讲,是无所谓正弦波和余弦波的,因为你在接收时无法确定相位,正弦和余弦是一个相对的概念,如果我们有两个波形,可以把一个当作参考,把一个当作正弦,另外一个当作余弦来处理。

*************************************************************************************
ScreenShots20230729-224459.png

对于信号合成来讲,如果选择两个同频相位不同的信号来进行合成,也是相差90度相交的最方便合成,

*************************************************************************************
ScreenShots20230730-110743.png

相差180度是两个相反的波形,只会相互抵消消弱,无法影响相位,

*************************************************************************************
ScreenShots20230730-111018.png

360度的就又回到了原点,无法实现更多的变换。

*************************************************************************************
频率合成.png

如果合成信号的相位是随机的,那么两个信号合成后会生成两个频率,一个是频率和,一个频率差,如果正交合成可以抵消掉其中一个,只生成一个频率。

*************************************************************************************
ScreenShots20230730-143417.png

以上是项目依赖

********************************************************************************************

am调制


am调制.png

这是am调制公式以及代码

公式说明:

AM:调制结果

A:幅度

Ma:调制指数

Wm:调制信号

Wc:载波信号

t:时间序列

函数参数说明:

FS:采样率

Fm:调制信号频率

Fc:载波信号频率

T:调制时长

m:调制指数

*************************************************************************************
am调制测试代码.png

这是am调制测试代码

*************************************************************************************
ScreenShots20230729-192646.png

这是am调制结果图表

********************************************************************************************
am解调.png

这是am解调公式以及代码

公式说明:

I,Q:iq信号

A0:直流信号

m(n):解调信号

函数参数说明:

data:复数信号序列

********************************************************************************************

fm调制
fm调制.png

这是fm调制公式以及代码



公式说明:

FM:调制结果

A:幅度

Wc:载波信号

Ma:调制指数

Wm:调制信号

t:时间序列

函数参数说明:

FS:采样率

Fm:调制信号频率

Fc:载波信号频率

T:调制时长

m:调制指数

*************************************************************************************
fm调制测试代码.png
这是fm调制测试代码

*************************************************************************************

ScreenShots20230729-192857.png
这是fm调制结果图表

*************************************************************************************
fm解调.png

这是fm解调公式以及代码

公式说明:

f(n):瞬时频率

I:当前I信号

Ip:前一个I信号

Q:当前Q信号

Qp:前一个Q信号

函数参数说明:

data:复数信号序列

这是一个鉴频器解调算法

*************************************************************************************


原理是通过对两组IQ值计算相位差或者斜率来获得瞬时频率,相位差正比于频率,这是一种比较巧妙的算法

********************************************************************************************

频率偏移
频率偏移.png

频率偏移,由于我们关心的信号不一定在中心点,因此需要把信号偏移到中心点,要理解这个变换,需要了解欧拉公式,一个上帝公式,e,pi,i,1每一个都是在数学史上里程碑式的存在,以这种方式完美的结合在了一起,我目前还尚未理解这个公式,但是可以把这个公式的作用看作是乘以一个cos函数

*************************************************************************************
exp测试代码.png
ScreenShots20230730-132112.png

这是我以两种方式数据生成的图表

*************************************************************************************
频率偏移测试代码.png

这是频率偏移测试代码

*************************************************************************************
ScreenShots20230729-194641.png

这是频率偏移测试图表

********************************************************************************************

重采样
重采样.png

重采样,作用是升高或降低采样率以进行采样率匹配,这里用了up和down两个参数,是为了尽量避免小数形式重采样

*************************************************************************************
重采样测试代码.png

这是重采样测试代码

*************************************************************************************
ScreenShots20230730-133557.png

这是重采样对比结果图

********************************************************************************************

滤波

滤波.png
这是滤波代码

函数说明:

数字去加重滤波器,衰减高频作用

data:解码数据序列

bw:带宽

*************************************************************************************

ScreenShots20230729-221313.png
这是滤波对比结果图表

********************************************************************************************
sdr录制-1.png

前面的准备工作做好了,我们来实际检验一下我们的工作,先打开sdrsharp来录制一些iq数据

*************************************************************************************

ScreenShots20230729-200207.png
录制的IQ文件在sdrsharp根目录

*************************************************************************************

fm中心查看前.png
测试前先看下频率中心点以及采样率

*************************************************************************************
fm中心频率查看.png

可以看出频率中心点在540K左右,采样率是2M

*************************************************************************************

fm中心频率偏移结果.png
这是执行偏移之后的结果图,可以看到原来中心点在540k的频率信号现在偏移到了0中心点

*************************************************************************************
fm完全执行.png
执行完代码,文件存放到了wav-files目录

*************************************************************************************
fm音频试听.png

打开wav文件试听一下

*************************************************************************************

am收音测试代码.png
我们用同样的方式测试一下am的解调效果,这里我是用的网上下载的一个国外航空管制录制的IQ文件

*************************************************************************************
am音频测试.png

打开am.wav文件试听一下

********************************************************************************************

视频地址:https://www.bilibili.com/video/BV1e841127CX

项目地址:https://gitee.com/zhuxianguo/python-sdr

评分

3

查看全部评分

     
发表于 2023-7-31 10:23:24 | 显示全部楼层
am的解调没那么复杂的,塞不进单片机
用包络检波,图中第一个am波,第二个理想二极管检波,第三个一阶iir低通滤波器,第四个提取的场强信号。
am.jpg
am检波低通滤波器公式:
lpf.jpg

附:包络检波matlab文件
  1. clear all;
  2. clc;


  3. N=10000
  4. n=0:N-1
  5. fs=2000
  6. fc=cos(2*pi*1000.*n/N)
  7. fa=sin(2*pi*10.*n/N)

  8. alpha=1-1/64
  9. am=fc.*(0.5+0.4*fa)
  10. %fft_sig=abs(fft(am))
  11. %plot(fft_sig(950:1050))
  12. am1=am
  13. am1(am1<0)=0
  14. %

  15. %sig1=filter(ones(1,256)/256,[1,zeros(1,255)],am1)
  16. sig1=filter([1,1]*((1-alpha)/2),[1,-alpha],am1)
  17. rssi=filter(ones(1,fs)/fs,[1,zeros(1,255)],am1)
  18. subplot(4,1,1)
  19. plot(am)
  20. title('am')
  21. subplot(4,1,2)
  22. plot(am1)
  23. title('am包络检波1')
  24. subplot(4,1,3)
  25. plot(sig1)
  26. title('am包络检波2')
  27. subplot(4,1,4)
  28. plot(rssi)
  29. title('rssi')
复制代码

评分

2

查看全部评分

回复 支持 2 反对 0

使用道具 举报

     
发表于 2023-7-31 16:32:20 | 显示全部楼层
阿拉灯神钉 发表于 2023-7-31 14:38
啊,所以呢?我开汽车还要知道汽车怎么制造的?
我用手机还要知道手机工作原理?

马云家有rx888mkii,100k-30M,是射频直接采样的。中波,短波音质跟直放机是一样的。
对电脑要求高。你可以试试
回复 支持 0 反对 1

使用道具 举报

     
发表于 2023-7-31 02:45:32 | 显示全部楼层
这个帖子所含技术超越整个板块99%的帖子
回复 支持 反对

使用道具 举报

     
发表于 2023-7-31 08:28:03 | 显示全部楼层
好帖,sdr软件无线电
回复 支持 反对

使用道具 举报

     
发表于 2023-7-31 09:22:45 | 显示全部楼层
只要cpu处理能力足够,这些数字处理都不是问题
回复 支持 反对

使用道具 举报

     
发表于 2023-7-31 11:25:54 | 显示全部楼层
本帖最后由 iffi123 于 2023-7-31 11:28 编辑
qmycy 发表于 2023-7-31 10:23
am的解调没那么复杂的,塞不进单片机
用包络检波,图中第一个am波,第二个理想二极管检波,第三个一阶iir ...


超外差+低中频,单片机还能凑合处理,直采的话根本来不及,还得先正交解调出I,Q,再计算出幅度
回复 支持 反对

使用道具 举报

     
发表于 2023-7-31 12:23:33 | 显示全部楼层
iffi123 发表于 2023-7-31 11:25
超外差+低中频,单片机还能凑合处理,直采的话根本来不及,还得先正交解调出I,Q,再计算出幅度

sdr里还有欠采样(带通采样)。
像那种1Mhz的数字电桥,都是窄带信号,按照采样定理,需要2*1MHz。
实际不需要,可以用带通采样,选取合适的防混叠滤波器+带通采样搞定。
stm32f4xx我记得有3个adc,最高采样率3.5M,基本跟低中端dsp媲美。
那个nanovna的第一版就是i2s声卡采样。
回复 支持 反对

使用道具 举报

     
发表于 2023-7-31 12:44:37 | 显示全部楼层
本帖最后由 iffi123 于 2023-7-31 12:50 编辑
qmycy 发表于 2023-7-31 12:23
sdr里还有欠采样(带通采样)。
像那种1Mhz的数字电桥,都是窄带信号,按照采样定理,需要2*1MHz。
实 ...


你说的1M数字电桥,全新的都要上万了,用更快的芯片也用得起

欠采样的话,滤波器变得复杂了不好设计,除非是固定接收频率

stm32片内ADC速度是能到好几M,  CPU时钟才多少,处理几M采样率的信号,根本来不及处理

所以又回到2个方案,要么先来一级模拟变频到低中频,降低对cpu处理压力,比如市售大部分的dsp收音机芯片,都是采用低中频方案,几十KHz到100多KHz,也比较省电(车机除外,因为信号处理过多很耗电)

要么直采,需要高速adc, 外加fpga数字变频,然后再由性能好点的cpu解调,当然功耗是小不小的
回复 支持 反对

使用道具 举报

     
发表于 2023-7-31 12:52:03 来自手机 | 显示全部楼层
本帖最后由 分立元件 于 2023-7-31 12:55 编辑

就数字处理这块就难倒不少人了,理论上:天线》AD采样》数字处理》喇叭,但实现起来难啊
回复 支持 反对

使用道具 举报

     
发表于 2023-7-31 14:38:40 | 显示全部楼层
啊,所以呢?我开汽车还要知道汽车怎么制造的?
我用手机还要知道手机工作原理?

来点实际的!
回复 支持 反对

使用道具 举报

     
发表于 2023-7-31 23:34:54 来自手机 | 显示全部楼层
简单解释一下iq调制的理解,手机打字尽量简单:
信号的表达是复数的,当然虚部、实部都可以是0。
am调制,虚部是0,把信号实部乘以cos哪些就可以发射了,收到的信号可以相干解调继续乘cos后滤波,也可以其他方法,但一定要搞明白对应频域分析的传递函数是啥。
am调制是双边带的,频域分析上有对称的部分,所以浪费了一半,为了不发射频域分析上那一半,信号的虚部就不能为0。
那虚部是啥,信号实部的希尔伯特变换,然后分别用cos和sin去调制,调制就是频率搬移,加起来发出去,这个信号就是单边带的了,这个加起来的两个部分就是i路和q路。
如果不想希尔伯特变换,i路q路的信号随便填,就是星座图了,比如64
qam,发出去的信号比双边带信号带宽并不少,但是不对称了,也就不浪费了。
回复 支持 反对

使用道具 举报

发表于 2023-7-31 23:37:55 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
发表于 2023-7-31 23:50:44 来自手机 | 显示全部楼层
fm调制,就是相位函数对时间求导,与iq没啥关系。
频率偏移,不知道你要干啥,如果是收发设备之间一般考虑多普勒分析,如果你所谓中心频率的问题一般是自适应滤波。
升降采样是一个比较有意思的话题,传统香农奈奎斯特那一套,主要是离散和连续,量化误差,频域混叠这些玩意的分析;最新的是压缩感知相关理论,采样间隔时间不固定,降噪方面依赖约束一致性这些理论。
回复 支持 反对

使用道具 举报

     
发表于 2023-7-31 23:57:29 来自手机 | 显示全部楼层
气球下面那一堆属于统计信号处理里面已知信号模型的信号参数估计问题,你的分析完全不搭边。如果你想踏实的去理解这些,你有很多砖头厚的书要看,而且需要一位导师帮你形成通信的知识体系,如果就是搞着玩,网上抄就是了,别浪费时间去理解,你的理解基本上不太可能蒙对。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-5-1 01:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表