Сохранение данных в формате (.wav) с устройства RTL-SDR с помощью C#
Я могу подключиться к RTL-SDR, используя librtlsdr.dll и libusb-1.0.dll, используя (https://github.com/nandortoth/rtlsdr-manager) оболочку в С # .netcore3.0 .
Начат получение выборки данных с устройства по заданной частоте устройства. я получаю данные в списке IQ .
Мне нужно сохранить эти данные в файле.wav. Это очень просто с функцией chrome.usb.bulktransfer. эта функция предоставляет int8array,int32array,uint8array, которые могут напрямую писать в файл.wav.
Я понятия не имею, как это можно сделать, используя С # из массива IQ
любые предложения или образцы кода будут оценены.
1 ответ
Чтобы сохранить данные IQ в файл.wav, вы можете записать компонент I в один канал, а компонент Q - в другой канал ( ссылка).
"Синфазная" (действительная) обычно помещается в левый канал, а "квадратурная" (воображаемая) часть - в правый канал.
Для этого вы можете использовать NAudio. Во-первых, вам нужно
BinaryWriter
конвертировать
int
массив (данные IQ) в
Stream
(byte
массив). Затем вы можете использовать
MultiplexingWaveProvider
для создания файла.wav с 2 каналами.
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();