如何在我的声卡上输出方波

时间:2010-11-15 16:48:57

标签: math gnuplot electronics

我想在声卡上创建一个数字(方形)信号。如果我产生高频率,它的效果很好。但是,由于我无法在声卡上输出DC,因此对于较低的频率,所产生的数字位将全部慢慢淡入0。

这就是声卡高通对我的方波所做的: http://www.electronics-tutorials.ws/filter/fil39.gif

信号的数学函数是什么,当通过高通时会变成方形?

理想情况下,解决方案在gnuplot中进行了演示。

5 个答案:

答案 0 :(得分:1)

声卡会切断波形中的低频,因此您需要将这些频率提高到传递给它的位置。

方波包含许多频率(见the section on the Fourier series here)。我怀疑生成校正方波的最简单方法是求和傅里叶级数,提高低频分量的幅度,以补偿声卡中的高通滤波器。

为了计算每个低频分量的增加量,首先需要通过输出各种频率但幅度恒定的正弦波来测量声卡中高通滤波器的响应,并测量每个频率。频率输出幅度与输入幅度的比率r(f)。然后,通过将方波傅立叶级数中每个频率分量f的幅度乘以1/r(f)(“逆滤波器”),可以生成方波输出的近似值。

声卡中的高通滤波器也可能调整信号的相位。在这种情况下,可能最好将高通建模为RC filter(这可能是声卡进行滤波的方式),并从中反转幅度和相位响应。

答案 1 :(得分:1)

之前的一些答案已经正确地指出,高通滤波器(声卡输出上的交流耦合电容)正在阻止低频方波“保持”,因此它们会迅速衰减。

没有办法从软件中完全击败这个过滤器,或者它不存在,现在会吗?如果您可以使用较低频率的较低振幅方波,则可以通过发送类似triangle wave的内容来近似它们。从瞬态分析的角度来看,这里的操作理论是,当耦合电容放电(阻断直流)时,你会增加其偏置电压以抵消放电,从而维持方波的平稳状态一段时间。当然你最终会耗尽PCM余量(你不能无限期地增加电压),所以24位卡在这方面比16位更好,因为它会给你更多的分辨率。考虑到这一点的另一种更抽象的方法是RC滤波器用作differentiator,因此为了获得方波的平坦峰值,您需要在输入处给出三角波的平坦斜率。 。但这是一种理想化的行为。

作为概念的快速证明,这是在1Kohm负载下通过1uF耦合帽时60Hz±1V三角形信号的变化;它近似于±200mV的方波enter image description here

注意负载的阻抗/电阻非常重要;如果将其降低到100欧姆,则输出幅度会急剧下降。这就是耦合帽如何阻止扬声器/耳机上的DC,因为这些设备的阻抗远低于1Kohm。

如果我能在今天晚些时候找到更多的时间,我会添加一个更好的模拟,更好的形状刺激而不是简单的三角波,但我无法从基于网络的平均电路模拟器软件中获得...

好吧,如果你很幸运,你可以买到0.99美元的USB声卡中的一张,制造商已经偷工减料,以至于他们没有安装耦合帽。 https://www.youtube.com/watch?v=4GNRzwfP7RE

答案 2 :(得分:0)

不幸的是,你无法得到方波的良好近似值。声音硬件有意限压摆率,无法产生超出预期频率范围的下降沿或上升沿。

您可以通过每N个样本交替使用高和低PCM代码(+ max,-max)来近似严重变形的方波。

答案 3 :(得分:0)

你实际上无法产生真正的方波,因为它具有无限的带宽。你可以产生一个合理的方波近似值,例如在10 Hz和1 kHz之间的频率(低于10 Hz,你可能会遇到声卡的模拟部分等问题,而在1 kHz以上,近似值会变得越来越不准确,因为你只能重现相对较少的谐波)。

Tp生成波形,样本值将在+/-某个值之间交替,例如满量程,对于16位PCM流,它将是-32767和+32767。频率将由这些样本的周期确定。例如。对于44.1 kHz采样率,如果您说100个样本为-32767,然后100个样本为+32767,即周期= 200个样本,那么方波的基频将为44.1 kHz / 200 = 220 Hz。

答案 4 :(得分:-1)

我找到了一个基于它构建的应用程序。

http://www.blogger.com/blogger.g?blogID=999906212197085612#editor/target=post;postID=7722571737880350755

您可以生成所需的格式,甚至是您需要的模式。

代码使用SLIMDX