- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试用 Java 编写一个小型离散傅立叶变换,以查找清晰的 400 Hz 正弦信号中的幅度谱(1 秒为 pcm 带符号短)
首先我计算复数值的 DFT:
public void berechneDFT(int abtastwerte) {
int i;
int N = abtastwerte;
ReX = new double[N/2+1];
ImX = new double[N/2+1];
TextFileOperator tfo = new TextFileOperator(file.substring(0, file.length()-4)+"_DFT.txt");
try {
tfo.openOutputStream();
tfo.writeString("ReX ImX\n");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// real-Anteil berechnen
for (i=0, ReX[i] = 0, ImX[i] = 0; i <= N/2; i++)
{
for(int n=0; n < N; n++)
{
ReX[i] += x[n] * Math.cos( (2.0 * Math.PI * n * i) / (double) N);
ImX[i] += - (x[n] * Math.sin( (2.0 * Math.PI * n * i) / (double) N));
}
tfo.writeString(ReX[i] +" "+ImX[i]+"\n");
}
x = null;
tfo.closeOutputStream(); // flush
System.out.println("Anteile berechnet.");
}
然后我尝试计算幅度谱:
public void berechneBetragsSpektrum() {
int N = ReX.length;
TextFileOperator tfo = new TextFileOperator("betragsspektrum_400hz.txt");
try {
tfo.openOutputStream();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
double powerAtFreq;
int marker = 0;
double maxPowerAtFreq = 0;
for(int i=0; i < N; i++)
{
double A1 = ReX[i] * ReX[i];
double A2 = ImX[i] * ImX[i];
powerAtFreq = Math.sqrt(A1+A2);
if(powerAtFreq > maxPowerAtFreq)
{
maxPowerAtFreq = powerAtFreq;
marker = i;
}
tfo.writeString(powerAtFreq+"\n");
}
tfo.closeOutputStream();
System.out.println("Stärkste Frequenz: "+(marker)+" Hz");
}
但由于某种原因,如果我选择检查所有 16000 个样本,我只能在“标记”中得到 400 Hz 的结果。但是,如果我只选择 800 个样本,我难道不应该看到 400 Hz 处的峰值吗?因为使用 800 个样本,我可以看到 800/2 = 400 Hz 作为最大频率?
我猜代码一定有一些小问题,因为如果我选择 800 个样本,我会得到 20 Hz,对于 1600 个样本,我会得到 40 Hz,这始终是 1/40 * 采样率。
我到底错过了什么或做错了什么?结果很奇怪..
请注意,如果我使用复数值进行逆 DFT,我可以再次重建音频信号!
最佳答案
问题的答案是,如果您计算傅里叶变换、幅度谱等,则索引会显示相对频率,需要将其计算为正确值。
关于java - DFT 中的幅度谱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16056138/
我正在尝试找到一个 C 代码程序,它可以让我计算方阵的特征值(谱)分解。我特别试图找到最高特征值(及其关联的特征值)位于第一列的代码。 我需要按此顺序输出的原因是因为我正在尝试计算特征向量中心性,因此
我正在尝试找到一个 C 代码程序,它允许我计算方阵的特征值(谱)分解。我专门尝试查找最高特征值(及其相关特征值)位于第一列的代码。 我需要按此顺序输出的原因是因为我正在尝试计算特征向量中心性,因此我只
关于从哪里开始使用 d3 制作 fiddle 图表有什么想法吗?它已经存在了吗? 我环顾四周,想出了如何使用 ggplot2 来完成此操作,并希望有一个现成的示例可供我学习,但尚未找到。 我想我可以做
我在 Glue 数据目录中定义了一个表,我可以使用 Athena 进行查询。由于表中有一些数据我想与其他 Redshift 表一起使用,我可以访问 Glue 数据目录中定义的表吗? 什么是创建外部表查
我想对一些内容进行 md5 散列,然后生成 n 个点的“曲线”或“频谱”。也就是说,要绘制从 0 到 1 的直线上的 5、10 或 20 个点,以某种方式分布,使其对于 md5 哈希是唯一的(碰撞无关
我是一名优秀的程序员,十分优秀!