使用 C# 从 RTL-SDR 设备以 (.wav) 格式存储数据

use*_*910 1 .net c# iq rtl-sdr

我可以使用c# .netcore3.0 中的( https://github.com/nandortoth/rtlsdr-manager ) 包装器使用 librtlsdr.dll 和 libusb-1.0.dll 连接 RTL-SDR。

开始按设置的设备频率从设备获取样本数据。我正在获取 IQ 列表中的数据。

我需要将此数据存储在 .wav 文件中。使用 chrome.usb.bulktransfer 功能非常容易。该函数提供int8array、int32array、uint8array可直接写入.wav文件。

我不知道如何使用 IQ 数组中的 C# 来完成

任何建议或代码示例将不胜感激。

Han*_*hao 5

要将 IQ 数据保存到 .wav 文件,您可以将 I 分量写入一个通道,将 Q 分量写入另一通道(参考)。

“同相”(实数)部分通常放置在左通道中,“正交”(imag)部分放置在右通道中。

您可以使用NAudio来实现这一点。首先,您需要BinaryWriterint数组(IQ 数据)转换为Streambyte数组)。然后,您可以用来MultiplexingWaveProvider创建具有 2 个通道的 .wav 文件。

var iqDataList = device.GetSamplesFromAsyncBuffer(maxCount);

var iStream = new MemoryStream();
var qStream = new MemoryStream();

var iWriter = new BinaryWriter(iStream);
var qWriter = new BinaryWriter(qStream);

foreach (var iqData in iqDataList)
{
    iWriter.Write(iqData.I);
    qWriter.Write(iqData.Q);
}

var iComponent = new RawSourceWaveStream(iStream, new WaveFormat(rate, bits, 1));
var qComponent = new RawSourceWaveStream(qStream, new WaveFormat(rate, bits, 1));

var waveProvider = new MultiplexingWaveProvider(new IWaveProvider[] {iComponent, qComponent}, 2);

WaveFileWriter.CreateWaveFile(filename, waveProvider);

iComponent.Dispose();
qComponent.Dispose();

iWriter.Dispose();
qWriter.Dispose();
Run Code Online (Sandbox Code Playgroud)