Документация Engee

Список функций

Общие функции

Вычисляет среднюю мощность входного сигнала σ = 1 / N Σ | x[n] | ^2

--- Синтаксис

σ = avgPower(x);

--- Входные параметры

  • x : входной сигнал [Array{Any}]

--- Выходные параметры

  • σ : расчетная мощность [Float64]

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Возвращает отношение сигнал/помеха, выраженное в дБ (или в линейных величинах) между сигналом наблюдения и d(n) и эталонным сигналом u(n). Коэффициент выражается как 10*log10( E[ || d(n) - u(n) || / E[||u(n)||^2] ) при этом E — ожидание по отношению ко времени. Векторы d и u должны иметь одинаковый размер L.

--- Синтаксис

sir = getSIR( d, u , type="dB")

--- Входные параметры

  • d : сигнал наблюдения [Array{Any}]

  • u : эталонный сигнал [Array{Any}]

  • type: выходная единица [String]: «дБ» или «линейная» (значение по умолчанию «дБ»)

--- Выходные параметры

  • sir : отношение сигнал/помеха в единицах type

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Возвращает функцию Q, используемую для вычисления коэффициента битовых ошибок в цифровой системе. Q(x)= 1/2 erfc(x/sqrt(2)) erfc — это комплексная функция ошибок, т. е. точная версия 1-erf(x) для больших x. erfc наследуется от DSP.

--- Синтаксис

y = qfunc(x)

--- Входные параметры

  • x: вход [Float64]

--- Выходные параметры

  • y: Q(x)[Float64]

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Абстрактный тип, собирающий все конфигурации форм волн

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Квадратурная амплитудная модуляция

Создает двоичную последовательность и возвращает буфер с битами в количестве nbBits. Массив имеет тип UInt8 с x00 или x01. Если указано, randSeed управляет начальным значением генератора случайных чисел.

--- Синтаксис

  genBitsequence(nbBits,randSeed=-1);

--- Входные параметры

  • nbBits : количество генерируемых битов [Int]

  • randSeed : начальное значение произвольного процесса (значение по умолчанию — больше -1) [Int]

--- Выходные параметры

  • buffer : заполненный буфер [Array{UInt8}]

Создает двоичную последовательность и заполняет входной буфер битами. Массив имеет тип UInt8 с x00 или x01. Если указано, randSeed управляет начальным значением генератора случайных чисел.

--- Синтаксис

  genBitsequence!(buffer,nbBits,randSeed=-1);

--- Входные параметры

  • buffer : заполняемый буфер [Array{UInt8,nbBits}]

  • nbBits : количество генерируемых битов [Int]

  • randSeed : начальное значение произвольного процесса (значение по умолчанию — больше -1, начальное значение не используется)

--- Выходные параметры

  • buffer : заполненный буфер [Array{UInt8}]

Создает последовательность байтов и заполняет входной буфер байтами в количестве nbytes. Массив

--- Синтаксис

  genByteSequence(nbBytes,randSeed=-1);

--- Входные параметры

  • nbBytes : количество генерируемых байтов [Int]

  • randSeed : начальное значение произвольного процесса (значение по умолчанию — больше -1)

--- Выходные параметры

  • buffer : заполненный буфер [Array{UInt8}]

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Создает последовательность байтов и заполняет входной буфер байтами в количестве nbytes Массив имеет тип UInt8 с x00 до xff. Если указано, randSeed управляет начальным значением генератора случайных чисел.

--- Синтаксис

  genByteSequence!(buffer,nbBytes,randSeed=-1);

--- Входные параметры

  • buffer : заполняемый буфер [Array{UInt8,nbByte}]

  • randSeed : начальное значение произвольного процесса (значение по умолчанию — больше -1)

--- Выходные параметры

  • buffer : заполненный буфер [Array{UInt8}]

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Функция квадратурной амплитудной модуляции (QAM) Применяет упаковку символов к входной двоичной последовательности символов (размером 1xN) с размером созвездия M. Output is a vector (1xN) with N = L / log2(M) Conventional gray mapping is used. Output constellation is casted in float, with unitary average power Поддерживаемое созвездие

  • QPSK

  • 16-QAM

  • 64-QAM

  • 256-QAM

--- Синтаксис

bitMappingQAM!(qamMat,M,bitSeq)

--- Входные параметры

  • qamMat : комплексный вектор для заполнения размером length(bitSeq) / log2(M) [Array{Complex{Float64}}]

  • M : размер модуляции (т. е. от 4 до 256), например бит на символ равен log2(M) [Int]

  • bitSeq : двоичная последовательность, преобразуемая в символы QPSK [Array{UInt8}]

--- Выходные параметры

  • []

Функция квадратурной амплитудной модуляции (QAM) Применяет упаковку символов к входной двоичной последовательности символов (размером 1xN) с размером созвездия M. Output is a vector (1xN) with N = L / log2(M) Conventional gray mapping is used. Output constellation is casted in float, with unitary average power Поддерживаемое созвездие

  • QPSK

  • 16-QAM

  • 64-QAM

  • 256-QAM

--- Синтаксис

qamMat = bitMappingQAM(M,bitSeq)

--- Входные параметры

  • M : размер модуляции (т. е. от 4 до 256), например бит на символ равен log2(M) [Int]

  • bitSeq : двоичная последовательность, преобразуемая в символы QPSK [Array{UInt8}]

--- Выходные параметры

  • qamMat : комплексный вектор для заполнения размером length(bitSeq) / log2(M) [Array{Complex{Float64}}]

Функция жесткого декодирования квадратурной амплитудной модуляции (QAM) Применяет жесткую распаковку символов к входной последовательности символов (размером 1xN) с размером созвездия M. Выходом является двоичный файл (1xL) с N = L / log2(M). Используется традиционная распаковка Грея. Входным созвездием является Array{Complex{Float64}} Выходным потоком битов является Array{Int8}

--- Синтаксис

  bitDemappingQAM!(hardBits,M,qamVect)

--- Входные параметры

  • hardBits : вектор битов для заполнения [Array{UInt8}, length(qamVect)/log2(M)]

  • M : размер созвездия (например, от 4 до 256)

  • qamVect : комплексный вектор наблюдения для декодирования.

--- Выходные параметры

  • []

Функция жесткого декодирования квадратурной амплитудной модуляции (QAM) Применяет жесткую распаковку символов к входной последовательности символов (размером 1xN) с размером созвездия M. Выходом является двоичный файл (1xL) с N = L / log2(M). Используется традиционная распаковка Грея. Входным созвездием является Array{Complex{Float64}} Выходным потоком битов является Array{Int8}

--- Синтаксис

hardBits = bitDemappingQAM!(hardBits,M,qamVect)

--- Входные параметры

  • M : размер созвездия (например, от 4 до 256)

  • qamVect : комплексный вектор наблюдения для декодирования.

--- Выходные параметры

  • hardBits : вектор битов для заполнения [Array{UInt8}, length(qamVect)/log2(M)]

Функция жесткого декодирования квадратурной амплитудной модуляции (QAM) Возвращает жестко декодированное созвездие с решением на базе Вороного. Разница с bitDeMapping в том, что bitDeMapping возвращает декодированную последовательность битов, а hardConstellation — ближайшую точку созвездия. Это можно использовать для вычисления приближенной оценки EVM (при условии достаточно высокой величины отношения SNR, чтобы избежать ошибок).

--- Синтаксис

hardConstellation!(qamDec,M,qamMat)

--- Входные параметры

  • qamDec : вектор для заполнения [Array{Complex{Float64},N}] с N = length(qamMat)

  • M : размер созвездия (например, от 4 до 256)

  • qamMat : вектор для декодирования

--- Выходные параметры

  • []

Функция жесткого декодирования квадратурной амплитудной модуляции (QAM) Возвращает жестко декодированное созвездие с решением на базе Вороного. Разница с bitDeMapping в том, что bitDeMapping возвращает декодированную последовательность битов, а hardConstellation — ближайшую точку созвездия. Это можно использовать для вычисления приближенной оценки EVM (при условии достаточно высокой величины отношения SNR, чтобы избежать ошибок).

--- Синтаксис

qamDec = hardConstellation!(qamDec,M,qamMat)

--- Входные параметры

  • M : размер созвездия (например, от 4 до 256)

  • qamMat : вектор для декодирования

--- Выходные параметры

  • qamDec : вектор для заполнения [Array{Complex{Float64},N}] с N = length(qamMat)

Возвращает окончательное значение LLR на основе входных расстояний

--- Синтаксис

llr = calcLLR(e0,e1,c)

--- Входные параметры

  • e0: минимальное расстояние 1

  • e1: минимальное расстояние 2

  • c : оценка канала

--- Выходные параметры

  • llr: оценка по максимуму правдоподобия

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Возвращает жесткое двоичное значение из мягкой оценки LLR (без декодера FEC, только жесткое решение).

--- Синтаксис

llrToHardBits(hardD,llr)

--- Входные параметры

  • hardD : жесткое двоичное решение [Array{UInt},N]

  • llr : входной LLR (массив Float64 или UInt8) [Union{[Array{UInt}],[Array{Float64}]}]

--- Выходные параметры

  • []

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Возвращает жесткое двоичное значение из мягкой оценки LLR (без декодера FEC, только жесткое решение).

--- Синтаксис

llrToHardBits(hardD,llr)

--- Входные параметры

  • hardD : жесткое двоичное решение [Array{UInt},N]

  • llr : входной LLR (массив Float64 или UInt8) [Union{[Array{UInt}],[Array{Float64}]}]

--- Выходные параметры

  • []

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Возвращает жесткое двоичное значение из мягкой оценки LLR (без декодера FEC, только жесткое решение).

--- Синтаксис

hardD = llrToHardBits(llr)

--- Входные параметры

  • llr : входной LLR (массив Float64 или UInt8) [Union{[Array{UInt}],[Array{Float64}]}]

--- Выходные параметры

  • hardD : жесткое двоичное решение [Array{UInt},N]

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Возвращает жесткое двоичное значение из мягкой оценки LLR (без декодера FEC, только жесткое решение).

--- Синтаксис

hardD = llrToHardBits(llr)

--- Входные параметры

  • llr : входной LLR (массив Float64 или UInt8) [Union{[Array{UInt}],[Array{Float64}]}]

--- Выходные параметры

  • hardD : жесткое двоичное решение [Array{UInt},N]

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Преобразует массив значений с плавающей запятой LLR в LLR UInt. Некоторые методы (особенно C-функции, как в libfec) ожидают, что LLR будет UInt-значением от 0 (скорее всего, 0) до 255 (скорее всего, 1). symbolDemappingQAM создает массив Float64 от -infty (скорее всего, 0) до infty (скорее всего, 1). Эта функция принимает оценку LLR Float64 и выводит вектор UInt8.

--- Синтаксис

llrToUInt!(llrUInt,llr)

--- Входные параметры

  • llrUInt: выходной LLR в UInt [Array{UInt},N]

  • llr : входной LLR [Array{Float64},N]

--- Выходные параметры

  • []

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Преобразует массив значений с плавающей запятой LLR в LLR UInt. Некоторые методы (особенно C-функции, как в libfec) ожидают, что LLR будет UInt-значением от 0 (скорее всего, 0) до 255 (скорее всего, 1). symbolDemappingQAM создает массив Float64 от -infty до infty. Эта функция принимает оценку LLR Float64 и выводит вектор UInt8.

--- Синтаксис

llrUInt = llrToUInt(llr)

--- Входные параметры

  • llr : входной LLR [Array{Float64},N]

--- Выходные параметры

  • llrUInt: выходной LLR в UInt [Array{UInt},N]

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

--- Описание

Возвращает отношение логарифмического правдоподобия входящей последовательности qamSeq на основе оценок каналов channelIn. qamSeq — это входная последовательность QAM с помехами с тем же размером вектора оценки канала. Выходные данные заполняются двоичной последовательностью мягкого вывода, которая будет передана FEC.

--- Синтаксис

output = :symbolDemappingQAM(mcs,qamSeq,channel)

--- Входные параметры

  • output: мягкие биты [Array{UInt8},N*log2(mcs)]

  • mcs : размер созвездия (например, от 4 до 256) [Int]

  • qamSeq: комплексная принятая последовательность с помехами (после выравнивания) [Array{Float64},N]

  • channel: комплексная оценка канала [Array{Float64},N]

--- Выходные параметры

  • []

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

--- Описание

Возвращает отношение логарифмического правдоподобия входящей последовательности qamSeq на основе оценок каналов channelIn. Рассматривается максимальное логарифмическое приближение. qamSeq — это входная последовательность QAM с помехами с тем же размером вектора оценки канала. Выходными данными является вектор двоичной последовательности мягкого вывода, которая будет передана FEC.

--- Синтаксис

output = symbolDemappingQAM(mcs,qamSeq,channel)

--- Входные параметры

  • mcs : размер созвездия (например, от 4 до 256) [Int]

  • qamSeq: комплексная принятая последовательность с помехами (после выравнивания) [Array{Float64},N]

  • channel: комплексная оценка канала [Array{Float64},N]

--- Выходные параметры

  • output: мягкие биты [Array{UInt8},N*log2(mcs)]

Каналы

Добавляет к входному сигналу белый аддитивный круговой гауссовский шум. Добавленный шум является вещественным, если входной сигнал является вещественным, и вычисленным, если входной сигнал является комплексным. Уровень шума регулируется вторым входным параметром, который представляет собой отношение сигнал/шум (SNR). Мощность сигнала powSig вычисляется на основе мощности входной последовательности (средняя мощность во временной области), хотя задается и третий параметр (теоретическая мощность входного сигнала). В этом случае отношение SNR вычисляется на основе значения powSig выходными параметрами являются сигнал с шумом и выборки шума Сведения о небуферизованном выделении см. в описаниях версий методов, помеченных символом «!». [y,n] = addNoise(x,snr,powSig); addNoise!(y,x,powSig) # Заполнение y из x addNoise!(x,powSig) # Замена x

--- Входные параметры

  • x= входной сигнал [Array{Real{Float64}}, Array{Complex{Float64}}] размером N

  • snr= желаемое соотношение сигнал/шум [Float64]

  • powSig= мощность входного сигнала. Если параметр не задан, мощность вычисляется на основе входного сигнала x

--- Выходные параметры

  • y= сигнал с шумом [Array{Real{Float64}}, Array{Complex{Float6464}}] размером N

  • n= образцы шума [Array{Real{Float64}}, Array{Complex{Float64}}] размером N

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Генерирует коррелированную случайную последовательность Рэлея размером N, параметризованную доплеровской частотой fd и частотой дискретизации fs. Метод использует подход IFFT, описанный в документе [1].

--- Синтаксис

α = rayleighChan(nbPath,N,fs,fd,seed=-1)

--- Входные параметры

  • nbPath: количество генерируемых путей (больше 0) [Int]

  • N : размер нужного вывода (размер FFT) [Union{Int,Float64}]

  • fs : частота дискретизации [Union{Int,Float64}]

  • fd : доплеровская частота [Union{Int,Float64}]

  • seed: случайно генерируемое начальное значение ([Int], default =-1)

--- Выходные параметры

  • α : комплексный коэффициент Рэлея [Array{Complex{Float64},N}]

--- Справочные материалы

[1] D. J. Young and N. C. Beaulieu, The generation of correlated Rayleigh random variates by inverse discrete Fourier transform, in IEEE Transactions on Communications

---

Применяет реализацию канала к входному сигналу

--- Синтаксис

sigChan : applyChannel(sigId,channelImpl)

--- Входные параметры

  • sigId : входной сигнал [Array{Any}]

  • channelImpl: реализация канала [ChannelImpl]

--- Выходные параметры

  • sigChan : выходной сигнал [Array{Any}]

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Создает channelImpl на основе нужной модели канала и количества реализаций.

--- Синтаксис

channelImpl = getChannel(nbSamples,channelModel,randSeed=-1)

--- Входные параметры

  • nbSamples : количество выборок, к которым будет применен канал [Int]

  • channelModel : объект канала [ChannelModel]

  • randSeed : нужное начальное значение (значение по умолчанию: -1)

--- Выходные параметры

  • channelImpl : реализация канала

---

Возвращает полный отклик FIR на основе профиля мощности (в линейном масштабе), профиля задержки (в с) и частоты дискретизации.

--- Синтаксис

cir = getFIRResponse(delayProfile:,powerProfile,freq,sincSupport=5,interpSystem=0)

--- Входные параметры

  • delayProfile : вектор задержки в секундах [Union{Array{Int}},Array{Float64}}]

  • powerProfile : вектор затухания с тем же размером delayProfile в линейном масштабе с распределением Рэлея.

  • freq : частота дискретизации

  • sincSupport : размер интерполятора (значение по умолчанию 5)

  • interpSystem : принудительное применение дополнительной задержки для всех выборок для правильной интерполяции начала FIR (значение по умолчанию 0)

