C# 使用c语言以(.wav)格式存储RTL-SDR设备中的数据
我能够使用librtlsdr.dll和libusb-1.0.dll通过c.netcore3.0中的包装器连接RTL-SDR 已开始通过设置设备频率从设备获取采样数据。我正在智商列表中获取数据 我需要将此数据存储在.wav文件中。使用chrome.usb.bulktransfer函数非常简单。此函数提供可直接写入.wav文件的int8array、int32array、uint8array 我不知道如何使用IQ数组中的c来实现C# 使用c语言以(.wav)格式存储RTL-SDR设备中的数据,c#,.net,rtl-sdr,iq,C#,.net,Rtl Sdr,Iq,我能够使用librtlsdr.dll和libusb-1.0.dll通过c.netcore3.0中的包装器连接RTL-SDR 已开始通过设置设备频率从设备获取采样数据。我正在智商列表中获取数据 我需要将此数据存储在.wav文件中。使用chrome.usb.bulktransfer函数非常简单。此函数提供可直接写入.wav文件的int8array、int32array、uint8array 我不知道如何使用IQ数组中的c来实现 任何建议或代码示例都将不胜感激。要将IQ数据保存到.wav文件,您可以将
任何建议或代码示例都将不胜感激。要将IQ数据保存到.wav文件,您可以将I组件写入一个通道,将Q组件写入另一个通道 同相实数通常置于左信道中,正交imag部分置于右信道中 你可以用它来实现这一点。首先,您需要BinaryWriter将int数组IQ数据转换为流字节数组。然后,您可以使用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();
要将IQ数据保存到.wav文件,可以将I组件写入一个通道,将Q组件写入另一个通道 同相实数通常置于左信道中,正交imag部分置于右信道中 你可以用它来实现这一点。首先,您需要BinaryWriter将int数组IQ数据转换为流字节数组。然后,您可以使用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();