1 个稳定版本

使用旧Rust 2015

1.0.0 2017年2月27日

#13 in #fm

MIT 许可证

6KB
54

demod_fm.rs -- FM信号解调器

文档

此crate提供了一种简单的FM信号解调器,用于软件无线电。

使用方法

可以通过Cargo将其作为依赖项添加到Cargo.toml

[dependencies]
demod_fm = "1.0.0"

并在crate根目录中导入它

extern crate demod_fm;

lib.rs:

此crate提供了一种简单的FM信号解调器,用于软件无线电。它使用以下描述的相位差近似进行解调。

理论

考虑经典方程[1]的FM信号

s(t) = a(t) cos(ωct + φ(t))

其中

φ(t) = ω∫x(τ)dτ

积分从0到t计算,x(t)是要恢复的调制信号。

对此进行微分得到

dφ(t) / dt = ωx(t)

因此

x(t) = ω-1 dφ(t) / dt

在连续时间中的微分通过离散时间中的有限差分近似,因此

x(t) ≈ ω-1 (φ[t] - φ[t-1]) / T

假设“标准化”周期T = 1,则变为

x(t) ≈ w-1 (φ[t] - φ[t-1])

这需要当前和前一次采样瞬间的相位变化,可以从相应的I/Q样本中计算得出。给定一个FM信号s(t),接收到的I/Q序列将包含以下组件

i(t) = a(t) cos φ(t)

q(t) = a(t) sin φ(t)

每个样本表示为

p(t) = i(t) + j q(t)

计算此式的复数幅角给出

arg(p(t)) = arctan[q(t) / i(t)] = arctan tan φ(t) = φ(t)

因此

arg(p(t)) - arg(p(t-1)) = φ(t) - φ(t-1)

应用复数恒等式 arg(uv) ≡ arg(u) + arg(v) (mod (-π, π])arg(u*) = -arg(u)

arg(p(t)p(t-1)*) = arg(p(t)) - arg(p(t-1)) = φ(t) - φ(t-1)

将所有这些结果结合起来,得到每个样本计算出的方程

x[t] = ω-1 arg(p[t]p[t - 1]*)

使用角频率偏移ω = 2π f和当前和前一个复数样本。

参考文献

  1. "使用数字无线电和数字信号处理进行FM解调",J.M. Shima,

依赖项

~240KB