Список функций
Общие функции
#
DigitalComm.avgPower
— Method
Вычисляет среднюю мощность входного сигнала σ = 1 / N Σ | x[n] | ^2
--- Синтаксис
σ = avgPower(x);
--- Входные параметры
-
x : входной сигнал [Array{Any}]
--- Выходные параметры
-
σ : расчетная мощность [Float64]
---
v 1.0 — Робин Герзаге (Robin Gerzaguet).
#
DigitalComm.getSIR
— Function
Возвращает отношение сигнал/помеха, выраженное в дБ (или в линейных величинах) между сигналом наблюдения и 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).
#
DigitalComm.qFunc
— Method
Возвращает функцию 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).
#
DigitalComm.Waveform
— Type
Абстрактный тип, собирающий все конфигурации форм волн
v 1.0 — Робин Герзаге (Robin Gerzaguet).
Квадратурная амплитудная модуляция
#
DigitalComm.genBitSequence
— Function
Создает двоичную последовательность и возвращает буфер с битами в количестве nbBits. Массив имеет тип UInt8 с x00 или x01. Если указано, randSeed управляет начальным значением генератора случайных чисел.
--- Синтаксис
genBitsequence(nbBits,randSeed=-1);
--- Входные параметры
-
nbBits : количество генерируемых битов [Int]
-
randSeed : начальное значение произвольного процесса (значение по умолчанию — больше -1) [Int]
--- Выходные параметры
-
buffer : заполненный буфер [Array{UInt8}]
#
DigitalComm.genBitSequence!
— Function
Создает двоичную последовательность и заполняет входной буфер битами. Массив имеет тип UInt8 с x00 или x01. Если указано, randSeed управляет начальным значением генератора случайных чисел.
--- Синтаксис
genBitsequence!(buffer,nbBits,randSeed=-1);
--- Входные параметры
-
buffer : заполняемый буфер [Array{UInt8,nbBits}]
-
nbBits : количество генерируемых битов [Int]
-
randSeed : начальное значение произвольного процесса (значение по умолчанию — больше -1, начальное значение не используется)
--- Выходные параметры
-
buffer : заполненный буфер [Array{UInt8}]
#
DigitalComm.genByteSequence
— Function
Создает последовательность байтов и заполняет входной буфер байтами в количестве nbytes. Массив
--- Синтаксис
genByteSequence(nbBytes,randSeed=-1);
--- Входные параметры
-
nbBytes : количество генерируемых байтов [Int]
-
randSeed : начальное значение произвольного процесса (значение по умолчанию — больше -1)
--- Выходные параметры
-
buffer : заполненный буфер [Array{UInt8}]
---
v 1.0 — Робин Герзаге (Robin Gerzaguet).
#
DigitalComm.genByteSequence!
— Function
Создает последовательность байтов и заполняет входной буфер байтами в количестве nbytes Массив имеет тип UInt8 с x00 до xff. Если указано, randSeed управляет начальным значением генератора случайных чисел.
--- Синтаксис
genByteSequence!(buffer,nbBytes,randSeed=-1);
--- Входные параметры
-
buffer : заполняемый буфер [Array{UInt8,nbByte}]
-
randSeed : начальное значение произвольного процесса (значение по умолчанию — больше -1)
--- Выходные параметры
-
buffer : заполненный буфер [Array{UInt8}]
---
v 1.0 — Робин Герзаге (Robin Gerzaguet).
#
DigitalComm.bitMappingQAM!
— Method
Функция квадратурной амплитудной модуляции (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}]
--- Выходные параметры
-
[]
#
DigitalComm.bitMappingQAM
— Method
Функция квадратурной амплитудной модуляции (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}}]
#
DigitalComm.bitDemappingQAM!
— Method
Функция жесткого декодирования квадратурной амплитудной модуляции (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 : комплексный вектор наблюдения для декодирования.
--- Выходные параметры
-
[]
#
DigitalComm.bitDemappingQAM
— Method
Функция жесткого декодирования квадратурной амплитудной модуляции (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)]
#
DigitalComm.hardConstellation!
— Method
Функция жесткого декодирования квадратурной амплитудной модуляции (QAM) Возвращает жестко декодированное созвездие с решением на базе Вороного. Разница с bitDeMapping в том, что bitDeMapping возвращает декодированную последовательность битов, а hardConstellation — ближайшую точку созвездия. Это можно использовать для вычисления приближенной оценки EVM (при условии достаточно высокой величины отношения SNR, чтобы избежать ошибок).
--- Синтаксис
hardConstellation!(qamDec,M,qamMat)
--- Входные параметры
-
qamDec : вектор для заполнения [Array{Complex{Float64},N}] с N = length(qamMat)
-
M : размер созвездия (например, от 4 до 256)
-
qamMat : вектор для декодирования
--- Выходные параметры
-
[]
#
DigitalComm.hardConstellation
— Method
Функция жесткого декодирования квадратурной амплитудной модуляции (QAM) Возвращает жестко декодированное созвездие с решением на базе Вороного. Разница с bitDeMapping в том, что bitDeMapping возвращает декодированную последовательность битов, а hardConstellation — ближайшую точку созвездия. Это можно использовать для вычисления приближенной оценки EVM (при условии достаточно высокой величины отношения SNR, чтобы избежать ошибок).
--- Синтаксис
qamDec = hardConstellation!(qamDec,M,qamMat)
--- Входные параметры
-
M : размер созвездия (например, от 4 до 256)
-
qamMat : вектор для декодирования
--- Выходные параметры
-
qamDec : вектор для заполнения [Array{Complex{Float64},N}] с N = length(qamMat)
#
DigitalComm.calcLLR
— Method
Возвращает окончательное значение LLR на основе входных расстояний
--- Синтаксис
llr = calcLLR(e0,e1,c)
--- Входные параметры
-
e0: минимальное расстояние 1
-
e1: минимальное расстояние 2
-
c : оценка канала
--- Выходные параметры
-
llr: оценка по максимуму правдоподобия
---
v 1.0 — Робин Герзаге (Robin Gerzaguet).
#
DigitalComm.llrToHardBits!
— Method
Возвращает жесткое двоичное значение из мягкой оценки LLR (без декодера FEC, только жесткое решение).
--- Синтаксис
llrToHardBits(hardD,llr)
--- Входные параметры
-
hardD : жесткое двоичное решение [Array{UInt},N]
-
llr : входной LLR (массив Float64 или UInt8) [Union{[Array{UInt}],[Array{Float64}]}]
--- Выходные параметры
-
[]
---
v 1.0 — Робин Герзаге (Robin Gerzaguet).
#
DigitalComm.llrToHardBits!
— Method
Возвращает жесткое двоичное значение из мягкой оценки LLR (без декодера FEC, только жесткое решение).
--- Синтаксис
llrToHardBits(hardD,llr)
--- Входные параметры
-
hardD : жесткое двоичное решение [Array{UInt},N]
-
llr : входной LLR (массив Float64 или UInt8) [Union{[Array{UInt}],[Array{Float64}]}]
--- Выходные параметры
-
[]
---
v 1.0 — Робин Герзаге (Robin Gerzaguet).
#
DigitalComm.llrToHardBits
— Method
Возвращает жесткое двоичное значение из мягкой оценки LLR (без декодера FEC, только жесткое решение).
--- Синтаксис
hardD = llrToHardBits(llr)
--- Входные параметры
-
llr : входной LLR (массив Float64 или UInt8) [Union{[Array{UInt}],[Array{Float64}]}]
--- Выходные параметры
-
hardD : жесткое двоичное решение [Array{UInt},N]
---
v 1.0 — Робин Герзаге (Robin Gerzaguet).
#
DigitalComm.llrToHardBits
— Method
Возвращает жесткое двоичное значение из мягкой оценки LLR (без декодера FEC, только жесткое решение).
--- Синтаксис
hardD = llrToHardBits(llr)
--- Входные параметры
-
llr : входной LLR (массив Float64 или UInt8) [Union{[Array{UInt}],[Array{Float64}]}]
--- Выходные параметры
-
hardD : жесткое двоичное решение [Array{UInt},N]
---
v 1.0 — Робин Герзаге (Robin Gerzaguet).
#
DigitalComm.llrToUInt!
— Method
Преобразует массив значений с плавающей запятой 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).
#
DigitalComm.llrToUInt
— Method
Преобразует массив значений с плавающей запятой 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).
#
DigitalComm.symbolDemappingQAM!
— Method
--- Описание
Возвращает отношение логарифмического правдоподобия входящей последовательности 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).
#
DigitalComm.symbolDemappingQAM
— Method
--- Описание
Возвращает отношение логарифмического правдоподобия входящей последовательности 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)]
Каналы
#
DigitalComm.addNoise
— Method
Добавляет к входному сигналу белый аддитивный круговой гауссовский шум. Добавленный шум является вещественным, если входной сигнал является вещественным, и вычисленным, если входной сигнал является комплексным. Уровень шума регулируется вторым входным параметром, который представляет собой отношение сигнал/шум (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).
#
DigitalComm.rayleighChan
— Function
Генерирует коррелированную случайную последовательность Рэлея размером 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
---
#
DigitalComm.applyChannel
— Method
Применяет реализацию канала к входному сигналу
--- Синтаксис
sigChan : applyChannel(sigId,channelImpl)
--- Входные параметры
-
sigId : входной сигнал [Array{Any}]
-
channelImpl: реализация канала [ChannelImpl]
--- Выходные параметры
-
sigChan : выходной сигнал [Array{Any}]
---
v 1.0 — Робин Герзаге (Robin Gerzaguet).
#
DigitalComm.getChannel
— Function
Создает channelImpl на основе нужной модели канала и количества реализаций.
--- Синтаксис
channelImpl = getChannel(nbSamples,channelModel,randSeed=-1)
--- Входные параметры
-
nbSamples : количество выборок, к которым будет применен канал [Int]
-
channelModel : объект канала [ChannelModel]
-
randSeed : нужное начальное значение (значение по умолчанию: -1)
--- Выходные параметры
-
channelImpl : реализация канала
---
#
DigitalComm.getFIRResponse
— Function
Возвращает полный отклик 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]
---
#
DigitalComm.initChannel
— Method
Создает объект канала, связанный с физическими параметрами и профилем распространения.
--- Синтаксис
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:
-
Рэлей: модель канала Рэлея с одним отводом
---
#
DigitalComm.ChannelImpl
— Type
Объект с реализациями каналов
--- Синтаксис
-
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).
#
DigitalComm.ChannelModel
— Type
Объект модели канала
--- Синтаксис
-
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]
---
Формы волны
Общие функции
#
DigitalComm.decodeSig
— Method
Создает сигнал на основе словаря форм волны и желаемой конфигурации (т. е. ключа).
--- Синтаксис
sigId = decodeSig(qamMat,dWav,key)
--- Входные параметры
-
signal : сигнал во временной области
-
qamMat: комплексная частотно-временная матрица QAM [Array{Complex{Float64}}]
-
dWav : словарь форм волны (см. описание initWaveforms)
-
key : нужная конфигурация формы волны
--- Выходные параметры
---
v 1.0 — Робин Герзаге (Robin Gerzaguet).
#
DigitalComm.decodeSig
— Method
Декодирует сигнал во временной области для заданной формы волны с несколькими несущими и возвращает частотно-временное созвездие QAM. В качестве входных данных используются комплексный сигнал базового диапазона и структура формы волны.
--- Синтаксис
qamDec = decodeSig(signal,struc);
--- Входные параметры
-
signal: сигнал во временной области
-
struc : структура формы волны
--- Выходные параметры
-
qamDec: комплексная частотно-временная матрица QAM [Array{Complex{Float64}}]
---
v 1.0 — Робин Герзаге (Robin Gerzaguet).
#
DigitalComm.genSig
— Method
Генерирует сигнал во временной области для заданной формы волны с несколькими несущими. В качестве входных данных используются частотно-временная матрица qamMat и структура формы волны.
--- Синтаксис
sigId = genSig(qamMat,struc::Waveform)
--- Входные параметры
-
qamMat: комплексная частотно-временная матрица QAM [Array{Complex{Float64}}]
-
struc : структура формы волны
--- Выходные параметры
-
sigId : сигнал во временной области
---
v 1.0 — Робин Герзаге (Robin Gerzaguet).
#
DigitalComm.genSig
— Method
Создает сигнал на основе словаря форм волны и желаемой конфигурации (т. е. ключа).
--- Синтаксис
sigId = genSig(qamMat,dWav,key)
--- Входные параметры
-
qamMat: комплексная частотно-временная матрица QAM [Array{Complex{Float64}}]
-
dWav : словарь форм волны (см. описание initWaveforms)
-
key : нужная конфигурация формы волны
--- Выходные параметры
-
sigId : сигнал во временной области
---
v 1.0 — Робин Герзаге (Robin Gerzaguet).
#
DigitalComm.getWaveformName
— Method
Возвращает имя формы волны на основе структуры входного типа.
--- Синтаксис
name = getWaveformName(struc)
--- Входные параметры
-
struc : структура формы волны [Waveform]
--- Выходные параметры
-
name : строка, связанная с именем формы волны
---
v 1.0 — Робин Герзаге (Robin Gerzaguet).
#
DigitalComm.initWaveforms
— Method
Создает словарь конфигураций форм волны. Чтобы сравнить и использовать один и тот же скрипт для разных конфигураций форм волны, мы предлагаем добавить словарь, чтобы иметь контейнер, содержащий все конфигурации форм волны. Функция вызывается с каждой необходимой структурой формы волны. Словарь содержит ключ, связанный с именем формы волны, и поле, связанное со структурой формы волны. Если форма волны присутствует несколько раз (несколько конфигураций с одним типом формы волны, например FBMC с разными значениями коэффициента перекрытия), к ключу формы волны добавляется индекс счетчика.
--- Синтаксис
dWav = initWaveforms(x1,x2,...)
--- Входные параметры
-
x : структура формы волны [Waveform]
--- Выходные параметры
-
dWav : словарь форм волны.
---
v 1.0 — Робин Герзаге (Robin Gerzaguet).
#
DigitalComm.genZCSequence
— Function
Генерация последовательности с постоянным модулем нулевой автокорреляции (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).
#
DigitalComm.get5GNRAlloc
— Method
Возвращает вектор распределенных поднесущих, связанных с отображением частоты 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}]
-
#
DigitalComm.getLTEAlloc
— Method
Возвращает вектор распределенных поднесущих, связанных с отображением частоты долгосрочного развития. В LTE в зависимости от размера FFT выделяется лишь несколько поднесущих (45—55 %). Эта функция принимает размер FFT в качестве входных данных и возвращает массив размером nbSubcarriers
allocatedSubcarrier = getLTEAlloc(nFFT)
Входные параметры
-
nFFT : нужный размер FFT (128, 256, 512, 1024, 1536, 2048, 4096) [Int]
Выходные параметры
-
allocatedSubcarrier: вектор индекса поднесущих [Array{Int}]
BF-OFDM
#
DigitalComm.getBFOFDMFilter
— Method
Возвращает прототип матрицы фильтрации для 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).
#
DigitalComm.bfofdmSigGen
— Method
Создает сигнал 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).
#
DigitalComm.initBFOFDM
— Method
Инициализация 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).
#
DigitalComm.StrucBFOFDM
— Type
Структура 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).
#
DigitalComm.bfofdmSigDecode
— Method
Демодулирует сигнал 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).
#
DigitalComm.getBFOFDM_carrierFromSubcarriers
— Method
Получает индекс распределенных несущих на основе индекса поднесущих. Мы считаем, что несущие 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).
#
DigitalComm.getBFOFDM_oversampledGridSubcarriers
— Method
Возвращает сетку с передискретизацией на уровне поднесущих для 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).
#
DigitalComm.getBFOFDM_subCarrierFromFBMCCarriers
— Method
Получает индекс несущей с передискретизацией (т. е. индекс поднесущих в поле предварительного кодирования) на основе индексов распределенных несущих. Предполагается, что для каждой несущей все поднесущие включены (с ортогональностью, т. е. 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
#
DigitalComm.fbmcSigGen
— Method
Генерирует сигнал 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).
#
DigitalComm.getFBMCFilter
— Method
Возвращает импульсный отклик во временной области PHYDIAS нужного фильтра FBMC, параметризованного коэффициентом перекрытия и размером FFT.
--- Синтаксис
p = getFBMCFilter(K,nFFT,type);
--- Входные параметры
-
K : коэффициент перекрытия
-
nFFT: размер FFT
--- Выходные параметры
-
p : временной импульсный отклик FBMC
---
v 1.0 — Робин Герзаге (Robin Gerzaguet).
#
DigitalComm.initFBMC
— Method
Инициирует структуру FBMC.
--- Синтаксис
fbmc = initFBMC(nFFT,K,allocatedSubcarriers)
--- Входные параметры
-
nFFT : размер FFT
-
K : коэффициент перекрытия
-
allocatedSubcarriers : вектор распределенных поднесущих [Array{Int}]
--- Выходные параметры
-
fbmc : структура FBMC [StrucFBMC]
---
v 1.0 — Робин Герзаге (Robin Gerzaguet).
#
DigitalComm.oqamMapping
— Method
Применяет предварительную обработку 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).
#
DigitalComm.StrucFBMC
— Type
Структура формы волны FBMC
--- Синтаксис
-
nFFT : размер FFT
-
K : коэффициент перекрытия
-
allocatedSubcarriers : вектор распределенных поднесущих [Array{Int}]
---
v 1.0 — Робин Герзаге (Robin Gerzaguet).
#
DigitalComm.fbmcSigDecode
— Method
Демодулирует форму волны 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).
#
DigitalComm.oqamDemapping
— Method
Применяет распаковку 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
#
DigitalComm.initOFDM
— Method
Создает структуру OFDM.
--- Синтаксис
ofdm = initOFDM(nFFT,nCP,allocatedSubcarriers)
--- Входные параметры
-
nFFT : размер FFT [Int]
-
nCP : размер циклического префикса [Int]
-
allocatedSubcarrier : вектор распределенных поднесущих [Array{Int}]
--- Выходные параметры
-
ofdm : структура OFDM [StrucOFDM]
---
v 1.0 — Робин Герзаге (Robin Gerzaguet).
#
DigitalComm.ofdmSigGen!
— Method
Заполняет сигнал 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).
#
DigitalComm.ofdmSigGen!
— Method
Заполняет сигнал 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).
#
DigitalComm.ofdmSigGen
— Method
Создает сигнал 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).
#
DigitalComm.ofdmSigGen
— Method
Создает сигнал 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).
#
DigitalComm.StrucOFDM
— Type
Структура для OFDM
--- Синтаксис
-
nFFT : размер FFT [Int]
-
nCP : размер циклического префикса [Int]
-
allocatedSubcarriers : вектор распределенных поднесущих [Array{Int}]
---
v 1.0 — Робин Герзаге (Robin Gerzaguet).
#
DigitalComm.ofdmSigDecode!
— Method
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).
#
DigitalComm.ofdmSigDecode!
— Method
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).
#
DigitalComm.ofdmSigDecode
— Method
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).
#
DigitalComm.ofdmSigDecode
— Method
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
#
DigitalComm.convT
— Method
Выполняет собственную свертку во временной области. Для UF-OFDM размер фильтра мал, поэтому выполнение в частотной области нецелесообразно.
--- Синтаксис
c = convT(a,b);
--- Входные параметры
-
a : первый сигнал
-
b : второй сигнал
--- Выходные параметры
-
c : a * b
---
v 1.0 — Робин Герзаге (Robin Gerzaguet).
#
DigitalComm.initUFOFDM
— Method
Создает структуру 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).
#
DigitalComm.ufofdmSigGen
— Method
Применяет универсальное фильтрованное мультиплексирование с ортогональным частотным разделением каналов (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).
#
DigitalComm.ufofdmSigGen
— Method
Применяет универсальное фильтрованное мультиплексирование с ортогональным частотным разделением каналов (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).
#
DigitalComm.StrucUFOFDM
— Type
Структура для 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
#
DigitalComm.initSCFDMA
— Method
Создает структуру 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).
#
DigitalComm.scfdmaSigGen
— Method
Создает сигнал 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).
#
DigitalComm.StrucSCFDMA
— Type
Структура для SCFDMA
--- Синтаксис
-
nFFT : размер FFT [Int]
-
nCP : размер циклического префикса [Int]
-
allocatedSubcarriers : вектор распределенных поднесущих [Array{Int}]
-
sizeDFT : размер прекодера DFT (классическое значение 12) [Int]
---
v 1.0 — Робин Герзаге (Robin Gerzaguet).
#
DigitalComm.scfdmaPostProcessing
— Method
Применяет последующую обработку для 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).
#
DigitalComm.scfdmaSigDecode
— Function
Применяет демодулятор 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).
#
DigitalComm.scfdmaSigDecode
— Function
Применяет демодулятор 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
#
DigitalComm.initWOLA
— Method
Создает и инициирует структуру формы волны 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).
#
DigitalComm.wolaSigGen
— Function
Применяет взвешенное перекрывающееся сложение с мультиплексированием с ортогональным частотным разделением каналов (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).
#
DigitalComm.StrucWOLA
— Type
Структура формы волны WOLA
--- Синтаксис
-
nFFT : размер FFT [Int]
-
nCP : размер CP [Int]
-
allocatedSubcarriers : вектор распределенных поднесущих [Array{Int}]
-
windowTx : используемое окно на стороне передатчика
-
windowRx : используемое окно на стороне приемника
---
v 1.0 — Робин Герзаге (Robin Gerzaguet).
#
DigitalComm.wolaSigDecode
— Function
Применяет демодулятор 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).