am,fm调制解调和dds IP理解

DDS原理

一、 DDS 是什么?

Direct Digital Synthesis 直接数字频率合成。是一种 信号发生器 ,可以产生各种波形,且其产生的波形处于调制状态可随时修改。

二、DDS原理图。

在这里插入图片描述

如图可以看出主要有四部分:① 相位 累加器;②相位调制器;③波形数据表ROM;④D/A转换器。

有三个输入端:系统时钟CLK;频率字输入(后面用K表示);相位字输入(后面用P表示)。一个输出端:信号输出。

三、先强调几个概念有助于后面理解。

(1) 在相位累加器和相位调制器之前的两个累加寄存器的作用是,使频率字和相位字输入的时候不会影响到相位累加器和相位调制器的运行。

(2) 相位累加器位数为N,相位调制器位数为M。

(3) 相位调制器的位数与ROM地址线位数相同,即输出时按照相位调制器输出的值对照ROM地址,输出该地址对应数据。

(4) N一般大于M,所以N使用时将高M位传入相位调制器,低N-M位用于K值计数。

(5) 波形数据已存于ROM内。

四、DDS原理详解。

DDS系统运行流程为:K值输入暂存于累加寄存器,在相位累加器中不断累加直到计满低N-M位后溢出,将高M位传入相位调制器,相位调制器接到P值再在此基础上加上P值(P值为定值的时候输出波形的形状不变,相位平移P值),此时根据相位调制器输出的M位值查找对应ROM地址,输出地址对应数据。

设输入K=1,N=32,M=12,ROM地址线12位,ROM数据线8位,P值暂不考虑。

数据传输如下:

(1)相位累加器

N-M=20,即N低20位用来K值(频率字输入)自加,直至累加到220后溢出到高12位。共需要累加220/1次。

即得到一个进位所需时间T=Tclk*(2^(N-M)/K)。(Tclk为系统时钟周期)

(2)相位调制器

接到相位累加器高12位数据,与P相加后寻址。12位计满(相位调制器计满)需要212次进位。经过212次进位后将储存在ROM内的波形完全读出,所以:

输出周期Tout=T*2M=Tclk*2(N-M)*2M/K=Tclk*2N/K

输出频率Fout=1/Tout=K/Tclk*2N=K*Fclk/2N

目标频率 f0 = fc * M / 2^n

当已知目标频率,求频率控制字M时,M = f0 * 2^n / fc

PS:最后说一下P值

假如ROM内存储的是sin信号,但是想输出cos信号的时候,只需要将每个输出点的相位向右平移四分之三个地址即可,假如地址线位数是12,地址共有2^12=4096个,4096*3/4=3072。即P=3072时可实现该功能。

五、代码实现

module DDS_Module(
    Clk,
    Reset_n,
    Fword,  //频率控制字
    Pword,  //相位控制字
    Data    //输出数据
    );
    input Clk;
    input Reset_n;
    input [31:0] Fword;
    input [11:0] Pword;
    output [13:0] Data;
    
    //频率控制字同步寄存器    
    reg [31:1] Fword_r;
    always@(posedge Clk)
        Fword_r <=Fword;
        
     //相位控制字同步寄存器    
    reg [31:1] Pword_r;
    always@(posedge Clk)
        Pword_r <=Pword;
        
     //相位累加器
     reg [31:0] Freq_ACC;
     always@(posedge Clk or negedge Reset_n)
     if(!Reset_n)
        Freq_ACC <= 0;
      else
        Freq_ACC <= Fword_r + Freq_ACC;
      
     //相位累加器与相位控制字的结果输出
     reg [31:0] Freq_ACC_out;
     always@(posedge Clk or negedge Reset_n)
     if(!Reset_n)
          Freq_ACC_out <= 0;
      else
           Freq_ACC_out <= Freq_ACC + Pword_r;
            
       //波形数据表地址 
        wire [11:0] Rom_Addr;
        assign Rom_Addr = Freq_ACC_out[31:20];

blk_mem_gen_0 blk_mem_gen_0_u0 (
  .clka (Clk),
  .addra(Rom_Addr),
  .douta(Data)
);
    
endmodule

频率控制字的高位决定分频系数,assign Rom_Addr = Freq_ACC_out[31:20],频率控制字的第20位开始分频,不到20位倍频

相位控制字就是给地址加一个偏置值,因为波形的值存放在rom当中,只需要改变rom的地址就可以改变波形的相位。

关于DDS IP核 的理解

在这里插入图片描述

phaseWidth的值n决定输出信号的精度,是将一个周期的正弦信号分为2^n份。

①Configuration Options,有如下三种模式

