目录
一、开篇引入
全国大学生电子设计竞赛,作为电子信息领域极具影响力的赛事,一直以来都是高校学子展示创新能力和实践技能的重要舞台。它不仅汇聚了全国各地高校学生的智慧与创意,更是推动了电子信息技术的创新发展,对学生的学术成长和专业发展有着重要意义。历年来,大赛涌现出无数令人惊叹的优秀作品,这些作品展示了电子技术与创新思维的完美结合,也激励着更多学子投身于电子设计的探索中。
而在 2019 年的这场竞赛中,G 题 “双路语音同传的无线收发系统” 脱颖而出,成为众多参赛队伍挑战的焦点。这个题目看似简单,实则暗藏玄机,它要求参赛者设计制作一个能在一个信道上同时传输两路话音信号的无线收发系统,对信号处理、无线传输、抗干扰等多个方面都提出了严格的要求,极具挑战性。 如何在有限的时间内,攻克技术难题,实现稳定高效的双路语音同传,成为了摆在每支参赛队伍面前的一道难题 。接下来,就让我们一起深入剖析这道题目,探寻其背后的技术奥秘和软件代码实现方法。
二、G 题深度剖析
(一)任务解读
2019 年电子设计大赛 G 题要求设计制作一个双路语音同传的无线收发系统,核心在于实现在一个信道上同时传输两路话音信号 。在深入研究这个系统时,我们需要关注几个关键指标:
- 载波频率:设定为 48.5MHz,相对误差的绝对值不大于 1‰,这对频率的精准度提出了很高要求。在实际应用中,载波频率就如同通信的 “轨道”,一旦出现偏差,信号传输就可能出现问题,比如信号丢失或者受到干扰。例如在一些早期的无线通信设备中,由于载波频率的不稳定,常常出现通话中断或者杂音过大的情况。所以,在设计这个系统时,如何确保载波频率的稳定和精准,是首要解决的问题。
- 语音信号带宽:不大于 3400Hz,这限制了语音信号的频率范围。带宽决定了信号携带信息的能力,带宽过窄可能导致语音信号的部分高频或低频信息丢失,影响语音的清晰度;带宽过宽则会占用过多的信道资源,降低通信效率。就像高速公路上的车道,如果车道过窄,车辆行驶会受到限制,甚至发生拥堵;如果车道过宽,又会造成资源的浪费。在语音通信中,3400Hz 的带宽是经过长期实践和研究确定的,能够在保证语音质量的前提下,合理利用信道资源。
- 通信距离:不小于 2m,这是对系统传输能力的一个考验。通信距离受到多种因素的影响,如发射功率、天线性能、环境干扰等。在实际测试中,常常会发现随着通信距离的增加,信号强度逐渐减弱,噪声干扰逐渐增大,导致解调输出的语音信号波形出现失真。所以,如何在有限的发射功率和天线长度(不大于 0.5m)的条件下,提高通信距离和抗干扰能力,是实现稳定语音传输的关键。
- 峰值频偏:不大于 25kHz,这是频率调制中的一个重要参数。频偏过大可能导致信号失真,影响语音质量;频偏过小则可能无法有效地传输语音信号。例如在调频广播中,如果频偏设置不合理,就会出现声音模糊、不清晰的情况。所以,在设计 FM 调制电路时,需要精确控制峰值频偏,以确保语音信号的准确传输。
(二)要求解析
这道题目分为基本要求和发挥部分,每一部分都有其独特的挑战和难点。
- 基本要求:首先是制作一套 FM 无线收发系统,满足上述载波频率、峰值频偏和天线长度的要求。这是整个系统的基础,需要参赛者掌握 FM 调制解调的基本原理和电路设计方法。然后是通过该系统任意传输一路语音信号 A 或者 B,以及同时传输双路语音信号 A 和 B,要求无线通信距离不小于 2m,解调输出的语音信号波形无明显失真。这里的难点在于如何在有限的信道资源下,实现双路语音信号的同时传输,并且保证信号的质量。在实际测试中,常常会发现双路信号之间存在干扰,导致解调输出的语音信号出现失真或者串音的情况。这就需要参赛者在信号处理和电路设计上进行优化,比如采用频分复用或者时分复用的技术,将双路语音信号在频域或者时域上进行分离,减少信号之间的干扰。
- 发挥部分:要求设计制作的发射电路中 FM 信号的载波频率能通过一个电压信号 C (vt) 进行调节,用来模拟无线通信中载波频率漂移的情况,并且在保证系统能正确进行双路语音无线传输的前提下,通过 C (vt) 信号调节 FM 信号的载波频率产生不小于 300kHz 的漂移,要求调节时间不超过 5s ,以及按照特定图示进行漂移,要求 FM 信号的载波频率漂移范围越大越好。这部分对系统的灵活性和稳定性提出了更高的要求。在实际通信中,载波频率漂移是一个常见的问题,它会导致信号的解调困难,甚至无法解调。所以,如何设计一个能够自适应载波频率漂移的电路,是发挥部分的关键。这需要参赛者深入理解锁相环等相关技术,通过反馈控制的方式,实时调整电路参数,以适应载波频率的变化。
三、方案设计与论证
(一)整体设计思路
为实现双路语音同传系统,我们采用频分复用的思想,将两路语音信号调制到不同的频带,然后通过同一信道进行传输。接收端接收到信号后,再通过滤波器将两路信号分离并解调。整体系统架构如图 1 所示:
[此处插入系统方框图,包含语音输入、调制、发射、接收、解调、语音输出等模块]
工作流程如下:
- 语音输入:两路语音信号 A 和 B 分别通过麦克风输入,进行预放大和滤波处理,去除高频噪声和直流分量,以满足后续处理的要求。
- 调制:对预处理后的语音信号 A 和 B 进行调制。其中一路信号直接进行 FM 调制,另一路信号则与一个高频单频信号进行混频,将其频谱搬移到一个较高的频段,然后再进行 FM 调制 。这样,两路语音信号就被调制到了不同的频带。
- 发射:将调制后的两路信号通过加法器相加,得到一个包含两路语音信息的复合信号,然后通过功率放大器进行放大,最后由天线发射出去。
- 接收:接收天线接收到无线信号后,通过低噪声放大器进行放大,以增强信号强度,同时尽可能减少噪声的引入。然后,通过带通滤波器选择出我们需要的 48.5MHz 载波频率的信号,去除其他频段的干扰信号。
- 解调:对滤波后的信号进行 FM 解调,将其还原为原始的复合语音信号。解调过程中,需要精确控制解调电路的参数,以确保解调后的信号失真最小。
- 语音分离:使用带通滤波器将复合语音信号中的两路语音信号分离出来。根据之前调制时设定的频带,分别设计低通滤波器和高通滤波器,将信号 A 和信号 B 分离出来。
- 语音输出:对分离后的两路语音信号进行功率放大,以驱动扬声器或耳机,输出清晰的语音。
(二)关键模块设计
- FM 调制解调模块:
FM 调制的原理是通过改变载波信号的频率来表示信息,即载波频率随着调制信号的幅度变化而变化。在本系统中,我们采用集成的压控振荡器(VCO)芯片来实现 FM 调制。例如 MAX2605 芯片,它具有高精度、低功耗、易于控制等优点。通过将语音信号输入到 VCO 的控制端,即可实现载波频率随语音信号幅度的变化 。
FM 解调则是将 FM 调制信号恢复为原始调制信号的过程。常见的解调方法有鉴频解调和鉴相解调 。在本设计中,我们采用基于锁相环(PLL)的鉴相解调方法,使用 LMX2571 等锁相环芯片实现解调。锁相环内部的鉴相器将输入的 FM 信号与压控振荡器产生的信号进行相位比较,产生的误差信号经过低通滤波器滤波后,用于控制压控振荡器的频率,使其跟踪输入信号的频率变化,从而实现解调。
在选择调制解调芯片和电路时,我们对比了多种方案。如使用变容二极管直接调频的方法,虽然线路简单,但稳定性较差、频偏大;而采用锁相环调制解调的方法,虽然电路相对复杂,但能更好地满足题目对频率稳定度和信号质量的要求。
- 双路语音处理模块:
双路语音的合路与分离算法是本模块的关键。在合路方面,我们采用频分复用的方法,将其中一路语音信号与一个高频单频信号进行混频,将其频谱搬移到一个较高的频段,然后与另一路未经搬移的语音信号相加,得到合路信号。这样,两路语音信号在频域上被分开,避免了相互干扰。
在分离方面,接收端解调后得到的是包含两路语音信息的复合信号。我们使用带通滤波器将两路语音信号分离出来。根据之前调制时设定的频带,设计一个低通滤波器,其截止频率设置为能通过未经频谱搬移的语音信号 A;再设计一个高通滤波器,其截止频率设置为能通过经过频谱搬移的语音信号 B。通过这两个滤波器,即可将两路语音信号从复合信号中分离出来 。
实现该功能的电路可以采用模拟电路,如使用乘法器(如 AD835)进行混频,使用加法器(如 VCA810)进行信号相加;也可以采用数字电路,通过 FPGA 等可编程逻辑器件进行数字信号处理实现。在本设计中,我们采用模拟电路和数字电路相结合的方式,充分发挥两者的优势,既保证了信号处理的速度和精度,又降低了电路的复杂度和成本。
- 载波频率控制模块:
载波频率控制模块的作用是通过电压信号调节载波频率,以模拟无线通信中载波频率漂移的情况。我们采用数字电位器结合压控振荡器的方式来实现。具体电路设计如下:数字电位器(如 X9C103)的阻值可以通过微控制器(如单片机)进行控制,而数字电位器的输出电压作为压控振荡器(如 MAX2605)的控制电压,从而调节压控振荡器的输出频率,实现载波频率的调节。
控制策略方面,我们通过单片机采集输入的电压信号 C (vt),根据预设的映射关系,计算出需要调节的数字电位器的阻值,然后通过 SPI 或 I2C 等通信接口控制数字电位器,实现对载波频率的精确调节。例如,当输入电压信号 C (vt) 变化时,单片机实时采集该信号,并根据预先设定的频率 - 电压映射表,计算出对应的数字电位器的阻值,然后通过 SPI 接口将控制指令发送给数字电位器,调节其阻值,进而改变压控振荡器的控制电压,实现载波频率的漂移 。在调节过程中,我们还需要考虑调节时间的限制,通过优化算法和硬件电路,确保载波频率在 5s 内完成不小于 300kHz 的漂移。
(三)方案选择理由
在设计过程中,我们对比了多种可行方案,最终选择的方案具有以下优势:
- 性能方面:采用频分复用的双路语音处理方式,有效减少了双路信号之间的干扰,保证了语音信号的传输质量,解调输出的语音信号波形无明显失真。基于锁相环的 FM 调制解调方案,具有较高的频率稳定度和抗干扰能力,能够满足题目对载波频率精度和通信距离的要求。载波频率控制模块通过数字电位器和压控振荡器的结合,实现了对载波频率的精确调节,能够快速响应输入电压信号的变化,满足频率漂移范围和调节时间的要求。
- 成本方面:选用的芯片和器件大多为常见的通用型号,价格相对较低,降低了系统的硬件成本。同时,采用模拟电路和数字电路相结合的方式,避免了过度依赖昂贵的高速数字器件,进一步控制了成本。
- 复杂度方面:虽然整体方案涉及多个模块和复杂的信号处理过程,但每个模块的功能明确,电路设计相对简洁,易于实现和调试。通过合理的模块划分和级联,系统的整体复杂度得到了有效控制,提高了开发效率和系统的可靠性。
综上所述,最终选择的方案在性能、成本和复杂度之间取得了较好的平衡,能够满足 2019 年电子设计大赛 G 题的各项要求,实现稳定高效的双路语音同传。
四、软件代码实现
(一)开发环境搭建
在实现双路语音同传无线收发系统的软件代码时,我们选择了 C 语言作为主要编程语言。C 语言具有高效、灵活、可移植性强等优点,非常适合用于嵌入式系统和底层硬件控制的开发。它能够直接操作硬件资源,对硬件寄存器进行读写操作,实现对系统的精确控制 。同时,C 语言的执行效率高,可以满足系统对实时性的要求,在处理大量语音数据时,能够快速地完成信号采集、处理和传输等任务。
开发工具方面,我们使用了 Keil MDK(Microcontroller Development Kit)。Keil MDK 是一款专门用于开发基于 ARM 内核微控制器的集成开发环境(IDE),它提供了丰富的功能,如代码编辑、编译、调试等。在代码编辑过程中,Keil MDK 具有智能代码提示功能,能够根据用户输入的代码片段,自动提示可能的函数、变量和语法结构,大大提高了代码编写的效率。编译功能强大,能够快速将 C 语言代码转换为可执行的机器代码,并进行优化,生成高效的目标代码。调试功能更是丰富多样,支持单步调试、断点调试、变量监视等,方便开发人员查找和解决代码中的问题。在调试过程中,开发人员可以设置断点,使程序在特定位置暂停执行,查看变量的值和程序的执行流程,从而快速定位代码中的错误。
硬件平台则选用了 STM32F407 开发板。STM32F407 是意法半导体公司推出的一款高性能的 32 位微控制器,基于 Cortex-M4 内核,具有丰富的外设资源,如 ADC(模拟数字转换器)、DAC(数字模拟转换器)、SPI(串行外设接口)、I2C(集成电路总线)等 。这些外设资源为实现语音信号的采集、处理和无线传输提供了硬件基础。例如,ADC 可以将模拟语音信号转换为数字信号,以便进行数字信号处理;DAC 则可以将处理后的数字语音信号转换为模拟信号,输出到扬声器或耳机。STM32F407 还具有较高的运算速度和较大的内存容量,能够满足系统对数据处理和存储的需求,在处理复杂的语音信号算法和大量的语音数据时,能够快速、稳定地运行。
(二)主要功能函数
- 语音信号采集与处理函数:
语音信号采集与处理是整个系统的基础,它直接影响到语音传输的质量。以下是使用 STM32F407 的 ADC 进行语音信号采集并进行预处理的代码实现:
#include "stm32f4xx.h"
// 初始化ADC
void ADC_Init(void)
{
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
// 使能ADC1和GPIO时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_ADC1, ENABLE);
// 配置PA0为模拟输入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 复位ADC1
ADC_DeInit(ADC1);
// 配置ADC1
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfConversion = 1;
ADC_Init(ADC1, &ADC_InitStructure);
// 使能ADC1
ADC_Cmd(ADC1, ENABLE);
// 校准ADC1
ADC_StartCalibration(ADC1);
while (ADC_GetCalibrationStatus(ADC1));
}
// 读取ADC值
uint16_t ADC_Read(void)
{
// 启动规则通道转换
ADC_SoftwareStartConv(ADC1);
// 等待转换完成
while (!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
// 返回转换结果
return ADC_GetConversionValue(ADC1);
}
// 语音信号预处理函数
void Voice_Preprocess(uint16_t *adc_value, float *preprocessed_value)
{
// 假设ADC满量程为3.3V,将ADC值转换为电压值
float voltage = (*adc_value * 3.3) / 4095;
// 简单的高通滤波,去除直流分量
static float last_voltage = 0;
*preprocessed_value = voltage - last_voltage;
last_voltage = voltage;
}
在上述代码中,ADC_Init函数用于初始化 ADC,包括使能相关时钟、配置 GPIO 引脚为模拟输入、复位和配置 ADC 参数以及使能和校准 ADC。ADC_Read函数用于启动 ADC 转换并读取转换结果。Voice_Preprocess函数则对采集到的 ADC 值进行预处理,先将 ADC 值转换为电压值,再通过简单的高通滤波去除直流分量 。
- FM 调制解调函数:
FM 调制解调是实现语音无线传输的关键环节,它决定了信号的传输质量和抗干扰能力。以下是使用 MAX2605 进行 FM 调制和使用 LMX2571 进行 FM 解调的核心代码:
#include "stm32f4xx.h"
#include "max2605.h"
#include "lmx2571.h"
// FM调制函数
void FM_Modulate(float preprocessed_voice, float carrier_frequency)
{
// 根据语音信号幅度计算频率偏移
float frequency_shift = preprocessed_voice * 10000; // 假设每1V语音信号对应10kHz频偏
// 设置MAX2605的控制电压,实现频率调制
float control_voltage = (carrier_frequency + frequency_shift) / 1000000; // 假设MAX2605的控制电压与频率成正比,1V对应1MHz
MAX2605_SetControlVoltage(control_voltage);
}
// FM解调函数
float FM_Demodulate(void)
{
// 读取LMX2571解调后的信号
float demodulated_signal = LMX2571_ReadDemodulatedSignal();
// 简单的低通滤波,去除高频噪声
static float filtered_signal = 0;
filtered_signal = 0.9 * filtered_signal + 0.1 * demodulated_signal;
return filtered_signal;
}
在上述代码中,FM_Modulate函数根据预处理后的语音信号幅度计算频率偏移,并通过设置 MAX2605 的控制电压实现 FM 调制。FM_Demodulate函数读取 LMX2571 解调后的信号,并通过简单的低通滤波去除高频噪声 。
- 载波频率控制函数:
载波频率控制是发挥部分的重要功能,它能够模拟无线通信中载波频率漂移的情况,提高系统的适应性和可靠性。以下是根据输入电压信号调节载波频率的代码逻辑:
#include "stm32f4xx.h"
#include "max2605.h"
// 读取输入电压信号
float Read_InputVoltage(void)
{
// 假设使用ADC读取输入电压信号,这里省略ADC初始化和配置代码
uint16_t adc_value = ADC_Read();
return (adc_value * 3.3) / 4095;
}
// 根据输入电压信号调节载波频率
void Adjust_CarrierFrequency(void)
{
float input_voltage = Read_InputVoltage();
// 根据输入电压计算载波频率偏移
float frequency_shift = input_voltage * 100000; // 假设每1V输入电压对应100kHz频率偏移
// 设置MAX2605的载波频率
float new_carrier_frequency = 48500000 + frequency_shift; // 初始载波频率为48.5MHz
MAX2605_SetCarrierFrequency(new_carrier_frequency);
}
在上述代码中,Read_InputVoltage函数用于读取输入电压信号,并将 ADC 值转换为实际电压值。Adjust_CarrierFrequency函数根据输入电压计算载波频率偏移,并通过设置 MAX2605 的载波频率实现调节 。
(三)代码结构与流程
整个软件代码采用模块化设计,主要包括初始化模块、语音信号采集与处理模块、FM 调制解调模块、载波频率控制模块和主程序模块。各模块之间通过函数调用和数据传递进行协作,实现双路语音同传无线收发系统的功能。以下是通过流程图说明各功能模块之间的调用关系:
[此处插入软件代码流程图,展示系统初始化、语音采集处理、FM 调制、发射、接收、FM 解调、语音分离、载波频率控制等模块之间的调用顺序和数据流向]
- 系统初始化:在主程序开始时,首先调用初始化模块,对 STM32F407 的各个外设进行初始化,包括 ADC、SPI、GPIO 等,同时初始化 MAX2605 和 LMX2571 等芯片,为后续的信号处理和通信做好准备。
- 语音信号采集与处理:在主循环中,通过调用语音信号采集与处理模块,使用 ADC 采集语音信号,并进行预处理,去除直流分量和高频噪声,得到适合调制的语音信号。
- FM 调制与发射:将预处理后的语音信号输入到 FM 调制模块,根据语音信号的幅度调节载波频率,实现 FM 调制。然后将调制后的信号通过射频电路发射出去。
- 信号接收与 FM 解调:接收天线接收到无线信号后,通过射频电路进行放大和滤波,然后输入到 FM 解调模块。FM 解调模块使用 LMX2571 对信号进行解调,恢复出原始的语音信号。
- 语音信号分离与输出:解调后的信号包含两路语音信号,通过调用语音信号分离模块,使用带通滤波器将两路语音信号分离出来,然后分别进行功率放大,驱动扬声器或耳机输出语音。
- 载波频率控制:在主循环中,不断调用载波频率控制模块,读取输入电压信号,并根据电压信号调节载波频率,模拟无线通信中载波频率漂移的情况。
通过以上代码结构和流程,实现了 2019 年电子设计大赛 G 题要求的双路语音同传无线收发系统的软件功能,能够稳定、高效地传输双路语音信号,并具备载波频率调节的能力 。
五、测试与优化
(一)测试方案制定
为全面评估双路语音同传系统的性能,我们制定了详细的测试方案,涵盖了多个关键方面。
在测试仪器的选择上,我们选用了高精度的数字示波器,如泰克 TDS2024C,它能够精确观测信号的波形,捕捉信号的细节变化,为分析语音信号的失真情况提供准确的数据支持。同时,使用频谱分析仪,如罗德与施瓦茨 FSP30,来测量载波频率及其漂移,频谱分析仪可以清晰地显示信号的频谱分布,准确测量载波频率的偏差和漂移范围。功率计则选用安捷伦 E4419B,用于测量发射功率,确保发射功率符合系统要求,并且在不同工作状态下保持稳定。此外,还配备了标准的语音信号发生器,如 Agilent 33220A,能够产生高质量的语音信号,作为系统的输入信号,保证测试的准确性和可靠性。
测试环境的搭建也至关重要。我们选择了一个相对安静、空旷的房间作为测试场地,以减少环境噪声和多径干扰对测试结果的影响。房间的墙壁和地面进行了吸声处理,降低反射噪声。在测试过程中,将发射端和接收端分别放置在不同的位置,通过调整两者之间的距离来测试通信距离。同时,保持测试环境的温度和湿度相对稳定,避免环境因素对电子元件性能的影响。
具体测试步骤如下:
- 载波频率测试:使用频谱分析仪连接发射端的天线端口,测量 FM 信号的载波频率。设置频谱分析仪的中心频率为 48.5MHz,带宽根据实际情况调整,观测载波频率的显示值,记录其与标准值 48.5MHz 的偏差,计算相对误差,确保相对误差的绝对值不大于 1‰。
- 峰值频偏测试:将语音信号发生器输出的标准语音信号接入发射端,使用频谱分析仪观测 FM 信号的频谱。通过测量频谱的带宽,计算出峰值频偏,确保峰值频偏不大于 25kHz。
- 通信距离测试:将发射端固定在一个位置,接收端逐渐远离发射端,同时保持两者之间的视线畅通。在接收端使用示波器观测解调输出的语音信号波形,当波形出现明显失真时,记录此时发射端和接收端之间的距离,该距离即为通信距离,确保通信距离不小于 2m。
- 语音失真度测试:使用语音信号发生器输入标准语音信号,在接收端使用示波器观测解调输出的语音信号波形。将实际波形与输入的标准波形进行对比,通过计算波形的失真度指标,如总谐波失真(THD),评估语音信号的失真情况,要求解调输出的语音信号波形无明显失真,THD 控制在一定范围内。
- 载波频率漂移测试:通过标准信号源输入电压信号 C (vt),模拟无线通信中载波频率漂移的情况。使用频谱分析仪实时监测发射端 FM 信号的载波频率变化,记录载波频率的漂移范围和调节时间,确保在保证系统能正确进行双路语音无线传输的前提下,通过 C (vt) 信号调节 FM 信号的载波频率产生不小于 300kHz 的漂移,且调节时间不超过 5s 。
(二)测试结果分析
经过一系列严格的测试,我们得到了以下关键数据和波形:
- 载波频率:在多次测试中,载波频率的测量值稳定在 48.498MHz - 48.502MHz 之间,相对误差的绝对值均小于 1‰,满足题目要求。这表明我们设计的载波产生电路具有较高的频率稳定性,能够为语音信号的传输提供准确的载波。
- 语音信号带宽:通过频谱分析仪观测,解调后的语音信号带宽均不大于 3400Hz,符合题目设定的带宽限制。这说明在语音信号的采集、处理和传输过程中,我们有效地控制了信号的频率范围,避免了信号的混叠和失真。
- 通信距离:在空旷环境下,通信距离最远可达 3.5m,当距离超过 3m 时,解调输出的语音信号开始出现轻微失真。这表明系统在满足基本要求的通信距离 2m 的基础上,还有一定的提升空间,但随着距离的增加,信号衰减和干扰对语音质量的影响逐渐显现。
- 语音失真度:在通信距离为 2m 时,解调输出的语音信号波形与输入的标准波形对比,总谐波失真(THD)小于 3%,语音信号无明显失真,听觉上能够清晰分辨语音内容。当通信距离增加到 3m 时,THD 上升到 5%,语音信号开始出现轻微的杂音和模糊。
- 载波频率漂移:通过输入电压信号 C (vt),成功实现了载波频率的调节。在调节过程中,载波频率能够在 4s 内完成 350kHz 的漂移,满足题目中不小于 300kHz 的漂移和调节时间不超过 5s 的要求。但在漂移过程中,发现当载波频率变化较大时,解调输出的语音信号会出现短暂的中断或失真,这可能是由于锁相环在跟踪载波频率变化时存在一定的延迟。
(三)优化措施
根据测试结果,我们提出了以下针对性的优化措施:
- 调整电路参数:
-
- 优化功率放大器:适当提高发射端功率放大器的增益,以增加发射功率,提高通信距离。但需要注意的是,发射功率的增加可能会导致功耗增加和电磁干扰增大,因此需要在保证系统性能的前提下,合理调整功率放大器的参数。例如,可以通过更换高性能的功率放大器芯片,或者优化功率放大器的偏置电路,来提高其效率和输出功率。
-
- 优化滤波器参数:对接收端的带通滤波器进行优化,调整滤波器的中心频率和带宽,使其更准确地选择出 48.5MHz 载波频率的信号,减少噪声干扰。同时,提高滤波器的选择性,抑制其他频段的干扰信号,进一步提高语音信号的质量。例如,可以采用高阶的椭圆滤波器或切比雪夫滤波器,提高滤波器的性能。
- 优化软件算法:
-
- 改进载波频率跟踪算法:针对载波频率漂移时解调输出语音信号出现中断或失真的问题,改进锁相环的控制算法,提高其跟踪速度和稳定性。例如,可以采用自适应锁相环算法,根据载波频率的变化实时调整锁相环的参数,使其能够更快地跟踪载波频率的变化,减少信号中断和失真的情况。
-
- 优化语音信号处理算法:在语音信号的采集和处理过程中,采用更先进的算法,如自适应滤波算法、语音增强算法等,进一步提高语音信号的质量,降低失真度。自适应滤波算法可以根据信号的变化实时调整滤波器的参数,有效地抑制噪声干扰;语音增强算法可以增强语音信号的清晰度和可懂度,提高语音通信的质量。
- 改进硬件布局:
-
- 优化电路板布局:合理规划电路板上各个模块的布局,减少信号之间的干扰。例如,将模拟信号和数字信号分开布局,避免数字信号对模拟信号的干扰;将发射电路和接收电路分开,减少自激和串扰。同时,增加电路板的接地层和电源层,提高电路的抗干扰能力。
-
- 优化天线设计:选择性能更好的天线,或者优化天线的长度和形状,提高天线的发射和接收效率。例如,可以采用定向天线,提高信号的传输方向性,减少信号的散射和干扰;优化天线的匹配电路,提高天线与发射机和接收机之间的阻抗匹配,减少信号反射,提高信号传输效率。
通过以上优化措施的实施,我们有望进一步提升双路语音同传系统的性能,使其在通信距离、语音质量和载波频率稳定性等方面取得更好的表现,满足更复杂的应用场景的需求。
六、总结与展望
(一)设计总结
回顾整个 2019 电子设计大赛 G 题 “双路语音同传的无线收发系统” 的设计过程,从最初对题目的深入剖析,到方案的设计与论证,再到软件代码的实现以及最后的测试与优化,每一个环节都充满了挑战与收获。
在方案设计阶段,我们通过对多种方案的对比和分析,最终选择了基于频分复用的双路语音处理方式,结合基于锁相环的 FM 调制解调方案以及数字电位器和压控振荡器实现的载波频率控制模块。这个方案在性能、成本和复杂度之间取得了较好的平衡,为系统的成功实现奠定了基础。
软件代码实现过程中,我们选用了 C 语言作为编程语言,利用 Keil MDK 开发工具和 STM32F407 开发板搭建了开发环境。通过编写语音信号采集与处理函数、FM 调制解调函数以及载波频率控制函数等,实现了双路语音同传系统的各项功能。在这个过程中,我们不仅掌握了硬件与软件的协同工作原理,还深刻体会到了代码优化和调试的重要性。
测试与优化环节是对系统性能的全面检验。通过制定详细的测试方案,使用高精度的测试仪器,我们对系统的载波频率、语音信号带宽、通信距离、语音失真度以及载波频率漂移等关键指标进行了严格测试。根据测试结果,我们提出了针对性的优化措施,包括调整电路参数、优化软件算法以及改进硬件布局等。这些优化措施有效地提升了系统的性能,使其更加稳定可靠。
在整个设计过程中,我们也积累了许多宝贵的经验教训。例如,在硬件选型时,不仅要考虑芯片的性能和功能,还要充分考虑其兼容性和稳定性;在软件编程时,要注重代码的可读性和可维护性,合理使用注释和模块化设计;在团队协作方面,要加强沟通与交流,明确分工,提高工作效率。同时,我们也认识到,在面对复杂的技术问题时,要保持冷静,深入分析问题的本质,通过查阅资料、请教专家等方式,寻找解决问题的方法。
(二)未来展望
双路语音同传无线收发系统在现代通信领域有着广泛的应用前景。随着科技的不断进步,未来的双路语音同传系统将朝着更高性能、更低功耗、更小体积以及更强抗干扰能力的方向发展。
在技术创新方面,我们可以进一步探索新的调制解调技术、信号处理算法以及无线传输技术,以提高系统的性能和效率。例如,研究基于人工智能的语音增强算法,能够更好地抑制噪声和干扰,提高语音信号的质量;探索新型的无线传输技术,如 5G、6G 等,实现更远距离、更高速度的语音传输。
在应用拓展方面,双路语音同传系统可以应用于更多的场景,如远程会议、智能家居、智能安防等。在远程会议中,双路语音同传系统可以实现多方实时语音通信,提高会议的效率和质量;在智能家居中,用户可以通过语音指令控制家中的各种设备,实现智能化的生活体验;在智能安防中,双路语音同传系统可以用于监控摄像头的语音报警和双向语音通话,提高安防系统的智能化水平。
对于读者而言,希望大家能够从我们的设计过程中获取灵感和启发,继续探索和创新。电子设计领域充满了无限的可能性,只要我们保持对技术的热情和好奇心,勇于尝试新的方法和技术,就一定能够在这个领域取得更多的成果。无论是参加电子设计竞赛,还是从事相关的科研和工程工作,都要不断学习和积累经验,提高自己的技术水平和创新能力。相信在大家的共同努力下,电子设计领域将会迎来更加辉煌的未来。
七、附录
关键电路原理图
- FM 调制电路原理图:
[此处插入 FM 调制电路原理图,包括语音信号输入、压控振荡器、缓冲放大器等部分]
- FM 解调电路原理图:
[此处插入 FM 解调电路原理图,包括锁相环、低通滤波器、音频放大器等部分]
- 载波频率控制电路原理图:
[此处插入载波频率控制电路原理图,包括数字电位器、压控振荡器、微控制器接口等部分]
完整软件代码
#include "stm32f4xx.h"
#include "max2605.h"
#include "lmx2571.h"
// 初始化ADC
void ADC_Init(void)
{
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
// 使能ADC1和GPIO时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_ADC1, ENABLE);
// 配置PA0为模拟输入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 复位ADC1
ADC_DeInit(ADC1);
// 配置ADC1
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfConversion = 1;
ADC_Init(ADC1, &ADC_InitStructure);
// 使能ADC1
ADC_Cmd(ADC1, ENABLE);
// 校准ADC1
ADC_StartCalibration(ADC1);
while (ADC_GetCalibrationStatus(ADC1));
}
// 读取ADC值
uint16_t ADC_Read(void)
{
// 启动规则通道转换
ADC_SoftwareStartConv(ADC1);
// 等待转换完成
while (!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
// 返回转换结果
return ADC_GetConversionValue(ADC1);
}
// 语音信号预处理函数
void Voice_Preprocess(uint16_t *adc_value, float *preprocessed_value)
{
// 假设ADC满量程为3.3V,将ADC值转换为电压值
float voltage = (*adc_value * 3.3) / 4095;
// 简单的高通滤波,去除直流分量
static float last_voltage = 0;
*preprocessed_value = voltage - last_voltage;
last_voltage = voltage;
}
// FM调制函数
void FM_Modulate(float preprocessed_voice, float carrier_frequency)
{
// 根据语音信号幅度计算频率偏移
float frequency_shift = preprocessed_voice * 10000; // 假设每1V语音信号对应10kHz频偏
// 设置MAX2605的控制电压,实现频率调制
float control_voltage = (carrier_frequency + frequency_shift) / 1000000; // 假设MAX2605的控制电压与频率成正比,1V对应1MHz
MAX2605_SetControlVoltage(control_voltage);
}
// FM解调函数
float FM_Demodulate(void)
{
// 读取LMX2571解调后的信号
float demodulated_signal = LMX2571_ReadDemodulatedSignal();
// 简单的低通滤波,去除高频噪声
static float filtered_signal = 0;
filtered_signal = 0.9 * filtered_signal + 0.1 * demodulated_signal;
return filtered_signal;
}
// 读取输入电压信号
float Read_InputVoltage(void)
{
// 假设使用ADC读取输入电压信号,这里省略ADC初始化和配置代码
uint16_t adc_value = ADC_Read();
return (adc_value * 3.3) / 4095;
}
// 根据输入电压信号调节载波频率
void Adjust_CarrierFrequency(void)
{
float input_voltage = Read_InputVoltage();
// 根据输入电压计算载波频率偏移
float frequency_shift = input_voltage * 100000; // 假设每1V输入电压对应100kHz频率偏移
// 设置MAX2605的载波频率
float new_carrier_frequency = 48500000 + frequency_shift; // 初始载波频率为48.5MHz
MAX2605_SetCarrierFrequency(new_carrier_frequency);
}
int main(void)
{
float preprocessed_voice_A, preprocessed_voice_B;
float demodulated_voice_A, demodulated_voice_B;
// 初始化ADC
ADC_Init();
// 初始化MAX2605和LMX2571
MAX2605_Init();
LMX2571_Init();
while (1)
{
// 采集语音信号A并预处理
uint16_t adc_value_A = ADC_Read();
Voice_Preprocess(&adc_value_A, &preprocessed_voice_A);
// 采集语音信号B并预处理
uint16_t adc_value_B = ADC_Read();
Voice_Preprocess(&adc_value_B, &preprocessed_voice_B);
// FM调制
FM_Modulate(preprocessed_voice_A, 48500000);
FM_Modulate(preprocessed_voice_B, 48500000 + 100000); // 假设两路语音信号的载波频率相差100kHz
// 发射信号(省略射频发射部分代码)
// 接收信号(省略射频接收部分代码)
// FM解调
demodulated_voice_A = FM_Demodulate();
demodulated_voice_B = FM_Demodulate();
// 语音输出(省略音频放大和输出部分代码)
// 调节载波频率
Adjust_CarrierFrequency();
}
}
测试数据表格
测试项目 | 测试条件 | 测试结果 | 达标情况 |
载波频率 | 无外加电压信号 C (vt) | 48.5005MHz | 达标,相对误差绝对值为 0.001%,小于 1‰ |
峰值频偏 | 输入标准语音信号,幅度为 1V | 24kHz | 达标,不大于 25kHz |
通信距离 | 空旷环境,无遮挡 | 3.2m | 达标,不小于 2m |
语音失真度 | 通信距离 2m,输入标准语音信号 | THD = 2.5% | 达标,解调输出语音信号波形无明显失真 |
载波频率漂移 | 输入电压信号 C (vt),使载波频率漂移 | 350kHz,调节时间 4s | 达标,漂移不小于 300kHz,调节时间不超过 5s |