1.AM的模拟调制过程

​ AM信号是一种振幅调制信号,其携带的信息保存在其信号的振幅中,通过改变载波的振幅来实现基带数据的传输。

其函数表达式如下:

\[s(t) = (A + m(t))*cos(2\pi ft + \varphi)
\]

其中:

A:表示基带信号加载的直流分量。

m(t):表示基带信号。

\(cos(2\pi ft + \varphi )\):表示载波信号。

正交调制法公式如下:

\[I(t) = (A + m(t))*cos(\varphi) \\
Q(t) = (A + m(t))*sin(\varphi) \\
s(t) = I(t)*cos(2\pi ft) + Q(t)*sin(2\pi ft)
\]

2.AM的数字解调

​ AM解调的方法有很多种,以下只简单介绍两种,分别为非相干解调(包络面解调法)和相干解调(正交解调法)。一般的相干解调法要求产生一个与调制载波严格等频等相的载波用于信号的解调,抗载频失配能力较差,毕竟出现频差或者相差就会对解调出来的信号产生较大的误差。

​ 以下介绍的正交解调法将消除频差或者相差带来的误差,增加其解码正确率。

通过正交的方式即可解调出基带信号,其数学推导如下:

​ 假设基带信号频率为f1,调制的载波频率为f2,直流信号为A,解调的载波频率为f3,则:

I路:

\[I(t) = s(t)*cos(2\pi f_3t + \varphi) = (A + cos(2\pi f_1t))*cos(2\pi f_2t) *cos(2\pi f_3t + \varphi)
\]

根据三角函数公式:

\[\begin{split}
I(t) &= \frac{1}{2}A[cos(2\pi (f_2 + f_3)t+\varphi) + cos(2\pi (f_2 - f_3)t+\varphi)] \\
&+ \frac{1}{4}[cos(2\pi (f_1 + f_2 + f_3)t+\varphi) + cos(2\pi (f_1 - f_2 - f_3)t+\varphi)] \\
&+ \frac{1}{4}[cos(2\pi (f_1 + f_2 - f_3)t+\varphi) + cos(2\pi (f_1 - f_2 + f_3)t+\varphi)]
\end{split}
\]

经过低通滤波器,不考虑滤波器增益:

\[I(t) = \frac{1}{2}Acos(2\pi (f_2 - f_3)t+\varphi) + \frac{1}{4}cos(2\pi (f_1 + f_2 - f_3)t+\varphi) + \frac{1}{4}cos(2\pi (f_1 - f_2 + f_3)t+\varphi)
\]

设解调的载波与调制的载波的频率偏移为f4:

\[f_4= f_3-f_2
\]

则:

\[I(t) = \frac{1}{2}Acos(2\pi f_4t+\varphi) + \frac{1}{4}cos(2\pi (f_1 + f_4)t+\varphi) + \frac{1}{4}cos(2\pi (f_1 - f_4)t+\varphi)
\]

同理可求得Q:

\[Q(t) = \frac{1}{2}Asin(2\pi f_4t+\varphi) + \frac{1}{4}sin(2\pi (f_1 + f_4)t+\varphi) + \frac{1}{4}sin(2\pi (f_1 - f_4)t+\varphi)
\]

还原信号:

\[s(t) = \sqrt{I(t)^2+Q(t)^2} = \frac{1}{2} (A + cos(2\pi f_1t))
\]

这样就消除了相位差带来的误差,同时这个有个前提:$$A + m(t)$$必须大于0,不过经过AM调制,一定是大于0的。否则将出现失真。

​ 由上式可以推断出解调的载波与调制的载波的频率偏移频率,只要位于设计的滤波器的带宽内,就可以解调出原始信号,与偏移量的大小无关。只要保证在获取I路信号和Q路信号的滤波器能正确将高频信号滤除,通过IQ求模,就可以成功将频差相位差两个变量消除。

3.去直流

​ 解调出来的信号中包含了一个直流信号A,在频谱分析中我们一般将直流信号当作频率为0的正弦信号,那么这样我们就可以通过滤波器的方式对直流进行处理。

1.均值滤波器

​ 将直流信号分量计算出来,将原信号减去直流信号就可以获取到基带信号。

\[m(t) = s(t) - A/2 = cos(2\pi f_1t)/2
\]

​ 均值滤波器表达式:

\[f(n) = \sum_{i=0}^{N-1} \frac{x(n+i)}{N}
\]

matlab:

close all;
N1 = 64;
N2 = 128;
N3 = 256;
a = ones(N1,1)/N1;
b = ones(N2,1)/N2;
c = ones(N3,1)/N3;
figure('menubar','figure');
[h1, w1] = freqz(a,1,2048,1000);
[h2, w2] = freqz(b,1,2048,1000);
[h3, w3] = freqz(c,1,2048,1000);
plot(w1, abs(h1),'DisplayName',num2str(N1));
hold on
plot(w2, abs(h2),'DisplayName',num2str(N2));
hold on
plot(w3, abs(h3),'DisplayName',num2str(N3));
title('Amplitude Response');
xlabel('Frequency (Hz)');
ylabel('Magnitude');
legend('show');

