噪声 AFSK 信号的解调

信息处理 解调 fsk
2022-02-09 18:26:27

我正在尝试使用 FSK 实现软件音频调制解调器,以在两个设备(例如 PC 和 iPhone)之间传输和接收短数字数据,因此我正在使用 Scilab/MATLAB 模拟简单的案例研究。

虽然我可以在没有噪音或背景声音的情况下重建原始信号,但在存在正常环境背景声音的情况下播放 afsk 时会出现问题:尝试重建从 PC 麦克风读取的数字数据非常困难。

为了生成 AFSK 信号,我使用下面这个简单的脚本,然后将 wav 文件保存到磁盘以供后续步骤使用。

function s = fsk (bit, f1, f2, fs, T)
% bit : Array of bit
% f1: Frequency 1
% f2: Frequency 2
% fs: Sampling frequency
% T : Tramsision period for 1 bit
    t=0:1/fs:T-1/fs;
    s=[];
    for i=1:length(x)
        s=[s (bit(i)==0)*sin(2*pi*t*f1)+(bit(i)==1)*sin(2*pi*t*f2)];
    end    
end
  • 我选择的频率可能会有所f1不同f23000 Hz4000 Hz或者3000 Hz5000 Hz.
  • 频率采样是44100 Hz传输周期为0.01 sec(目前我不关心更高的传输率)。
  • 位数组是一个非常简单的[0 1 0 1 0...]顺序。

当我读回 wav 文件时,我使用以下 3 步方案中的简单相干解调对其进行解码:

  1. 带 FIR 滤波器的信号通带5000 Hz使用命令创建fir1(91,[2*4900/fs 2*5100/fs])

  2. 将滤波后的信号乘以f2(标记)载波sin(2*pi*f2*t)(或将信号与自身的 1 个样本延迟版本相乘)

  3. 使用生成的 LP FIR 滤波器对步骤 2 中获得的相乘信号进行低通以隔离原始数字信号的低频分量fir1(61, 2*500/fs)

现在几乎完美地重建了原始的位序列。我已经玩了一些过滤器参数以获得良好的重建。

重构比特流

然后我决定在我的立体声音响上播放 wav 文件,背景噪音正常(实际上非​​常低),我用 pc 麦克风记录它并用 Audacity 保存,用 MATLAB/scilab 读回它,我试图重建原始位序列使用上面的 3 个步骤,但信号与我的预期有点不同,我看不到原始模式,我不知道我是否使用任何阈值重新构建位序列。

嘈杂的比特流

我想原因是 SNR 很棒,但我不知道我错在哪里,我不明白为什么结果与前一个案例如此不同。

在存在背景噪声的情况下如何重建正确的比特流序列?

更新: 在将调制信号发送到接收器之前,我是否必须对其进行低通滤波?

任何建议将不胜感激。


嗯……正如吉姆指出的那样,我的录音系统似乎有问题!我在同一台 PC 上使用扬声器和麦克风播放和录制声音,所以这引入了一些不受欢迎的反馈或过滤或其他我想的东西。现在我正在使用外部设备(智能手机)播放声音,并且录制的信号要好得多。这是传输的信号

你好世界 !

这是解码的信号

fsk 解码

在传输之前,我正在使用以标记和空间频率为中心的带通滤波器。解码步骤与之前相同,但在第 2 步中,我使用切片方法将信号与自身的延迟版本相关联。

重建的 FSK 信号现在具有比以前更好的 SNR。现在应该很容易恢复确切的位序列....

0个回答
没有发现任何回复~