scipy 我如何验证一个完美正弦波?

dced5bon  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(229)

背景我正在尝试验证通过RTP接收的音频数据与原始源相比的准确性。在我的系统中,音频由嵌入式平台设备播放,并通过网络发送给其他设备进行捕获和播放。其规格因单声道、立体声或环绕声音频而异,但采样率和位规格如下所示。

我现在使用的.wav文件包含正弦波规格,44.1千赫,440频率,1通道,16位PCM数据。我使用正弦波,所以它是干净的,易于分析。
使用下面的Python代码,我可以验证两个文件是否相同,因为它给出的alignment.distance是0.0

import librosa
import librosa.display
import matplotlib.pyplot as plt
from numpy.linalg import norm
from dtw import dtw

# Loading audio files

y1, sr1 = librosa.load("./test-audio-files/1kHz_44100Hz_16bit_05sec.wav")
y2, sr2 = librosa.load("./test-audio-files/received.wav")

# Computing MFCC values

mfcc1 = librosa.feature.mfcc(y1, sr1)
mfcc2 = librosa.feature.mfcc(y2, sr2)

alignment = dtw(mfcc1.T, mfcc2.T)
print("The normalized distance between the two : ", alignment.distance)  # 0 for similar audios

Query我想知道的是,如何验证正弦波的准确性?上述解决方案将工作,只要我确保我的源文件是完美的和准确的。如果源文件有任何问题,那么上述解决方案也会声称他们匹配。我现在玩的.wav文件,但它可以是任何文件,如mp3,mp4...

以下是我尝试检测的数据包丢失:

参考已从https://www.mediacollege.com/downloads/下载.wav文件

ttvkxqim

ttvkxqim1#

如果您知道测试正弦波的频率,您可以通过数学方法生成一个完美的正弦波,对齐峰值,并比较偏移和振幅。如果您不知道测试的信号类型,但仍然想测试它是否是正弦波,您可以尝试使用回归法拟合正弦波。注意:较高的频率可能表现为(混淆)分组丢失,但实际上可能是源采样限制,即:以44 KHz采样的70 KHz信号。

6jjcrrmo

6jjcrrmo2#

如果你想确保原始正弦波是准确的,一种方法是直接在python上生成正弦波,然后使用scipy的scipy.io.wavfile.write生成.wav文件。

from scipy.io.wavfile import write

samplerate = 44100; fs = 100
t = np.linspace(0., 1., samplerate)
amplitude = np.iinfo(np.int16).max
data = amplitude * np.sin(2. * np.pi * fs * t)
write("example.wav", samplerate, data.astype(np.int16))

相关问题