--- Выходные параметры

  • cir : конечный импульсный отклик [Array{Complex{Float64}},max(delayProfile)+sincSupport]

---

Создает объект канала, связанный с физическими параметрами и профилем распространения.

--- Синтаксис

channObj = initChannel(profile,carrierFreq,samplingFreq,dopplerFreq;powerProfile=[],delayProfile=[],randSeed=-1)

--- Входные параметры

  • profile: многопутный профиль (см. ниже) [String]

  • carrierFreq: частота несущей в Гц [Union{Int,Float64}]

  • samplingFreq: частота дискретизации базового диапазона [Union{Int,Float64}]

  • speed: скорость (км/ч) [Float64]

  • powerProfile : определяемый пользователем профиль мощности (по умолчанию []). В случае, когда он определен, delayProfile также должен быть определен, а профиль не используется. [Array{Float}]

  • delayProfile : определяемый пользователем профиль задержки в секундах [Array{Float64}]

  • randSeed: начальное значение, если необходимо (значение по умолчанию -1) [Float64]

--- Выходные параметры

  • channel: канал Julia [Channel]

--- Модели каналов

  • ETU : расширенный типичный городской

  • EVA : расширенная транспортная зона

  • TDLC:

  • Рэлей: модель канала Рэлея с одним отводом

