【问题标题】:Store data in ( .wav) format from RTL-SDR device using c#使用 c# 从 RTL-SDR 设备以 (.wav) 格式存储数据
【发布时间】:2021-01-18 21:14:25
【问题描述】:

我可以使用 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# 来完成

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

【问题讨论】:

    标签: c# .net rtl-sdr iq


    【解决方案1】:

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

    “同相”(实数)通常放在左声道,“正交”(图像)部分放在右声道。

    您可以使用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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-21
      • 2021-04-19
      • 2021-08-07
      • 2018-10-23
      • 2019-07-31
      • 2016-10-10
      • 1970-01-01
      • 2013-08-03
      相关资源
      最近更新 更多