Сохранение данных в формате (.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();
Другие вопросы по тегам