​ 可以看出均值滤波器实际上是一种特殊大的均值滤波器,随着N的变大,其截至频率变小。所以可以根据需求选择适当的截至频率,从而滤除除直流外的其余频率分量,从而分离出直流信号。

2.高通滤波器

​ 均值滤波器采用分离出直流的方法来算出基带信号,高通滤波器则采样滤除直流信号,保留基带信号的方式来处理数据。可以通过matlab的工具filterDesigner来设计一个满足需求的高通滤波器。涉及要求,基带信号频率大于通带频率。且越靠近0频效果越好。

4.MATLAB解调

fs = 10E6;%采样率
A = 1;%直流大小
l = 1E3;%基带信号点数
f = 0.1E6;%基带信号
f_c = 2E6;%载波信号
t = 0:1/fs:(l-1)/fs;
fi = pi/3;%IQ相位
mt = cos(2*pi*f*t);%基带数据
%% IQ基带数据调制
I = (A + mt) * cos(fi);
Q = (A + mt) * sin(fi);
mod_data = I.* cos(2*pi*f_c*t) + Q.* sin(2*pi*f_c*t); %% 基带数据解调
demod = sqrt(I.^2 + Q.^2)/2; %% 去直流
dc_signal = sum(demod)/l;
demod0 = demod-dc_signal;
%% 保存IQ数据FPGA使用仿真
fid = fopen('AM.txt','w');
for i = 1:l
fprintf(fid,'%d %d\n',floor(I(i)* (2^13)),floor(Q(i)* (2^13)));
end
fclose(fid); %% 绘制
figure
time = 4;
subplot(time,1,1);
plot(mt);
title('基带数据'); subplot(time,1,2);
plot(mod_data);
title('调制数据'); subplot(time,1,3);
plot(demod);
title('解调数据'); subplot(time,1,4);
plot(demod0);
title('解调数据(去直流)');

结果:

5.FPGA解调

逻辑代码:

module am_demod(
input clk ,
input rst ,
//解调参数
input i_valid ,
input [15:0] i_data_i ,
input [15:0] i_data_q ,
output o_rdy ,
output [15:0] o_data ) wire am_valid ;
wire [23:0] am_i ;
wire [23:0] am_q ; wire am_rdy ;
wire [47 : 0] m_axis_dout_tdata ;
//AM 解调 assign am_valid = i_valid ;
assign am_i = {{8{i_data_i[15]}},i_data_i} ;
assign am_q = {{8{i_data_q[15]}},i_data_q} ; cordic_translate cordic_translate (
.aclk (clk ), // input wire aclk
.s_axis_cartesian_tvalid (am_valid ), // input wire s_axis_cartesian_tvalid
.s_axis_cartesian_tdata ({am_i,am_q} ), // input wire [47 : 0] s_axis_cartesian_tdata
.m_axis_dout_tvalid (am_rdy ), // output wire m_axis_dout_tvalid
.m_axis_dout_tdata (m_axis_dout_tdata ) // output wire [47 : 0] m_axis_dout_tdata
); assign o_rdy = am_rdy ;
assign o_data = m_axis_dout_tdata[15:0] ;
endmodule

仿真代码:

module tb_am_demod();
reg clk;
reg rst; initial begin
clk <= 0;
rst <= 1;
#300
rst <= 0;
end always #(100/2) clk <=~clk; reg valid;
reg [15:0] din_i ;
reg [15:0] din_q ;
wire o_rdy ;
wire [15:0] o_data ; am_demod am_demod(
.clk (clk ),
.rst (rst ), .i_valid (valid ),
.i_data_i (din_i ),
.i_data_q (din_q ),
.o_rdy (o_rdy ),
.o_data (o_data ) );
integer file_rd; //定义数据读指针
integer flag;
initial begin //打开读取和写入的文件,这里的路径要对
file_rd = $fopen("AM.txt","r");
end
reg [15:0] cnt;
always @(posedge clk)begin
if(rst)begin
din_i <= 0;
din_q <= 0;
cnt <= 0;
valid <= 0;
end
else if(cnt <= 1000)begin
valid <= 1;
flag = $fscanf(file_rd,"%d %d",din_i,din_q);
cnt <= cnt + 1;
end
else begin
$fclose(file_rd);
$stop();
end
end
endmodule

仿真结果:

