如何对数字化音频信号进行调频

时间:2023-04-12

在本文中,我们会将声音文件转换为典型的 Scilab 数据阵列,然后使用此真实数据作为基带信号执行频率调制。对于那些对软件无线电感兴趣的人来说,这应该是一个有价值的练习。当我们生成 FM 波形的数字化表示时,我们正在创建一系列可以发送到数模转换器、过滤、放大和传输的值。这允许您在不设计调制电路的情况下实现定制的 RF 系统。

 

集成基带信号

Scilab 命令integrate()允许我们创建一系列值,这些值对应于现有值系列的不定积分。(这与定积分相反,定积分只是给出从指定下限到指定上限的曲线下面积。)让我们从基本正弦波开始:

 

缓冲区长度 = 2000;
n = 0:(缓冲区长度 - 1);
基带频率 = 5e3;
采样频率 = 1e6;
基带信号 = sin(2*%pi*n / (采样频率/基带频率));
绘图(n,基带信号)

 

integrate ()命令需要四个参数。前两个是字符串(Scilab字符串用单引号或双引号括起来),第三个是数字,第四个是一串数字。

例如:

 

BasebandSignal_integrated = integrate('sin(2*%pi*n / (SamplingFrequency/BasebandFrequency))', '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 中:

 

audio = wavread("C:\Users\Robert\Downloads\circuit.wav");

 

生成的阵列有超过 28,000 个样本;我将其缩减为 2000 个样本摘录。我还调换了它(使用 ' 运算符),使其尺寸为 1×2000 而不是 2000×1:

 

音频=音频(11000:12999);
音频=音频';
情节(n,音频)

集成音频信号

我们将使用inttrap()命令来执行我们的音频数据的集成。看起来这个过程在数学上等同于我们上面使用integrate()命令所做的;我使用inttrap()的原因是没有办法(据我所知)直接使用integrate()处理不能用表达式(如“sin(x)”)表示的数据。

inttrap ()命令使用梯形插值来计算由数据数组表示的波形的定积分(即,曲线下的面积)。通过重复使用上限稳定增加的inttrap() ,我们可以生成一系列与integrate()生成的不定积分相对应的定积分;如果您使用此技术生成正弦波的不定积分,您会发现结果与通过integrate()获得的结果一致。

以下是我用来集成阵列音频的命令:

 

因为我=1:2000
  > audio_integrated(i) = inttrap(audio(1:i));
  > 结束

 

现在我们将移除 DC 偏移(如果波形有一个)并将值缩放到大约 –1 到 +1 的范围内。

 

audio_integrated = audio_integrated - 意思是(audio_integrated);
audio_integrated = audio_integrated ./ max(audio_integrated);
情节(n,audio_integrated)

改变采样率

在执行调制之前,我们还需要做一件事。在上一篇文章中,我们通过在载波频率上生成正弦波并将集成基带信号作为附加相位项包括在内来创建 FM 信号。不过,一个重要的细节是我们使用的基带采样频率对于载频信号来说足够高。我在本文中使用的 WAV 文件的采样频率为 44.1 kHz,这意味着我们不能将基带采样频率用于调制过程——采样频率必须至少是调制信号中频率的两倍,对于一个现实的系统,您可能希望采样频率至少是载波频率的五倍。

那么下一步就是提高集成基带信号的采样率。我们可以使用intdec()命令来做到这一点。例如,假设载波频率为 800 kHz,我们决定使用 4.41 MHz 采样频率。这意味着我们将按如下方式修改audio_integrated数组:

 

SampleRate_IncreaseFactor = 4.41e6 / 44.1e3;
audio_integrated_upsampled = intdec(audio_integrated, SampleRate_IncreaseFactor);

 

以下两个图传达了采样率修改的结果。

 

波形看起来相同,横轴显示上采样信号的数据点是原始信号的 100 倍。

 

上一篇:如何使用去耦电容放置来减少谐波失真
下一篇:如何测量LDO噪声

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

相关技术资料