软件定义无线电 panadapter

信息处理 fft 正交 特别提款权
2022-02-12 07:23:36

我正在尝试为软件定义的无线电制作一个 panadapter,但我有点卡住了,希望有人能帮助我。

我的收音机有 IQ 信号。(实际上我使用的是来自互联网的 IQ wav 文件,记录在 44800 2 通道 16 位)。

如果我使用 HDSDR,频谱如下所示: 在此处输入图像描述

我的应用程序的显示如下所示: 在此处输入图像描述

我做错了什么,我不知道到底是什么(我是新手,我不太确定我是否完全理解背后的概念......)我会尝试描述我在做什么,希望你能帮助我解决它

  1. 我打开文件并开始在字节缓冲区中读取它(一次 1024 个字节)
  2. 我将每 2 个字节转换为短裤 (ByteOrder.LITTLE_ENDIAN)
  3. 我将 HanningWindow 应用于缓冲区
  4. 我将缓冲区拆分为 2 个缓冲区,每个缓冲区用于一个通道( %2==0 作为 left 和 %2==1 right )
  5. 我创建了复数数组,将 left[i] 作为实部,将 right[i] 作为 imag 部分
  6. 我对复数数组进行 FFT(大小为 512 的波数表)
  7. 我进行 FFT 移位(从 [1,2,..,n/2,n/2+1,..,n-1,n] 到 [n,n-1,..,n/2+1 ,1,2,..,n/2] )
  8. 我绘制结果

我是否需要以某种方式处理 IQ 信号(解调它?)

我以错误的方式读取文件?(我知道文件以标题和所有内容开头,但之后数据部分开始)

如何进行音调/幅度校正以消除声卡记录的不理想 IQ 中存在的不需要的图像?

谢谢你,波格丹

2个回答

有很多事情可能会出错;您没有提供足够的信息来明确诊断您的问题。(您获得的 wav 文件的链接会很有用,因此我们可以自己尝试一下。)以下是一些观察结果:

  • 假设该文件是未压缩的 16 位 little-endian 样本,并且忽略了标头的存在。这可能是错误的,可能是因为格式不是您想的那样,或者标头不是 4 字节长的倍数。相反,请使用Audacity之类的音频编辑程序来读取文件,然后将其作为原始文件再次写出,您已在其中指定了参数。那,或者在你的程序中使用一个 WAV 阅读库。

  • 你的长度不匹配。如果您读取 1024 个字节,那么您有 512 个短路,或 256 个复杂短路 - 但您说您的 FFT 大小是 512,而不是 256。您的程序不是您说的那样,或者它可能正在读取未初始化的内存。

  • 您的输出似乎有四个几乎是光谱的副本。如果您误读了输入,导致 I 和 Q 分量未正确对齐,则两个镜像副本是可以解释的——如果 I 或 Q 之一为零、恒定或与输入未正确对齐,则可以预期对称谱。

    另一个副本可能是由于您的 FFT 移位代码或图形代码中的错误,或者因为您试图分别显示复杂 FFT 输出的两个分量而不是获取幅度。

  • 我建议调整颜色阴影的缩放比例,使其更类似于 HDSDR 输出,并增加 FFT 大小(bin 计数)。(您可能还需要获取幅度的对数。)这将使结果看起来更像 HDSDR,这将帮助您匹配部分频谱。

我是否需要以某种方式处理 IQ 信号(解调它?)

不可以。可以在FFT之后完成用于优化 panadapter 显示的各种处理。之前唯一要做的事情就是像 IQ 不平衡校正这样的事情,这对于被解调并作为音频(或任何类型的信息)播放的信号和进入 panadapter 的信号一样适用。

尝试对颜色字节使用补码运算符。例如,许多软件使用#define 来表示颜色:

#define MAGENTA           0xF81F

尝试在数值前添加完整的运算符:

 #define MAGENTA           ~0xF81F

注意数字前的波浪号。