---

Объект с реализациями каналов

--- Синтаксис

  • timeVarying : флаг для постоянного и изменяющегося во времени канала [Int]

  • cir : матрица CIR (nbTap x nbChannel) [Union{Array{Int},Array{Float64},Array{Complex{Float64}}}]

  • channelModel: модель, используемая для создания [DigitalComm.ChannelModel]

  • powerLin : распределение мощности с распределением Рэлея [Array{Complex{Float64}}]

  • randSeed : начальное значение, используемое для генерации Рэлея

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Объект модели канала

--- Синтаксис

  • profile : имя профиля [String]

  • carrierFreq : частота несущей [Union{Int,Float64}]

  • samplingFreq : частота дискретизации [Union{Int,Float64}]

  • speed : нужная скорость (км/ч) [Union{Int,Float64}]

  • powerProfile : распределение значений мощности в дБ [Array{Float64}]

  • delayProfile : распределение значений задержки в с [Array{Float64}], тот же размер, что и у powerProfile

  • dopplerFreq : доплеровская частота (наследуется от samplingFreq и speed)

  • delaySpread : максимальная поддержка CIR в выборках [Int]

---

Формы волны

Общие функции

Создает сигнал на основе словаря форм волны и желаемой конфигурации (т. е. ключа).

--- Синтаксис

sigId = decodeSig(qamMat,dWav,key)

--- Входные параметры

  • signal : сигнал во временной области

  • qamMat: комплексная частотно-временная матрица QAM [Array{Complex{Float64}}]

  • dWav : словарь форм волны (см. описание initWaveforms)

  • key : нужная конфигурация формы волны

--- Выходные параметры

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Декодирует сигнал во временной области для заданной формы волны с несколькими несущими и возвращает частотно-временное созвездие QAM. В качестве входных данных используются комплексный сигнал базового диапазона и структура формы волны.

--- Синтаксис

qamDec	= decodeSig(signal,struc);

--- Входные параметры

  • signal: сигнал во временной области

  • struc : структура формы волны

--- Выходные параметры

  • qamDec: комплексная частотно-временная матрица QAM [Array{Complex{Float64}}]

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Генерирует сигнал во временной области для заданной формы волны с несколькими несущими. В качестве входных данных используются частотно-временная матрица qamMat и структура формы волны.

--- Синтаксис

sigId = genSig(qamMat,struc::Waveform)

--- Входные параметры

  • qamMat: комплексная частотно-временная матрица QAM [Array{Complex{Float64}}]

  • struc : структура формы волны

--- Выходные параметры

  • sigId : сигнал во временной области

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Создает сигнал на основе словаря форм волны и желаемой конфигурации (т. е. ключа).

--- Синтаксис

sigId = genSig(qamMat,dWav,key)

--- Входные параметры

  • qamMat: комплексная частотно-временная матрица QAM [Array{Complex{Float64}}]

  • dWav : словарь форм волны (см. описание initWaveforms)

  • key : нужная конфигурация формы волны

--- Выходные параметры

  • sigId : сигнал во временной области

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Возвращает имя формы волны на основе структуры входного типа.

--- Синтаксис

name = getWaveformName(struc)

--- Входные параметры

  • struc : структура формы волны [Waveform]

--- Выходные параметры

  • name : строка, связанная с именем формы волны

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Создает словарь конфигураций форм волны. Чтобы сравнить и использовать один и тот же скрипт для разных конфигураций форм волны, мы предлагаем добавить словарь, чтобы иметь контейнер, содержащий все конфигурации форм волны. Функция вызывается с каждой необходимой структурой формы волны. Словарь содержит ключ, связанный с именем формы волны, и поле, связанное со структурой формы волны. Если форма волны присутствует несколько раз (несколько конфигураций с одним типом формы волны, например FBMC с разными значениями коэффициента перекрытия), к ключу формы волны добавляется индекс счетчика.

--- Синтаксис

dWav  = initWaveforms(x1,x2,...)

--- Входные параметры

  • x : структура формы волны [Waveform]

--- Выходные параметры

  • dWav : словарь форм волны.

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Генерация последовательности с постоянным модулем нулевой автокорреляции (CAZAC). Последовательность можно использовать в качестве начальных последовательностей в системах OFDM. Функция генерирует последовательность ZC в частотной области. Генерирует последовательность Задова-Чу в распределенной поднесущей, отображенной на векторе nFFT со сгенерированным ядром muPSS и усилением мощности zcBoost.

--- Синтаксис

zcSeq = genZCSequence(nFFT,allocatedSubcarrier,muPSS=0,zcBoost=0)

--- Входные параметры

  • nFFT : размер FFT для вывода [Int]

  • allocatedSubcarrier: вектор распределенных поднесущих [Array{Int}]

  • muPSS : ядро для последовательности ZC [Int] — значение по умолчанию 0

  • zcBoost : усиление мощности (в дБ), применяемое к последовательности [Float32] — значение по умолчанию 0.

--- Выходные параметры

  • zcSeq : последовательность ZC [Array{Complex{Float64}},nFFT]

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Возвращает вектор распределенных поднесущих, связанных с отображением частоты 5G New Radio. В 5G-NR в зависимости от размера FFT выделяется лишь несколько поднесущих (55—​65 %). Эта функция принимает размер FFT в качестве входных данных и возвращает массив размером nbSubcarriers. В выходных данных содержится больше поднесущих, чем при getLTEAlloc (для 4G-LTE)
allocatedSubcarrier = getLTEAlloc(nFFT) Входные параметры

  • nFFT : нужный размер FFT (128, 256, 512, 1024, 1536, 2048, 4096) [Int] Выходные параметры

    • allocatedSubcarrier: вектор индекса поднесущих [Array{Int}]