笔记-AM的正交解调法的更多相关文章

  1. Python实现正交实验法自动设计测试用例

    1.简介 正交试验法是研究多因素.多水平的一种试验法,它是利用正交表来对试验进行设计,通过少数的试验替代全面试验,根据正交表的正交性从全面试验中挑选适量的.有代表性的点进行试验,这些有代表性的点具备了 ...

  2. 正交实验法之 Allpairs电商项目用例设计实战

    一.正交实验法概述 正交实验法是研究多因素多水平的一种方法,它是通过正交表挑选部分有代表性的水平组合试验替代全面试验.这些有代表性的组合试验具备了"均匀分散,整齐可比"的特点.正交 ...

  3. AGC电路以及AD8347正交解调芯片

    1.AGC电路的工作原理 1.1AGC电路的用途 随着电磁环境的日益恶化, 不同频段电磁信号之间的相互串扰, 以及可能出现的人为干扰, 将会导致接收机输入端口的信号动态范围较大, 一旦出现电路饱和或是 ...

  4. 【算法笔记】B1024 科学计数法

    1024 科学计数法 (20 分) 科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][1-9].[0-9]+E[+-][0-9]+,即数字的整数部分只有 1 位, ...

  5. OpenCV2.x自学笔记——最大类间方差法OTSU

    推荐用法:(参数勿动) threshold(gray,binary,0,255,CV_THRESH_OTSU+CV_THRESH_BINARY);

  6. 目标跟踪之Lukas-Kanade光流法

    转载自:http://blog.csdn.net/u014568921/article/details/46638557 光流是图像亮度的运动信息描述.光流法计算最初是由Horn和Schunck于19 ...

  7. 浅谈压缩感知(九):正交匹配追踪算法OMP

    主要内容: OMP算法介绍 OMP的MATLAB实现 OMP中的数学知识 一.OMP算法介绍 来源:http://blog.csdn.net/scucj/article/details/7467955 ...

  8. 目标跟踪之Lukas-Kanade光流法(转)

    光流是图像亮度的运动信息描述.光流法计算最初是由Horn和Schunck于1981年提出的,创造性地将二维速度场与灰度相联系,引入光流约束方程,得到光流计算的基本算法.光流计算基于物体移动的光学特性提 ...

  9. 事件分析法学习笔记(ESM)

    事件分析法基础学习笔记 1.定义   事件分析法是研究某事件的发生对组织价值的影响以及影响程度. 或者说研究特定事件对组织行为的影响. notes:事件分析法的关键点在于探讨所关注事件在某个时段产生的 ...

  10. 方差分析3——正交表与正交实验设计(R语言)

    正交试验设计(orthogonal design简称正交设计(orthoplan),是利用正交表(orthogonal table)科学地安排与分析多因素试验的方法,是最常用的试验设计之一.正交表是一 ...

随机推荐

  1. Sealos Devbox 发布,珍爱生命,远离 CI/CD

    水滴攻击太阳系用的是最原始的攻击方式:撞击!却又如此有效率. 当我们搞了一堆容器.编排.CI/CD.DevOps,发明了一大堆没什么用的名词之后,最终发现这些操作都是花里胡哨,让开发者越陷越深. 最终 ...

  2. Android性能优化:getResources()与Binder交火导致的界面卡顿优化

    背景 某轮测试发现,我们的设备运行一个第三方的App时,卡顿感非常明显: 界面加载很慢,菊花转半天 滑屏极度不跟手,目测观感帧率低于15 对比机(竞品)也会稍微一点卡,但是好很多,基本不会有很大感觉的 ...

  3. 怎么理解vue的单向数据流

    单向数据流是父组件传给子组件的数据,子组件没有权利修改,只能委托父组件修改,然后子组件更新

  4. docker镜像&容器管理

    1.拉取镜像 docker pull 拉取 MySQL8.0 和 tomcat 拉取MySQL8.0镜像 [root@localhost ~]# docker pull mysql:8.0 拉取tom ...

  5. FFmpeg开发笔记(五十七)使用Media3的Transformer加工视频文件

    ​继音视频播放器ExoPlayer之后,谷歌又推出了音视频转换器Transformer,要在音视频加工领域施展拳脚.根据Android开发者官网介绍:Jetpack Media3是Android媒体库 ...

  6. k8s-NFS系统配置

    k8s-NFS系统配置 NFS(network filesystem),nfs文件系统在k8s中主要用于持久化存储,可以被多个pod访问和共享数据. 特点 数据持久性 nfs为k8s的pod提供了一种 ...

  7. 云原生爱好者周刊:使用树莓派组建 K8s 集群 | 2022-08-08

    开源项目推荐 Raspberry Pi Kubernetes Cluster 这是一个教育项目,旨在探索如何在家中使用树莓派构建 Kubernetes 集群,并使用 Ansible 来自动化部署和配置 ...

  8. MVC PHP架构 博客论坛实现全过程

    目录 1. MVC的历史 1.1 优点与缺点 1.1.1 优点 1.1.2 缺点 2. 个人博客论坛的MVC实现 2.1 前言 2.2 web代码结构 框架 2.2.1 web应用发展 2.2.2 C ...

  9. ESP8266+ MQTT+SG90(舵机) platformio

    ESP8266 + MQTT + SG90(舵机) platformio 连线 ESP8266 MG90S(舵机) GND 棕色 VCC 红色 模拟引脚 橙色 源代码 https://gitee.co ...

  10. 教程:搭建一个我的世界模组服务器(Linux)

    首先给自己的服务器打个广告 服务器版本1.12.2 地址:www.verysucksminecraftserver.top(好像只有一个月) 所需Mod网盘:https://pan.quark.cn/ ...