寻找在C中读取音频的基础知识

时间:2013-04-03 03:10:31

标签: c signal-processing

我不想使用库 - 我想从头开始编写。我想玩通过无线电传输WEFAX的解码器。不同的音频转换为不同的像素暗度。只有灰度 - 没有颜色。

每分钟有120行,每行超过1000像素。我想检测频率并将其转换为8位值。等效的硬件类似于LM567频率到电压转换器。

我不知道从哪里开始。这是FIR还是IIR?任何人都可以指出我可以学习的代码吗?我不是为Windows编写的,严格来说是unix。

艾伦

2 个答案:

答案 0 :(得分:1)

你可以用定时器和零交叉来找出基频

http://en.wikipedia.org/wiki/Zero_crossing

答案 1 :(得分:0)

假设您拥有IQ数据,您可以从使用相位微分器实现的简单FM解调器开始。频率是相位的导数,因此您可以简单地计算从样本到样本的相位差,以获得原始FM信号的估计值。单个输出样本可以通过以下方式给出:

y[k] = arctan(imag(x[k]) / real(x[k])) - arctan(imag(x[k-1]) / real(x[k-1]))

您还可能需要执行一些相位展开以避免输出跳过2*pi的倍数。有关更多详细信息,请参阅瞬时频率部分here

FM demod的输出应该基本上是你的图像,因为它会产生一个信号,其幅度与原始信号频率变化的方式不同。您必须将其重新采样到正确的像素网格,并正确地缩放/量化灰度级。

它可以提高图像质量,对FM解调器的输出进行低通滤波,以降低噪声。