Возвращает вектор распределенных поднесущих, связанных с отображением частоты долгосрочного развития. В LTE в зависимости от размера FFT выделяется лишь несколько поднесущих (45—​55 %). Эта функция принимает размер FFT в качестве входных данных и возвращает массив размером nbSubcarriers
allocatedSubcarrier = getLTEAlloc(nFFT) Входные параметры

  • nFFT : нужный размер FFT (128, 256, 512, 1024, 1536, 2048, 4096) [Int]

Выходные параметры

  • allocatedSubcarrier: вектор индекса поднесущих [Array{Int}]

BF-OFDM

Возвращает прототип матрицы фильтрации для BF-OFDM с заданным коэффициентом перекрытия K, размером PPN nFBMC, типом фильтра. Дополнительными параметрами являются размер CP этапа предварительного кодирования (по умолчанию задано оптимальное значение) и структура фильтра для работы с переполнением параметров.

--- Синтаксис

(p,pF) = getBFOFDMFilter(K,nFBMC,filter;GI,BT,filterStopBand,fS)>

--- Входные параметры

  • K : коэффициент перекрытия [Int]

  • nFBMC: размер PPN (количество несущих FBMC) [Int]

  • filter: тип фильтра: Gaussian, phydyas, FS,DC: [String]

  • BT : временное произведение полосы пропускания для пользовательского гауссовского фильтра (используется с gaussian) [Float64]

  • filterStopBand: затухание с пользовательским окном DC (используется с DC) [Float64]

  • fS : пользовательские коэффициенты частотной дискретизации (Array{Float64,K}) (используется с fs)

--- Выходные параметры

  • p : импульсный отклик фильтра [Array{Float64,K*nFBMC}]

  • pF : коэффициент фильтра в частотной области (для реализации частотной дискретизации)

Типы фильтров Все типы фильтров могут быть вызваны двумя способами: filter и filteropt. При использовании filteropt коэффициенты фильтрации получаются путем численной оптимизации (SIR-оптимизации). В противном случае используется связанный параметр для извлечения соответствующих коэффициентов. Принципы оптимизации фильтров описаны в документах [1] и [2]. Особые случаи совместимости с 5G-NR приведены в документе [4]. Далее указываются поддерживаемые фильтры или окна.

  • Gaussian : форма гауссовского фильтра, заданная BT. Можно использовать оптимизированную гауссовскую форму [1]

  • phydyas : классическая форма импульса FBMC, определенная в частотной области [3]

  • FS : коэффициент, определенный в частотной области. Коэффициенты фильтра основаны на внутренней оптимизации SIR [1].

  • DC : окно Дольфа-Чебышева. Может быть основано на оптимизации окна (SIR-оптимизации) или определено параметром filterStopBand.

---

Справочные материалы

  • [1] Demmer, D and Gerzaguet, R and Doré, J-B and Le Ruyet, D. and Kténas, D, Filter Design for 5G BF-OFDM Waveform, 2017.

  • [2] A. Sahin, I. Guvenc, and H. Arslan, A Survey on Multicarrier Communications: Prototype Filters, Lattice Structures, and Implementation Aspects, 2014

  • [3] Phydyas project, Deliverable D5.1: Prototype filter and structure optimization, 2009

  • [4] Demmer, D and Rostom, Z and Gerzaguet, R and Doré, J-B and Le Ruyet, D. Study of OFDM Precoded Filter-Bank Waveforms, 2018

Примеры

Получает классический фильтр FBMC с phydyas и коэффициентом перекрытия 4, с входным PPN размером 64. Этап предварительного кодирования представляет собой OFDM размером 64 и GI размером 4.

# --- Фильтр phydyas
( hphydyas,hFphydyas )	 = getBFOFDMFilter(4,64,"phydyas");

# --- Гауссовская форма
( hGaussian,hFGaussian )	 = getBFOFDMFilter(4,64,"Gaussian_opt",GI=4);

# --- Пользовательское гауссовское окно
( hGaussianC,hFGaussianC ) = getBFOFDMFilter(4,64,"Gaussian",GI=4,BT=0.5)

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Создает сигнал Block Filtered — OFDM (BF-OFDM), параметризованный его числом и параметром формы волны. Генерирует сигнал временной области на основе входной матрицы qamMat. Входная матрица является частотно-временной матрицей размером (nRe x nbSymb), где nRe — количество распределенных поднесущих, а nbSymb — количество символов.

Форма сигнала параметризуется размером PPN (количеством поднесущих) nFBMC, размером этапа предварительного кодирования nOFDM, размером CP этапа предварительного кодирования GI и параметром коэффициента сжатия δ. См. документы [1], [2] с описанием формы волны и [3, 5] со сведениями о важности и разработке коэффициента сжатия (в предыдущих работах по BF-OFDM имеет значение 0,5).

BF-OFDM характеризуется фильтром формы импульса. Форма импульса может быть автоматически настроена как оптимальная (с точки зрения управления помехами) [4]. В этом случае filterType должен быть строкой (может быть gaussianopt, dcopt и fs_opt). Для определенного фильтра формы импульса необходимо задать массив из отводов фильтра nFBMC*K (и сгенерировать его, например с помощью getBFOFDMFilter).

--- Синтаксис

sigId =bfofdmSigGen(qamMat,nFBMC,nOFDM,K,GI,δ,allocatedSubcarriers,filterType;typeTx="PPN")