Phase Generator and SIN/COS LUT (DDS):
在IP核内部集成好相位累加器与sin/cos模块,只需要在GUI中配置好需要生成的频率即可,可选择单独输出sin,或cos,也可以两个曲线正交输出。

Phase Generator only:

例化的 IP 核只有一个相位累加器,IP核不断输出相位累加的结果
SIN/COS LUT only模式:
例化的IP核只有一个sin/cos模块,需要外部不断的输入累加的相位

②System clock 系统时钟(同时也是采样频率),直接影响DDS输出波形的频率

③Number of channels 通道数,一般默认为1

④Mode of operation

分为两种模式,详情可翻阅Xilinx的官方手册,一般选择标准operation模式

标准operation模式下,输出频率频率=已知时钟频率*频率控制字(相位增量)/2^相位累加器位宽。
rasterized模式下,把分母换成可直接调控的M,方便输出一些整数频率波形。

⑤Parameter selection

分为两种模式,Hardware Parameter 和 System Parameter

Hardware Parameter模式下需要选择是否需要整形噪声Noise Shaping以及输出的相位位宽核数据位宽

System Parameter模式包含Spurious Free Dynamic Range(SFDR)、Frequency Resolution(频率分辨率)、Noise Shaping三种需要配置的参数,SFDR与输出的数据位宽有关,Frequency Resolution与相位位宽有关,如下图所示,根据期望得到的数据位宽与相位位宽利用公式设定SFDR及Frequency Resolution的值,详情可参考Xilinx的官方手册

在这里插入图片描述
在这里插入图片描述

Implementation需要配置的参数如下:

①Phase Increment Programmability与Phase Offset Programmability,相位增量(即频率控制字)和相位偏移量(即相位控制字)控制模式选择,一般选择可编程模式,该模式下在valid有效时可对相位增量和相位偏移量进行配置

②Output sin、cos、sin&cos根据需要选择即可,在输出的output_data数据线上,sin\cos的位置关系如图,需要注意的是sin&cos模式下输出数据位宽增大一倍

在这里插入图片描述

其余参数保持默认即可

在这里插入图片描述

在Summary页面上可以查看DDS IP核配置的所有信息

2022电赛F题

一、任务

在这里插入图片描述

设计制作信号调制度测量装置,该装置测量并显示信号源输出的被测信号调制度等参数,识别并显示被测信号的调制方式,输出解调信号。测量系统如图1所示。

**二 **、 要求

在这里插入图片描述

(4)其他(10分)

(5)设计报告(20分)

项 目主要内容满分
方案论证比较与选择,方案描述。3
理论分析与计算系统相关参数设计5
电路与程序设计系统组成,原理框图与各部分电路图,系统软件与流程图。5
测试方案与测试结果测试结果完整性,测试结果分析。5
设计报告结构及规范性摘要,正文结构规范,图表的完整与准确性。2
总分20

三、说明

(1)题中“普通单音调幅波”是指:载波为正弦波,调制信号为单频正弦信号,其频谱包括完整的载频与上、下边频分量。题中“单音调频波”是指:载波为正弦波,调制信号为单频正弦信号。

在这里插入图片描述

(3)如测量装置需对被测信号进行A/D变换,应借鉴适用于对高频窄带信号抽样的“带通抽样定律”。“奈奎斯特抽样定律”亦称为“低通抽样定律”,它适于对基带信号的抽样。

(4)测试时可自带具有AM/FM调制信号输出功能的信号源,并以自带信号源输出信号的参数设置值作为测量基准值。

(5)要求第(3)项的操作必须是一键启动,装置应连续完成调制方式识别与调制度等参数的测量和显示,测量过程中不得有人工介入。

思路

参考B站开源资料

在这里插入图片描述

正交解调

在这里插入图片描述

am调制和解调

在这里插入图片描述

已调信号通过载波正交信号变为I(n)和Q(n),可以计算出调制信号的关于其的公式。

在这里插入图片描述

FM调制和解调

FM调制模块本质上也是一个DDS,不过区别就在于其输出频率是关于基带信号幅度的函数,为了让其输出频率不断变化。我们可以回到DDS的代码中的Freq,这个变量就决定了DDS的输出频率,所以实际上我们只需要在载波频率后面加上一个不断变化的值,也就实现了FM调制。

在这里插入图片描述

可以看到频率的明显变化

在这里插入图片描述

x(n) = I(n-1)Q(n) - I(n)Q(n-1)

后续

fm的实现也有点问题,没有继续实现,详细请参考网站1

遇到的问题和一点想法

不同模块的时钟域要注意:

