gpt4 book ai didi

java - 减少在 Java 中生成纯音的谐波

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:30:18 25 4
gpt4 key购买 nike

我正在尝试用 Java 开发一个静态方法来生成纯音。

一开始看起来很容易,但是当我尝试将双阵列写入扬声器时,我发现谐波太多了。

我用频谱分析仪(声波计)对其进行了测试,然后,我还在图形中绘制了阵列结果。完成后我发现了问题:

关于波形,是突变的。我想平滑这个数组,但我不知道该怎么做。

这是代码:

/**
* Genera un tono puro.
* @param bufferSize Tamaño del buffer.
* @param fs Frecuencia de muestreo.
* @param f0 Frecuencia central.
* @return El tono puro.
*/
public static double[] generateTone(int bufferSize, int fs, int f0) {
double[] tone = new double[bufferSize]; // Tono
double angle; // Ángulo del tono

// Sólo hace falta recorrer la mitad del array, ya que hay simetría:
for (int i = 0; i < tone.length / 2; i++) {
angle = 2 * Math.PI * f0 * i / fs; // Calculamos la variación del ángulo

// Tenemos que conseguir que la señal sea menos abrupta para reducir al máximo los armónicos):
tone[2 * i + 1] = tone[2 * i] = Math.sin(angle); // Aprovechamos la simetría
}

return tone;
} // getSinus()

最佳答案

将相同的值写入两个连续的位置会在波形中引入一个阶跃。与平滑正弦曲线的任何偏差都会增加谐波。如果您想要纯音,请不要那样做。如果您想这样做,不要指望纯音。

关于java - 减少在 Java 中生成纯音的谐波,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21343504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com