--- Входные параметры

  • qamMat : частотно-временные символы для передачи (символы QAM) [Array{Complex{Float64},nRe,nbSymb] с количеством nbSymb символов BF-OFDM и количеством nRe распределенных поднесущих.

  • nFBMC : размер PPN

  • nOFDM : размер предварительного кодирования OFDM

  • GI : размер CP этапа предварительного кодирования

  • K : коэффициент перекрытия

  • δ : коэффициент сжатия

  • allocatedSubcarriers: вектор распределенных поднесущих Array{Int,nRe} с maximum(nRe) < nOFDMnFBMCδ

  • filterType : тип формы импульса. Может быть строкой (см. getBFOFDMFilter) или вектором размером K x nFBMC с отводами фильтра.

  • typeTx : архитектура банка фильтров. Может быть PPN (многофазной сетью) или FS (частотным растяжением), если filterType имеет тип fs или fs_opt.

--- Выходные параметры

  • sigId : временная область сигнала BF-OFDM. [Array{Complex{Float64},nChip}.

---

Справочные материалы

  • [1] Gerzaguet, R and Demmer, D and Doré, J-B and Le Ruyet, D. and Kténas, D, Block-Filtered OFDM: A new Promising Waveform for Multi-service Scenarios, 2017

  • [2] Demmer, D and Gerzaguet, R and Doré, J-B and Le Ruyet, D. and Kténas, D, Block-filtered OFDM: A novel waveform for future wireless technologies, 2017.

  • [3] Demmer, D and Rostom, Z and Gerzaguet, R and Doré, J-B and Le Ruyet, D. Study of OFDM Precoded Filter-Bank Waveforms, 2018

  • [4] Demmer, D and Gerzaguet, R and Doré, J-B and Le Ruyet, D. and Kténas, D, Filter Design for 5G BF-OFDM Waveform, 2017.

  • [5] Demmer, D.; Zakaria, R.; Gerzaguet, R.; Doré, J. & Le Ruyet, D. Study of OFDM Precoded Filter-Bank Waveforms, IEEE Transactions on Wireless Communications, 2019.

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Инициализация BF-OFDM

--- Синтаксис

bfofdm = initBFOFDM(nFBMC::Int,nOFDM::Int,K::Int,GI::Int,δ::Float64,allocatedSubcarriers::Array{Int},filterType::String;BT=-1,filterStopBand=-1,fS=[],nFFT=-1,nCP=-1)

--- Входные параметры

  • nFBMC : количество несущих (размер PPN)

  • nOFDM : количество поднесущих на несущую (размер прекодера OFDM)

  • K : коэффициент перекрытия PPN

  • GI : размер CP прекодера

  • δ : коэффициент скорости передачи (коэффициент сжатия)

  • allocatedSubcarriers : вектор распределенных поднесущих

  • filterName: тип используемого фильтра (имя)

  • filterTaps: значения коэффициентов FIR

  • BT : гауссовские параметры (если используется гауссовский фильтр)

  • filterStopBand: коэффициент затухания по Дольфу-Чебышеву (если используется DC)

  • fS : коэффициенты частотного расширения (если используется фильтр FS)

  • nFFT : эквивалентный размер FFT OFDM

  • nCP : эквивалентный размер CP FFT

--- Выходные параметры

bfofdm : структура BF-OFDM

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Структура BF-OFDM

--- Синтаксис

  • nFBMC : количество несущих (размер PPN)

  • nOFDM : количество поднесущих на несущую (размер прекодера OFDM)

  • K : коэффициент перекрытия PPN

  • GI : размер CP прекодера

  • δ : коэффициент скорости передачи (коэффициент сжатия)

  • allocatedSubcarriers : вектор распределенных поднесущих

  • filterName: тип используемого фильтра (имя)

  • filterTaps: значения коэффициентов FIR

  • BT : гауссовские параметры (если используется гауссовский фильтр)

  • filterStopBand: коэффициент затухания по Дольфу-Чебышеву (если используется DC)

  • fS : коэффициенты частотного расширения (если используется фильтр FS)

  • nFFT : эквивалентный размер FFT OFDM

  • nCP : эквивалентный размер CP FFT

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Демодулирует сигнал BF-OFDM и возвращает полученную частотно-временную матрицу, состоящую из символов QAM (без эквализации). На основе bfofdmSigGen.jl.

--- Синтаксис

qamRx = bfofdmSigDecode(sigRx,nFBMC,nOFDM,K,GI,δ,allocatedSubcarriers;posWindow="end")

--- Входные параметры

  • sigRx : комплексный сигнал базового диапазона для декодирования [Array{Complex{Float64}}]

  • nFBMC : размер PPN [Int]

  • nOFDM : размер прекодера FFT [Int]

  • K : коэффициент перекрытия [Int]

  • GI : размер CP прекодера [Int]

  • δ : коэффициент сжатия [Float64]

  • allocatedSubcarriers: вектор распределенных поднесущих [Array{Int}]

  • posWindow : положение окна приемника. По умолчанию окно находится в том же месте, что и OFDM (т. е. падение CP). Для BF-OFDM также можно рассмотреть среднее положение окна при использовании канала с малой задержкой распространения (уменьшение ISI, включенного PPN). В этом случае необходимо применить поворот фазы (см. [1]).

--- Выходные параметры

  • qamRx : декодированное созвездие [Array{Complex{Float64}}]

Справочные материалы

  • [1] : Demmer, D.; Zakaria, R.; Gerzaguet, R.; Doré, J. & Le Ruyet, D. Study of OFDM Precoded Filter-Bank Waveforms, IEEE Transactions on Wireless Communications, 2019.

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Получает индекс распределенных несущих на основе индекса поднесущих. Мы считаем, что несущие FBMC переносят данные (т. е. распределены), если включена хотя бы одна из их поднесущих.

--- Синтаксис

fbmcCarriers = getBFOFDM_carrierFromSubcarriers(nFBMC,nOFDM,δ,subcarrier)

--- Входные параметры

  • nFBMC : размер несущей FBMC (количество несущих) [Int]

  • nOFDM : размер поднесущей OFDM [Int]

  • δ : коэффициент скорости передачи [Float64]

  • fbmcCarriers: вектор распределенной несущей [Array{Int,L}], L < nFBMCnOFDMδ

--- Выходные параметры

  • fbmcCarriers: вектор распределенных поднесущих [Array{Int, P ] P < nFBMC

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Возвращает сетку с передискретизацией на уровне поднесущих для BF-OFDM. Поскольку в BF-OFDM мы используем сетку nOFDMnFBMC с nOFDMδ распределенной поднесущей на каждую несущую (для этапа предварительного кодирования размером nOFDM), может быть полезно получить все индексы распределенных поднесущих на каждую несущую. Выводом является вектор индексов распределенных поднесущих в сетке частот с передискретизацией.

--- Синтаксис

subcarrierTx = getCarrierFromSubcarriers(nOFDM,δ,fbmcCarriers)

--- Входные параметры

  • nOFDM : размер поднесущей OFDM [Int]

  • δ : коэффициент скорости передачи [Float64]

  • fbmcCarriers: вектор распределенной несущей [Array{Int,L}], L < nFBMCnOFDMδ

--- Выходные параметры

  • subcarrierTx: вектор распределенных несущих [Array{Int,L}], L < nFBMCnOFDMδ

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Получает индекс несущей с передискретизацией (т. е. индекс поднесущих в поле предварительного кодирования) на основе индексов распределенных несущих. Предполагается, что для каждой несущей все поднесущие включены (с ортогональностью, т. е. Nδ распределенных поднесущих).

--- Синтаксис

subcarriers = getBFOFDM_subCarrierFromFBMCCarriers(nFBMC,nOFDM,δ,fbmcCarriers)

--- Входные параметры

  • nFBMC : размер несущей FBMC (количество несущих) [Int]

  • nOFDM : размер поднесущей OFDM [Int]

  • δ : коэффициент скорости передачи [Float64]

  • fbmcCarriers: вектор распределенной несущей [Array{Int,L}], L < nFBMC

--- Выходные параметры

  • subcarriers: вектор распределенных поднесущих [Array{Int, L δ ]

v 1.0 — Робин Герзаге (Robin Gerzaguet).

FBMC

Генерирует сигнал FBMC-OQAM во временной области на основе входной комплексной матрицы (до обработки OQAM) и параметров FBMC.

Передатчик основан на реализации полифазной сети с фильтром PHYDIAS (параметризованным коэффициентом перекрытия).

--- Синтаксис

fbmcSigGen(qamMat,nFFT,K,allocatedSubcarriers)

--- Входные параметры

  • qamMat : комплексная частотно-временная матрица QAM [Array{Complex{Float64}}]

  • nFFT : размер FFT [Int]

  • K : коэффициент перекрытия [Int]

  • allocatedSubcarriers : вектор распределенных поднесущих [Array{Int}]

--- Выходные параметры

  • sigId : комплексный сигнал базового диапазона во временном домене [Array{Complex{Float64}},nbEch]; nbEch = (2nbSymb-1)nFFT/2+nFFTK)

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Возвращает импульсный отклик во временной области PHYDIAS нужного фильтра FBMC, параметризованного коэффициентом перекрытия и размером FFT.

--- Синтаксис

p = getFBMCFilter(K,nFFT,type);

--- Входные параметры

  • K : коэффициент перекрытия

  • nFFT: размер FFT

--- Выходные параметры

  • p : временной импульсный отклик FBMC

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Инициирует структуру FBMC.

--- Синтаксис

fbmc = initFBMC(nFFT,K,allocatedSubcarriers)

--- Входные параметры

  • nFFT : размер FFT

  • K : коэффициент перекрытия

  • allocatedSubcarriers : вектор распределенных поднесущих [Array{Int}]

--- Выходные параметры

  • fbmc : структура FBMC [StrucFBMC]

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Применяет предварительную обработку OQAM к входящей матрице qamMat размером nbSubcarriers x nbSymb.

--- Синтаксис

oqamMat = oqamConversion(qamMat)

--- Входные параметры

  • qamMat: входная комплексная матрица QAM [Array{Complex{Float64,nbSubcarriers,nbSymb}}]

--- Выходные параметры

  • oqamMat: матрица OQAM (чисто вещественные и чисто образные альтернативы) [Array{Complex{Float64,nbSubcarriers,nbSymb*2}}]

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Структура формы волны FBMC

--- Синтаксис

  • nFFT : размер FFT

  • K : коэффициент перекрытия

  • allocatedSubcarriers : вектор распределенных поднесущих [Array{Int}]

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Демодулирует форму волны FBMC на основе двойного действия fbmcSigGen.

FBMC параметризуется размером FFT, длиной циклического префикса (в выборках) и вектором allocSubcarriers.

Синтаксис

sigId = fbmcSigDecode(sigRx,nFFT,K,allocSubcarriers)

--- Входные параметры

  • sigRx : сигнал FBMC во временном домене [Array{Complex{Float64},nbEch}]

  • nFFT : размер FFT [Int]

  • K : коэффициент перекрытия [Int]

allocSubcarriers: вектор индекса распределенных поднесущих [Array{Int,nbSubcarriers}]

--- Выходные параметры

  • qamMat: частотно-временная матрица: [Array{Complex{Float64},nbSubcarriers,nbSymb}]

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Применяет распаковку OQAM к входящей матрице OQAM qamMat размером nbSubcarriers x 2nbSymb.

--- Синтаксис

qamMat = oqamDemapping(qamMat)

--- Входные параметры

  • oqamMat: матрица OQAM (чисто вещественные и чисто образные альтернативы) [Array{Complex{Float64,nbSubcarriers,nbSymb*2}}]

--- Выходные параметры

  • qamMat: выходная комплексная матрица QAM [Array{Complex{Float64,nbSubcarriers,nbSymb}}]

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

OFDM

Создает структуру OFDM.

--- Синтаксис

ofdm = initOFDM(nFFT,nCP,allocatedSubcarriers)

--- Входные параметры

  • nFFT : размер FFT [Int]

  • nCP : размер циклического префикса [Int]

  • allocatedSubcarrier : вектор распределенных поднесущих [Array{Int}]

--- Выходные параметры

  • ofdm : структура OFDM [StrucOFDM]

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Заполняет сигнал OFDM во временной области на основе входной частотно-временной матрицы и параметров OFDM.

qamMat — это комплексная символьная матрица (например, QPSK) размером length(allocatedSubcarriers) x nbSymb.

Выходной сигнал во временной области имеет размер (nFFT+nCP)xnbSymb.

--- Синтаксис

ofdmSigGen!(sigId,qamMat,nFFT,nCP,allocatedSubcarriers)

--- Входные параметры

  • sigId : сигнал во временной области [Array{Complex{Float64}},(nFFT+nCP)xnbSymb]

  • qamMat: комплексная частотно-временная матрица для отображения [Array{Float64},length(allocatedSubcarriers),nbSymb]

  • nFFT : размер FFT [Int]

  • nCP : размер циклического префикса [Int]

  • allocatedSubcarrier : вектор распределенных поднесущих [Array{Int}]

--- Выходные параметры

  • []

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Заполняет сигнал OFDM во временной области на основе входной частотно-временной матрицы и структуры OFDM.

qamMat — это комплексная символьная матрица (например, QPSK) размером length(allocatedSubcarriers) x nbSymb.

Выходной сигнал во временной области имеет размер (nFFT+nCP)xnbSymb.

--- Синтаксис

ofdmSigGen!(sigId,qamMat,nFFT,nCP,allocatedSubcarriers)

--- Входные параметры

  • sigId : сигнал во временной области [Array{Complex{Float64}},(nFFT+nCP)xnbSymb]

  • qamMat: комплексная частотно-временная матрица для отображения [Array{Float64},length(allocatedSubcarriers),nbSymb]

  • ofdm : структура OFDM [StrucOFDM]

--- Выходные параметры

  • []

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Создает сигнал OFDM во временной области на основе входной частотно-временной матрицы и параметров OFDM.

qamMat — это комплексная символьная матрица (например, QPSK) размером length(allocatedSubcarriers) x nbSymb.

Выходной сигнал во временной области имеет размер (nFFT+nCP)xnbSymb.

--- Синтаксис

sigId = ofdmSigGen(qamMat,nFFT,nCP,allocatedSubcarriers)

--- Входные параметры

  • qamMat: комплексная частотно-временная матрица для отображения [Array{Float64},length(allocatedSubcarriers),nbSymb]

  • nFFT : размер FFT [Int]

  • nCP : размер циклического префикса [Int]

  • allocatedSubcarrier : вектор распределенных поднесущих [Array{Int}]

--- Выходные параметры

  • sigId : сигнал во временной области [Array{Complex{Float64}},(nFFT+nCP)xnbSymb]

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Создает сигнал OFDM во временной области на основе входной частотно-временной матрицы и структуры OFDM.

qamMat — это комплексная символьная матрица (например, QPSK) размером length(allocatedSubcarriers) x nbSymb.

Выходной сигнал во временной области имеет размер (nFFT+nCP)xnbSymb.

--- Синтаксис

sigId = ofdmSigGen(qamMat,nFFT,nCP,allocatedSubcarriers)

--- Входные параметры

  • qamMat: комплексная частотно-временная матрица для отображения [Array{Float64},length(allocatedSubcarriers),nbSymb]

  • ofdm : структура OFDM [StrucOFDM]

--- Выходные параметры

  • sigId : сигнал во временной области [Array{Complex{Float64}},(nFFT+nCP)xnbSymb]

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Структура для OFDM

--- Синтаксис

  • nFFT : размер FFT [Int]

  • nCP : размер циклического префикса [Int]

  • allocatedSubcarriers : вектор распределенных поднесущих [Array{Int}]

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

ofdmSigDecode! Декодирует сигнал OFDM во временной области и заполняет частотно-временную матрицу декодированными символами QAM.

--- Синтаксис

ofdmSigDecode(qamRx,sigId,nFFT,nCP,allocSubcarriers);

--- Входные параметры

  • qamRx: частотно-временная матрица: [Array{Complex{Float64},nbSubcarriers,nbSymb}]

  • sigId : сигнал OFDM во временной области [Array{Complex{Float64},nbEch}] ,(nbEch : количество выборок: nbSymb*(nFFT+nCp))

  • nFFT : размер FFT [Int]

  • nCP : размер циклического префикса (в выборках) [Int]

allocSubcarriers: вектор индекса распределенных поднесущих [Array{Int,nbSubcarriers}]

--- Выходные параметры

  • []

v 1.0 — Робин Герзаге (Robin Gerzaguet).

ofdmSigDecode! Декодирует сигнал OFDM во временной области и возвращает частотно-временную матрицу с декодированными символами QAM.

--- Синтаксис

qamRx = ofdmSigDecode!(qamRx,sigId,ofdm);

--- Входные параметры

  • qamRx: частотно-временная матрица: [Array{Complex{Float64},nbSubcarriers,nbSymb}]

  • sigId : сигнал OFDM во временной области [Array{Complex{Float64},nbEch}] ,(nbEch : количество выборок: nbSymb*(nFFT+nCp))

  • ofdm : структура OFDM [StrucOFDM]

--- Выходные параметры

  • []

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

ofdmSigDecode Декодирует сигнал OFDM во временной области и возвращает частотно-временную матрицу с декодированными символами QAM.

--- Синтаксис

qamRx = ofdmSigDecode(sigId,nFFT,nCP,allocSubcarriers);

--- Входные параметры

  • sigId : сигнал OFDM во временной области [Array{Complex{Float64},nbEch}] ,(nbEch : количество выборок: nbSymb*(nFFT+nCp))

  • nFFT : размер FFT [Int]

  • nCP : размер циклического префикса (в выборках) [Int]

allocSubcarriers: вектор индекса распределенных поднесущих [Array{Int,nbSubcarriers}]

--- Выходные параметры

  • qamRx: частотно-временная матрица: [Array{Complex{Float64},nbSubcarriers,nbSymb}]

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

ofdmSigDecode Декодирует сигнал OFDM во временной области и возвращает частотно-временную матрицу с декодированными символами QAM.

--- Синтаксис

qamRx = ofdmSigDecode(sigId,ofdm);

--- Входные параметры

  • sigId : сигнал OFDM во временной области [Array{Complex{Float64},nbEch}] ,(nbEch : количество выборок: nbSymb*(nFFT+nCp))

  • ofdm : структура OFDM [StrucOFDM]

--- Выходные параметры

  • qamRx: частотно-временная матрица: [Array{Complex{Float64},nbSubcarriers,nbSymb}]

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

SC-FDMA

Выполняет собственную свертку во временной области. Для UF-OFDM размер фильтра мал, поэтому выполнение в частотной области нецелесообразно.

--- Синтаксис

c = convT(a,b);

--- Входные параметры

  • a : первый сигнал

  • b : второй сигнал

--- Выходные параметры

  • c : a * b

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Создает структуру UF-OFDM.

--- Синтаксис

ufofdm = initUFOFDM(nFFT,L,allocatedSubcarriers;sizeRB=12,applyPD=1,attenuation=40)

--- Входные параметры

  • nFFT : размер FFT [Int]

  • L : размер фильтра [Int]

  • allocatedSubcarriers : вектор распределенных поднесущих [Array{Int}]

  • sizeRB : размер несущей в единицах поднесущей (часто 12) [Array{Int}]

  • applyPD : применение предварительного искажения на этапе Tx (по умолчанию 1, 0 не применяется) [Int=0 или 1]

  • attenuation: затухание фильтра Дольфа-Чебышева

  • filterTaps: коэффициент импульсного отклика фильтра [Array{Float64}]

--- Выходные параметры

  • ufofdm : структура UF-OFDM [StrucUFOFDM]

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Применяет универсальное фильтрованное мультиплексирование с ортогональным частотным разделением каналов (UF-OFDM) к частотно-временной матрице qamMat и возвращает сигнал UF-OFDM во временной области [1, 2].

ufofdm параметризуется размером FFT, длиной фильтра (в выборках) и вектором allocatedSubcarriers. Дополнительными параметрами являются размер несущей в поднесущих (по умолчанию размер RB равен 12), затухание окна Дольфа-Чебышева (40) и применение предыскажения (задано 1).

--- Синтаксис

sigId = genereSignalufofdm(qamMat,nFFT,nCp,allocatedSubcarriers;sizeRB=12,applyPD=1,attenuation=40)

--- Входные параметры

  • qamMat: частотно-временная матрица: [Array{Complex{Float64},nbSubcarriers,nbSymb}]

  • nbSymb : количество символов ufofdm для передачи

  • nbSubcarriers : количество распределенных поднесущих (должно быть меньше nFFT)

  • nFFT : размер FFT [Int]

  • L : длина фильтра Дольфа-Чебышева [Int]

  • allocatedSubcarriers: вектор индекса распределенных поднесущих [Array{Int,nbSubcarriers}]

  • sizeRB: размер несущей в поднесущих (значение по умолчанию: размер LTE RB: 12) [Int]

  • applyPD: компенсация формы фильтра (по умолчанию включена) [Int]

  • attenuation: затухание фильтра DC в дБ (значение по умолчанию 90) [Float64]

  • filterTaps: коэффициент фильтрации (по умолчанию пуст и создается повторно)

  • pdCoeffs : предыскажение Коэффициент фильтрации (по умолчанию пуст и создается повторно)

--- Выходные параметры

  • sigId : сигнал ufofdm во временной области [Array{Complex{Float64},nbEch}]

Справочные материалы

  • [1] R. Gerzaguet and al. The 5G candidate waveform race: a comparison of complexity and performance. EURASIP Journal on Wireless Communications and Networking, 2017

  • [2] V. Vakilian and al: Universal-filtered multi-carrier technique for wireless systems beyond LTE. Proc. IEEE Globecom Workshops (GC Wkshps), 2013

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Применяет универсальное фильтрованное мультиплексирование с ортогональным частотным разделением каналов (UF-OFDM) к частотно-временной матрице qamMat и возвращает сигнал UF-OFDM во временной области [1, 2].

ufofdm параметризуется размером FFT, длиной фильтра (в выборках) и вектором allocatedSubcarriers. Дополнительными параметрами являются размер несущей в поднесущих (по умолчанию размер RB равен 12), затухание окна Дольфа-Чебышева (40) и применение предыскажения (задано 1).

--- Синтаксис

sigId = genereSignalufofdm(qamMat,ufofdm);

--- Входные параметры

  • qamMat: частотно-временная матрица: [Array{Complex{Float64},nbSubcarriers,nbSymb}]

  • ufofdm: структура UF-OFDM [StrucUFOFDM]

--- Выходные параметры

  • sigId : сигнал ufofdm во временной области [Array{Complex{Float64},nbEch}]

Справочные материалы

  • [1] R. Gerzaguet and al. The 5G candidate waveform race: a comparison of complexity and performance. EURASIP Journal on Wireless Communications and Networking, 2017

  • [2] V. Vakilian and al: Universal-filtered multi-carrier technique for wireless systems beyond LTE. Proc. IEEE Globecom Workshops (GC Wkshps), 2013

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Структура для UFOFDM

--- Синтаксис

  • nFFT : размер FFT [Int]

  • L : размер фильтра [Int]

  • allocatedSubcarriers : вектор распределенных поднесущих [Array{Int}]

  • sizeRB : размер несущей в единицах поднесущей (часто 12) [Array{Int}]

  • applyPD : применение предварительного искажения на этапе Tx (по умолчанию 1, 0 не применяется) [Int=0 или 1]

  • attenuation: затухание фильтра Дольфа-Чебышева

  • filterTaps: коэффициент импульсного отклика фильтра [Array{Float64}]

  • pd : коэффициенты PD [Array{Complex{Float64}}]

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

UF-OFDM

Создает структуру SCFDMA.

--- Синтаксис

ofdm = initSCFDMA(nFFT,nCP,allocatedSubcarriers)

--- Входные параметры

  • nFFT : размер FFT [Int]

  • nCP : размер циклического префикса [Int]

  • allocatedSubcarrier : вектор распределенных поднесущих [Array{Int}]

  • sizeDFT : размер прекодера DFT (классическое значение 12) [Int]

--- Выходные параметры

  • scfdma: структура SCFDMA [StrucSCFDMA]

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Создает сигнал SCFDMA во временной области на основе входной частотно-временной матрицы и параметров SCFDMA. SCFDMA применяет прекодер перед IFFT на стороне передатчика, чтобы уменьшить флуктуации сигнала.

qamMat — это комплексная символьная матрица (например, QPSK) размером length(allocatedSubcarriers) x nbSymb.

Выходной сигнал во временной области имеет размер (nFFT+nCP)xnbSymb.

--- Синтаксис

sigId = scfdmaSigGen(qamMat,nFFT,nCP,allocatedSubcarriers)

--- Входные параметры

  • qamMat: комплексная частотно-временная матрица для отображения [Array{Float64},length(allocatedSubcarriers),nbSymb]

  • nFFT : размер FFT [Int]

  • nCP : размер циклического префикса [Int]

  • allocatedSubcarrier : вектор распределенных поднесущих [Array{Int}]

  • sizeDFT : размер прекодера DFT (классическое значение 12) [Int]

--- Выходные параметры

  • sigId : сигнал во временной области [Array{Complex{Float64}},(nFFT+nCP)xnbSymb]

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Структура для SCFDMA

--- Синтаксис

  • nFFT : размер FFT [Int]

  • nCP : размер циклического префикса [Int]

  • allocatedSubcarriers : вектор распределенных поднесущих [Array{Int}]

  • sizeDFT : размер прекодера DFT (классическое значение 12) [Int]

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Применяет последующую обработку для SC-FDMA (т. е. этап последующей обработки DFT). Эта функция может быть вызвана, если scfdmaSigDecode вызывается с флагом последующей обработки, равным 0 (например, если выполняется эгализация частоты).

--- Синтаксис

qamPost = scfdmaPostProcessing(qamMat,sizeDFT)

--- Входные параметры

  • qamMat: частотно-временная матрица после Rx FFT (и до Rx IDFT) [Array{Complex{Float64}},nbSubcarriers,nbSymb]

  • sizeDFT : размер блока прекодера (часто 12)

--- Выходные параметры

  • qamPost : частотно-временная матрица после обработки IDFT [Array{Complex{Float64},nbSubcarriers,nbSymb}]

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Применяет демодулятор SCFDMA к входному сигналу и возвращает частотно-временную матрицу QAM.

--- Синтаксис

qamRx = scfdmaSigDecode(sigId,nFFT,nCP,allocSubcarriers,sizeDFT);

--- Входные параметры

--- Входные параметры

  • sigId : сигнал SCFDMA во временной области [Array{Complex{Float64},nbEch}]

  • nFFT : размер FFT [Int]

  • nCP : размер циклического префикса (в выборках) [Int]

  • allocSubcarriers: вектор индекса распределенных поднесущих [Array{Int,nbSubcarriers}]

  • sizeDFT : размер последующей обработки (размер DFT)

  • doPostProcessing: выполнение этапа последующей обработки (IDFT) Значение по умолчанию 1. В некоторых случаях нам нужны исходные данные (т. е. данные до этапа последующей обработки), например при эквализации каналов. В этом случае последующая обработка должна быть выполнена на отдельном шаге (с вызовом функции scfdmaPostProcessing).

--- Выходные параметры

  • qamRx: частотно-временная матрица: [Array{Complex{Float64},nbSubcarriers,nbSymb}]

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Применяет демодулятор SCFDMA к входному сигналу и возвращает частотно-временную матрицу QAM.

--- Синтаксис

qamRx = scfdmaSigDecode(sigId,nFFT,nCP,allocSubcarriers,sizeDFT);

--- Входные параметры

--- Входные параметры

  • sigId : сигнал SCFDMA во временной области [Array{Complex{Float64},nbEch}]

  • scfdma: структура SCFDMA [StrucSCFDMA]

  • doPostProcessing: выполнение этапа последующей обработки (IDFT) Значение по умолчанию 1. В некоторых случаях нам нужны исходные данные (т. е. данные до этапа последующей обработки), например при эквализации каналов. В этом случае последующая обработка должна быть выполнена на отдельном шаге (с вызовом функции scfdmaPostProcessing).

--- Выходные параметры

  • qamRx: частотно-временная матрица: [Array{Complex{Float64},nbSubcarriers,nbSymb}]

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

WOLA

Создает и инициирует структуру формы волны WOLA

--- Синтаксис

wola = initWOLA(nFFT,nCP,allocatedSubcarriers,winFuncTx,winLengthTx,winFuncRx,winLengthRx;windowTx=[],windowRx=[])

--- Входные параметры

  • nFFT : размер FFT [Int]

  • nCP : размер CP [Int]

  • allocatedSubcarriers : вектор распределенных поднесущих [Array{Int}]

  • winFuncTx : имя используемого окна @Tx

  • winLengthTx: размер окна @Tx

  • winFuncRx : имя используемого окна @Rx

  • winLengthRx: размер окна @Rx

  • windowTx : коэффициент окна Tx. По умолчанию пусто. Чтобы принудительно использовать данное окно, заполните этот вектор. Если оставить пустым, окно будет создано на основе winLengthTx и winFuncTx.

  • windowRx : коэффициент окна Rx. По умолчанию пусто. Чтобы принудительно использовать данное окно, заполните этот вектор. Если оставить пустым, окно будет создано на основе winLengthRx и winFuncRx.

--- Выходные параметры

  • wola : структура формы волны

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Применяет взвешенное перекрывающееся сложение с мультиплексированием с ортогональным частотным разделением каналов (WOLA-OFDM) к частотно-временной матрице qamMat и возвращает сигнал OFDM во временной области. OFDM параметризуется размером FFT, длиной циклического префикса (в выборках) и вектором allocSubcarriers. Часть WOLA параметризуется окном, применяемым в каждом начале и конце символов. Размер окна может быть (и, скорее всего, будет) больше длины CP, а чистая совместимость с OFDM обеспечивается за счет перекрытия символов. Заинтересованный читатель может обратиться к [1] [2] и [3], содержащим описание принципа WOLA.

---

Синтаксис

sigId = wolaSigGen(qamMat,nFFT,nCP,allocSubcarriers,winFunc,winLength=0)

--- Входные параметры

  • qamMat: частотно-временная матрица: [Array{Complex{Float64},nbSubcarriers,nbSymb}]

  • nbSymb : количество символов OFDM для передачи

  • nbSubcarriers : количество распределенных поднесущих (должно быть меньше nFFT)

  • nFFT : размер FFT [Int]

  • nCP : размер циклического префикса (в выборках) [Int]

  • allocSubcarriers: вектор индекса распределенных поднесущих [Array{Int,nbSubcarriers}]

  • winFunc: тип окна. Может быть строкой поддерживаемых окон или непосредственно оконными отводами.

  • winLength: длина окна. Этот параметр не используется, если winFunc является массивом оконных отводов.

--- Выходные параметры

  • sigId : сигнал WOLA-OFDM во временной области [Array{Complex{Float64},nbEch}]. nbEch : количество выборок: nbSymb*(nFFT+nCP)

---

Поддерживаемое окно

  • Triangle : треугольное окно

  • srrc : квадратный корень из приподнятого косинуса

  • Meyer : окно Мейера (см. [1])

---

Справочные материалы

  • [1] R. Zayani, Y. Medjahdi, H. Shaiek and D. Roviras, WOLA-OFDM: A Potential Candidate for Asynchronous 5G, 2016.

  • [2] Y. Medjahdi and al, On the road to 5G: Comparative study of Physical layer in MTC context, 2017.

  • [3] R. Gerzaguet and al, Comparison of Promising Candidate Waveforms for 5G: WOLA-OFDM Versus BF-OFDM, 2017.

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Структура формы волны WOLA

--- Синтаксис

  • nFFT : размер FFT [Int]

  • nCP : размер CP [Int]

  • allocatedSubcarriers : вектор распределенных поднесущих [Array{Int}]

  • windowTx : используемое окно на стороне передатчика

  • windowRx : используемое окно на стороне приемника

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).

Применяет демодулятор WOLA-OFDM к входному сигналу и возвращает частотно-временную матрицу QAM.

---

Синтаксис qamRx = wolaSigDecode(sigId,nFFT,nCP,allocSubcarriers);

--- Входные параметры

  • sigId : сигнал OFDM во временной области [Array{Complex{Float64},nbEch}]

  • nbEch : количество выборок: nbSymb*(nFFT+nCP)

  • nFFT : размер FFT [Int]

  • nCP : размер циклического префикса (в выборках) [Int]

  • allocSubcarriers: вектор индекса распределенных поднесущих [Array{Int,nbSubcarriers}]

  • winLengthTx : размер окна на стороне @Tx (поворот FFT)

  • doTailBiting : выполнение подхода со значащими хвостами (по умолчанию 1) [Int]

  • winFunc: тип окна. Может быть строкой поддерживаемых окон или непосредственно оконными отводами.

  • winLength: длина окна. Этот параметр не используется, если winFunc является массивом оконных отводов.

--- Выходные параметры

  • qamMat: частотно-временная матрица: [Array{Complex{Float64},nbSubcarriers,nbSymb}]

---

Поддерживаемое окно

  • Triangle : треугольное окно

  • srrc : квадратный корень из приподнятого косинуса

  • Meyer : окно Мейера (см. [1])

---

Справочные материалы

  • [1] R. Zayani, Y. Medjahdi, H. Shaiek and D. Roviras, WOLA-OFDM: A Potential Candidate for Asynchronous 5G, 2016.

  • [2] Y. Medjahdi and al, On the road to 5G: Comparative study of Physical layer in MTC context, 2017.

  • [3] R. Gerzaguet and al, Comparison of Promising Candidate Waveforms for 5G: WOLA-OFDM Versus BF-OFDM, 2017.

---

v 1.0 — Робин Герзаге (Robin Gerzaguet).