如何使用数字化音频信号进行频率调制

时间:2023-11-13
 这是介绍主题和熟悉基本概念的完全合理的方式,但不太实用。在大多数实际应用中,基带信号将是一个复杂的波形,表现出频率和幅度的变化。这些频率和幅度的复杂变化正是我们在音频信号中发现的,并且如您所知,频率调制广泛用于传输声音信息。
 在本文中,我们将把声音文件转换为典型的 Scilab 数据数组,然后使用该现实数据作为基带信号执行频率调制。对于那些对软件定义无线电感兴趣的人来说,这应该是一个有价值的练习。当我们生成 FM 波形的数字化表示时,我们正在创建一系列可以发送到数模转换器、进行滤波、放大和传输的值。这使您无需设计调制电路即可实现定制的射频系统。 
 集成基带信号
 Scilab 命令integrate()允许我们创建与现有一系列值的不定积分相对应的一系列值。(这与定积分相反,定积分只是给出从指定下限到指定上限的曲线下面积。)让我们从基本的正弦波开始:

 

 缓冲区长度=2000;
 n = 0:(缓冲区长度 - 1);
 基带频率=5e3;
 采样频率=1e6;
 基带信号 = sin(2*%pi*n / (采样频率/基带频率));
 绘图(n,基带信号) 
 Integrate ()命令需要四个参数。前两个是字符串(Scilab 字符串用单引号或双引号括起来),第三个是数字,第四个是一系列数字。
 个参数:要积分的函数,例如“f(x) = sin(x)”,但没有“f(x) =”部分。
 第二个参数:在作为个参数给出的表达式中找到的积分变量,例如“x”。
 第三个参数:开始积分过程的下限。
 第四个参数:建立多个积分上限的一系列值。
 例如:

 

 BasebandSignal_integrated = 集成('sin(2*%pi*n / (采样频率/基带频率))', 'n', 0, n);
 绘图(n,BasebandSignal_integrated) 
 我们知道,正弦波的积分是一个负余弦波(加上一个常数),而integrate()命令确实产生了一个负余弦波,但是它有一个直流偏移,并且幅度与原始信号。这些问题很容易纠正。首先,我们通过取整个波形的平均值并从数组中的每个值中减去它来消除直流偏移:

 

 BasebandSignal_integrated = BasebandSignal_integrated - 平均值(BasebandSignal_integrated);
 绘图(n,BasebandSignal_integrated) 
 接下来,我们将数组中的所有值除以值: 
 BasebandSignal_integrated = BasebandSignal_integrated ./ max(BasebandSignal_integrated);
 绘图(n,BasebandSignal_integrated)
 合并音频文件
 我了一个人说“电路”这个词的 mp3 录音,然后将其转换为 WAV 文件并将其加载到 Scilab 中:
 音频 = wavread("C:\Users\Robert\Downloads\Circuit.wav");
 所得阵列包含超过 28,000 个样本;我将其缩减为包含 2000 个样本的摘录。我还转置了它(使用 ' 运算符),使其尺寸为 1×2000 而不是 2000×1:
 音频=音频(11000:12999);
 音频=音频';
 情节(n,音频)
 集成音频信号
 我们将使用inttrap()命令来执行音频数据的集成。看起来这个过程在数学上等同于我们上面使用Integrate()命令所做的事情;我使用inttrap()的原因是(据我所知)无法直接对无法用“sin(x)”等表达式表示的数据使用Integrate() 。
 inttrap ()命令使用梯形插值来计算由数据数组表示的波形的定积分(即曲线下的面积)。通过重复使用inttrap()并不断增加上限,我们可以生成一系列定积分,这些定积分对应于Integrate()生成的不定积分;如果您使用此技术生成正弦波的不定积分,您将看到结果与通过Integrate()获得的结果一致。
 以下是我用来集成阵列音频的命令: 
 对于 i=1:2000
 > audio_integrated(i) = inttrap(音频(1:i));
 > 结束 
 现在我们将消除 DC 偏移(如果波形有 DC 偏移)并将值缩放到大约 –1 到 +1 的范围内。 
 音频集成 = 音频集成 - 平均值(音频集成);
 音频集成 = 音频集成 ./ max(音频集成);
 绘图(n,音频集成)
 更改采样率
 在执行调制之前我们还需要做一件事。在上一篇文章中,我们通过在载波频率生成正弦波并将集成基带信号作为附加相位项包含在内来创建 FM 信号。不过,一个重要的细节是我们使用的基带采样频率对于载波频率信号来说足够高。我在本文中使用的 WAV 文件的采样频率为 44.1 kHz,这意味着我们不能使用基带采样频率进行调制过程 - 采样频率必须至少是调制信号中频率的两倍,对于实际系统,您可能希望采样频率至少是载波频率的五倍。
 那么下一步就是提高集成基带信号的采样率。我们可以使用intdec()命令来完成此操作。例如,假设载波频率为 800 kHz,我们决定使用 4.41 MHz 采样频率。这意味着我们将修改audio_integrated数组,如下所示: 

 采样率_增加因子 = 4.41e6 / 44.1e3;

 audio_integrated_upsampled = intdec(audio_integrated, SampleRate_IncreaseFactor); 

 以下两张图显示了采样率修改的结果。 
 波形看起来相同,水平轴显示上采样信号的数据点比原始信号多 100 倍。 
 结论
 至此,我们已经有了一个集成的音频基带信号,可以执行上一篇文章中介绍的调制命令。总的来说,我对我在这里开发的过程感到满意,尽管我确实想知道是否有更好的方法来执行集成。如果您有任何建议,请随时在下面的评论部分分享您的想法。
上一篇:了解 CCD 输出信号
下一篇:了解如何使用 Microchip 模块对数字输入和数字控制外设进行原型设计

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料