C# FFT频谱中的小故障
我的FFT在某种程度上起作用。我对它进行了一些频率扫描测试,我可以清楚地看到峰值,但在整个频谱中我发现了一些奇怪的小故障和强噪声。信号忽上忽下,有时一些信号条消失了。我试着读懂这些值,有时会得到NaN。我做错了什么C# FFT频谱中的小故障,c#,unity3d,fft,naudio,C#,Unity3d,Fft,Naudio,我的FFT在某种程度上起作用。我对它进行了一些频率扫描测试,我可以清楚地看到峰值,但在整个频谱中我发现了一些奇怪的小故障和强噪声。信号忽上忽下,有时一些信号条消失了。我试着读懂这些值,有时会得到NaN。我做错了什么 void FFTLive() { int sampleCount = 8192; NAudio.Dsp.Complex[] complex = new NAudio.Dsp.Complex[sampleCount]; float[] dat = n
void FFTLive()
{
int sampleCount = 8192;
NAudio.Dsp.Complex[] complex = new NAudio.Dsp.Complex[sampleCount];
float[] dat = new float[sampleCount];
source.clip.GetData(dat, source.timeSamples);
for (int i = 0; i < sampleCount; i++)
{
complex[i].X = dat[i];
complex[i].Y = 0;
}
NAudio.Dsp.FastFourierTransform.FFT(false, (int)Mathf.Log(sampleCount, 2), complex);
for (int i = 0; i < sampleCount; i++)
{
float value = 10 * Mathf.Abs(Mathf.Log10((complex[i].X * complex[i].X + complex[i].Y * complex[i].Y)));
Debug.DrawLine(new Vector3(-10 + (float)(i / 20), -16 + value, 40), new Vector3(-9 + (float)(i / 20), -16 + value, 40), Color.green, 0.002f);
}
}
void FFTLive()
{
int-sampleCount=8192;
NAudio.Dsp.Complex[]Complex=新的NAudio.Dsp.Complex[sampleCount];
float[]dat=新的float[sampleCount];
source.clip.GetData(dat、source.timeSamples);
对于(int i=0;i
更新
我添加了窗口并检查了0,但它仍然有大量的噪音
for (int i = 0; i < sampleCount; i++)
{
complex[i].X = dat[i]*(float)NAudio.Dsp.FastFourierTransform.BlackmannHarrisWindow(i,sampleCount);
complex[i].Y = 0;
}
NAudio.Dsp.FastFourierTransform.FFT(false, (int)Mathf.Log(sampleCount, 2), complex);
for (int i = 0; i < sampleCount / 4; i++)
{
float value = 0;
if (complex[i].X + complex[i].Y != 0)
value = 10 * Mathf.Abs(Mathf.Log10(100 * (complex[i].X * complex[i].X + complex[i].Y * complex[i].Y)));
Debug.DrawLine(new Vector3(-10 + (float)(i / 20), -16, 40), new Vector3(-9 + (float)(i / 20), -16 + value, 40), Color.green, 0.0002f);
}
for(int i=0;i
更新2
解决了。我忘了采样数据是两个通道,所以我把这两个通道混在一起,导致了所有的故障。因此,我将数据数组一分为二,每秒钟只取一个条目,该条目应该来自一个通道。至少有两个问题
您不会检查最后一个Log10()的幅值输入是否为零。这将导致南斯
在FFT之前,您没有使用非矩形窗函数来消除加窗伪影(从FFT光圈结束和开始之间不连续的非整数周期波形中)。尝试使用Von Hann或Hamming窗口。因此,我添加了更新#1中的窗口,并检查值何时变为0,但仍然不起作用。看起来噪音很大,但我直接从音频文件中获取数据。我用相同的数据绘制波形,结果很好。