首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用c#从RTL-SDR设备以( .wav)格式存储数据

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

Stack Overflow用户
提问于 2020-10-03 20:33:49
回答 1查看 352关注 0票数 1

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

已开始通过设置设备频率从设备获取sampledata。我正在获取智商列表中的数据。

我需要用chrome.usb.bulktransfer函数将这些数据存储在.wav文件.its中,非常容易。此函数提供int8array、int32array、uint8array等可直接写入.wav文件的格式。

我不知道如何使用IQ数组中的c#来完成此操作

任何建议或代码样本将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2020-10-18 14:31:09

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

通常将“同相”(实数)置于左声道中,而将“正交”(imag)部分置于右声道中。

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

代码语言:javascript
复制
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();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64184325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档