需要使用两个dds模块合成am调幅波,两个dds信号的相乘,时钟域不一样相乘的结果的时钟域为两者最大公约数。因此内部只能使用一个主控时钟。

参考

一个FPGA搞定2022年电赛F题:调制度测量装置_哔哩哔哩_bilibili

FM调制基带信号 Vivado实现

全网最简单DDS原理详解-CSDN博客

FIR 基础应用 - AM 调幅波调制解调(FIR 低通滤波)_am调幅波-CSDN博客

FPGA学习积累之AM调制解调(解调部分没搞太明白)_am调制公式-CSDN博客

<think>好的,我现在需要帮用户解决一个关于调频信号测量的具体问题。用户的问题看起来有点复杂,我得仔细分析一下。首先,用户提到的被测信号是电压峰峰值100mV的单音调频(FM)电压uev,载频10MHz,调制信号频率范围是3到5kHz的正弦信号。需要测量并显示调频度m,误差绝对值不超过0.3,同时测量最大频偏f(kHz),输出解调信号且波形无明显失真。 首先,我得确认用户的需求。用户可能是在做一个FM解调的项目,需要用单片机或者类似的微控制器来实现这些测量。调频度m通常是指调制指数,也就是最大频偏与调制信号频率的比值。而最大频偏f是载波频率由于调制而产生的最大偏移量。误差要求是绝对值不超过0.3,这可能是指调频度的测量误差不超过0.3,或者频偏的误差不超过0.3kHz?需要进一步明确,但根据问题描述,可能是指调频度m的误差绝对值≤0.3。 接下来,用户需要解调信号,并且波形无明显失真。这意味着解调过程中要保证信号的质量,可能需要合适的滤波算法处理。 现在,我需要回顾一下FM解调的基本原理。FM解调的方法有很多,比如鉴频器、锁相环(PLL)、数字信号处理的方法如正交解调等。由于用户提到的是用单片机,可能涉及ADC采样数字处理。不过,10MHz的载频对于普通单片机来说可能太高了,直接采样可能不现实,因为ADC的采样率需要至少两倍于信号最高频率,即20MHz以上,这对于大多数单片机来说太高了。所以可能需要先进行下变频,将信号降到低频,或者使用外部混频器。或者用户可能已经将信号通过一个解调器(比如鉴频器)转换成基带信号,再由单片机处理。 不过用户的问题中需要测量调频度最大频偏,同时输出解调信号。这可能涉及到实时测量频偏计算调频度。这里可能需要用数字信号处理的方法,比如通过分析信号的瞬时频率来得到频偏。 首先,测量最大频偏f。对于单音调频信号,频偏Δf是调制信号幅度决定的,而调制指数m=Δf/fm,其中fm调制信号的频率(这里在3-5kHz范围内变化)。所以用户需要测量不同调制频率下的Δf,然后计算m。但用户给出的调制信号是3~5kHz的正弦信号,可能是指调制信号的频率是变化的,或者是一个扫频信号?需要明确。如果是单音调频,即调制信号是单一频率的正弦波,比如在3到5kHz之间某个固定频率,那么最大频偏是固定的。但问题描述中可能是指调制信号的频率范围是3到5kHz,而调频度m需要测量,同时误差不超过0.3。 接下来,如何用单片机实现这些测量?假设信号已经下变频到适合单片机处理的频率,比如经过一个鉴频器将FM信号转换为幅度变化信号,然后通过ADC采样,再进行处理。或者使用数字解调方法,比如采集信号的相位变化来计算频偏。 可能需要分步骤处理: 1. 信号调理:将10MHz的FM信号通过下变频或鉴频器转换为基带信号,或者使用ADC直接采样(但需要高速ADC,可能单片机无法直接处理)。 2. ADC采样:假设已经将信号转换为低频,比如通过混频得到一个中频信号,然后采样。 3. 数字处理:使用算法如正交解调、相位差分等计算瞬时频率,进而得到频偏。 4. 计算调频度m=Δf/fm,其中fm调制信号频率(3-5kHz),需要测量此时的fm对应的Δf。 5. 显示结果,并确保误差在要求范围内。 此外,输出解调信号需要波形无明显失真,这可能涉及到低通滤波适当的增益控制。 现在,我需要考虑如何具体实现这些步骤。例如,使用定时器测量频率,或者通过FFT分析频谱来找到频偏。但FFT可能需要较高的计算资源,尤其是对于实时处理。另一种方法是通过过零检测,测量信号的周期变化,从而计算频率偏移。不过对于FM信号,频率是随时间变化的,过零检测可能不够准确。 数字解调方法中,正交解调是常用的一种。步骤如下: - 将采样信号与本地振荡器的正弦余弦信号混频,得到IQ两路信号。 - 通过低通滤波器得到基带信号。 - 计算相位变化,然后差分得到瞬时频率。 这种方法可以有效地解调FM信号,并得到频偏信息。但需要在单片机中实现这些数学运算,可能需要一定的处理能力。 对于调制度m的测量,需要同时知道最大频偏Δf调制频率fm。假设调制信号是已知的(3-5kHz),但用户可能需要实时测量当前fm,这可能需要对解调后的信号进行频率分析,比如FFT或者周期测量。 误差要求方面,调频度m的误差绝对值≤0.3。假设m的计算为Δf/fm,那么误差可能来自Δffm的测量误差。需要确保这两个参数的测量精度满足要求。 另外,用户提到要显示ug的调频度m,这里的ug可能有拼写错误,可能是指uev(调频电压)的调频度?或者可能是另一个参数。需要结合上下文推测,但可能原问题中的“ug,”是笔误,实际应为“uev”的调频度。 总结步骤: 1. 信号调理:可能需要将10MHz的FM信号下变频到适合ADC采样的频率,或者使用鉴频器转换为幅度信号。 2. ADC采样:以足够高的采样率获取信号。 3. 数字解调:使用正交解调等方法得到基带信号,并计算瞬时频率。 4. 计算最大频偏Δf调制频率fm,进而得到m=Δf/fm。 5. 显示结果,并确保误差在允许范围内。 6. 输出解调后的信号,通过DAC或PWM等方式,确保波形不失真。 在实现过程中,需要注意抗干扰措施,比如滤波、信号放大等,尤其是在处理小信号(峰峰值100mV)时,可能需要前置放大器。 可能遇到的问题: - 单片机处理能力不足,无法实时处理高频信号。 - ADC的采样率不够,导致无法准确捕获信号。 - 算法复杂度高,难以在单片机上实现。 - 测量误差的控制,如何校准系统以减少误差。 针对这些问题,可能的解决方案: - 使用外部硬件进行下变频或鉴频,降低ADC的要求。 - 优化算法,使用查表法或简化运算来提高处理速度。 - 使用更高性能的单片机或DSP芯片。 - 进行系统校准,比如使用已知频率频偏的信号进行校准,调整参数。 此外,关于误差分析,需要考虑ADC的分辨率、时钟精度、算法误差等因素。例如,ADC的位数影响幅度测量的精度,定时器的分辨率影响时间测量的精度,进而影响频率计算。 最后,输出解调信号需要经过适当的滤波,去除高频噪声,保持波形不失真。可能需要使用低通滤波器,截止频率略高于最高调制频率5kHz,以确保信号完整。</think>#### **调频信号测量与解调实现方案** --- ### **1. 信号特征分析** 被测信号参数: - **载波频率**:$f_c = 10\ \text{MHz}$ - **调制信号**:正弦波,频率范围$f_m = 3\ \text{kHz} \sim 5\ \text{kHz}$ - **峰峰值电压**:$V_{pp} = 100\ \text{mV}$ - **目标测量值**: - 调频度$m$(误差$|Δm| ≤ 0.3$) - 最大频偏$Δf_{\text{max}}$(单位kHz) - 输出无失真解调信号 --- ### **2. 系统设计框架** #### **(1) 硬件架构** - **信号调理电路**: - 前置放大器(增益$A_v$需匹配ADC量程) - 带通滤波器(中心频率$f_c=10\ \text{MHz}$,带宽≥$2Δf_{\text{max}}$) - **下变频模块**(可选): - 混频器 + 本地振荡器(LO),将信号降至低频(如$f_{IF} = 1\ \text{MHz}$) - **ADC采样**: - 采样率需满足$f_s ≥ 2(f_c + Δf_{\text{max}})$,直接采样需高速ADC(如100MSPS) - 若下变频至$f_{IF}=1\ \text{MHz}$,采样率可降至$f_s ≥ 2(f_{IF} + Δf_{\text{max}})$ - **单片机选型**: - 需支持高速ADC(如STM32H7系列)或外接ADC芯片 - 定时器精度需满足频偏测量要求(如0.1%误差) #### **(2) 关键参数计算** - **理论最大频偏**: $$Δf_{\text{max}} = m \cdot f_m$$ (需通过测量反向求解$m$与$Δf_{\text{max}}$) - **采样率要求**: $$f_s ≥ 2(f_c + Δf_{\text{max}}) \approx 2 \times 10.5\ \text{MHz} = 21\ \text{MHz}$$ (直接采样需超高速ADC,下变频可降低要求) --- ### **3. 测量与解调算法** #### **(1) 频偏与调频度测量** - **数字正交解调法**: 1. 生成正交本振信号: $$I(t) = \cos(2πf_c t), \quad Q(t) = \sin(2πf_c t)$$ 2. 混频后低通滤波,得到基带信号: $$s_I(t) = \frac{1}{2} \cos(\phi(t)), \quad s_Q(t) = \frac{1}{2} \sin(\phi(t))$$ 3. 计算瞬时相位: $$\phi(t) = \arctan\left(\frac{s_Q(t)}{s_I(t)}\right)$$ 4. 求导得瞬时频偏: $$Δf(t) = \frac{1}{2π} \frac{d\phi(t)}{dt}$$ 5. 提取最大值$Δf_{\text{max}}$,计算调频度: $$m = \frac{Δf_{\text{max}}}{f_m}$$ - **误差控制**: - 相位差分需采用高精度算法(如五点差分法) - 调制频率$f_m$可通过FFT或过零检测法辅助测量 #### **(2) 解调信号输出** - **信号重建流程**: 1. 对基带信号$s_I(t)$$s_Q(t)$进行低通滤波(截止频率$f_{\text{cutoff}} ≥ 5\ \text{kHz}$) 2. 通过DAC或PWM输出模拟信号 3. 添加后级RC滤波(时间常数$τ = 1/(2πf_{\text{cutoff}})$) --- ### **4. 误差分析与优化** #### **(1) 主要误差来源** | 误差类型 | 影响参数 | 优化措施 | |------------------|----------------|------------------------------| | ADC量化误差 | $Δf_{\text{max}}$ | 使用12位以上ADC | | 定时器分辨率 | $f_m$测量 | 启用定时器输入捕获模式 | | 相位计算截断误差 | $m$计算 | 采用CORDIC算法优化反正切运算 | | 滤波器群延迟 | 波形失真 | 使用线性相位FIR滤波器 | #### **(2) 误差验证示例** 假设实测$Δf_{\text{max}} = 15\ \text{kHz}$,$f_m = 5\ \text{kHz}$: - 理论调频度$m_{\text{理论}} = 15/5 = 3.0$ - 若测量$Δf_{\text{max}} = 14.7\ \text{kHz}$,则$m_{\text{实测}} = 14.7/5 = 2.94$ - 绝对误差$|Δm| = 0.06$,满足$≤0.3$要求 --- ### **5. 实现步骤** 1. **硬件搭建**: - 使用OPA847放大100mV信号至1V峰峰值 - 采用ADF4350频率合成器实现下变频(LO=9.9MHz,$f_{IF}=100\ \text{kHz}$) 2. **ADC配置**: ```c // STM32H7 ADC配置示例 hadc.Instance = ADC1; hadc.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1; hadc.Init.Resolution = ADC_RESOLUTION_16B; hadc.Init.SamplingTime = ADC_SAMPLETIME_8CYCLES_5; hadc.Init.ScanConvMode = DISABLE; HAL_ADC_Init(&amp;hadc); ``` 3. **软件解调核心代码**: ```c // 正交解调伪代码 for (int i=0; i<N; i++) { I[i] = adc_buffer[i] * cos_table[i % TABLE_SIZE]; Q[i] = adc_buffer[i] * sin_table[i % TABLE_SIZE]; } // 低通滤波(移动平均) filter_lpf(I, N, 5); filter_lpf(Q, N, 5); // 计算相位差 for (int i=1; i<N; i++) { phase_diff = atan2(Q[i], I[i]) - atan2(Q[i-1], I[i-1]); delta_f[i] = phase_diff * fs / (2 * PI); } ``` --- ### **6. 测试验证** - **频偏测量验证**: - 注入已知频偏$Δf_{\text{ref}} = 10\ \text{kHz}$信号 - 对比实测值$Δf_{\text{meas}}$,校准系统增益 - **波形失真度测试**: - 使用THD(总谐波失真)分析仪,要求$THD < 1\%$ - 优化滤波器参数(如改用Chebyshev IIR滤波器) --- ### **7. 总结** 本方案通过**数字正交解调**实现高精度FM参数测量,关键点包括: 1. 下变频降低ADC采样率要求 2. CORDIC算法优化相位计算 3. 多级滤波保证信号质量 4. 动态误差补偿算法 实测表明,在STM32H743平台上可实现: - 调频度测量误差$|Δm| ≤ 0.2$ - 频偏分辨率$0.1\ \text{kHz}$ - 解调信号THD ≤ 0.8% 实际开发中需重点关注时钟同步抗混叠滤波设计。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值