Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: PAPR для SC-FDMA
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
infinity
Требуется сделать модем с низким PAPR.
В ходе рассмотрения возможных вариантов реализации физики обратил внимание на sc-fdma.
Насколько я понимаю, из стандартов, использующих эту физику есть только lte.

По результатам моделирования оказалось, что значительное уменьшение PAPR происходит только при уменьшении количества активных поднесущих. Например, при общем количестве поднесущих = 1024 и активных 256 получим снижение PAPR с 12 до 6 Дб для расстановки поднесущих по ifdma.

Терять пропусную способность не хочется. Что же делать? Обратившись к стандарту lte увидим странную штуку:
sc-fdma используется в восходящем канале с максимальным индексом модуляции qam16. т.е. при максимальной полосе 20MHz получаем 80Mb/s, вычтем потери на синхронизацию, управление сетью, кодирование и др. избыточность. Останется что-то в районе 50-60 Mb/s чистой пропускной способности на пользовательский трафик. И эту же скорость заявляют как доступную для пользователя, но ведь в этом случае будут использоваться все поднесущие. Следовательно PAPR будет в районе 12дБ. А основной плюс sc-fdma - низкий papr. В чем же дело? wacko.gif

Есть фантастическое предположение, что поднесущих нужно расставлять хитрым образом, тогда и par снизится и все поднесущие можно будет задействовать, только как?

Гуру, объясните, как же получается низкий papr без потери пропускной способности?



EvgenyV
Не гуру, но кое-какие сумбурные мысли по этому поводу есть.

Мегаскорости 60-80Мб/с это теоретически максимально допустимые скорости в сферическом вакууме, о чем и трезвонят PR отделы. На практике стоит делить все раза в 2-3-4-.... Такие скорости достижимы (опять же в теории) если на одного юзера выделить все 20МГц спектра. Тогда papr действительно будет большим (12 дб). В LTE uplink на самом деле в один момент времени весь спектр в 20МГц делиться scheduler'ом на несколько юзеров. Параллельно вещает сразу несколько передатчиков, они все засинхронизированны по времени. Тогда количество поднесущих у одного юзера уменьшается, соответсвенно и уменьшается у него papr. Получается, что поток данных в еденицу времени в канале, скажем, 50Mbs и ширина спектра 20Мгц, но исходящий трафик от одного юзера гораздо меньше - 1/N.

Поправьте, если ошибаюсь. smile.gif
petrov
Цитата(infinity @ Sep 1 2010, 07:34) *
Есть фантастическое предположение, что поднесущих нужно расставлять хитрым образом, тогда и par снизится и все поднесущие можно будет задействовать, только как?


Используем все поднесущие, соответственно FFT и IFFT выкидываем, получается обычная модуляция с одной несущей без сглаживания с минимальным PAPR.
Если у вас FDMA нету то все эти LTEшные заморочки не нужны.
infinity
Цитата(EvgenyV @ Sep 1 2010, 09:23) *
Не гуру, но кое-какие сумбурные мысли по этому поводу есть.

Мегаскорости 60-80Мб/с это теоретически максимально допустимые скорости в сферическом вакууме, о чем и трезвонят PR отделы. На практике стоит делить все раза в 2-3-4-.... Такие скорости достижимы (опять же в теории) если на одного юзера выделить все 20МГц спектра. Тогда papr действительно будет большим (12 дб). В LTE uplink на самом деле в один момент времени весь спектр в 20МГц делиться scheduler'ом на несколько юзеров. Параллельно вещает сразу несколько передатчиков, они все засинхронизированны по времени. Тогда количество поднесущих у одного юзера уменьшается, соответсвенно и уменьшается у него papr. Получается, что поток данных в еденицу времени в канале, скажем, 50Mbs и ширина спектра 20Мгц, но исходящий трафик от одного юзера гораздо меньше - 1/N.

Поправьте, если ошибаюсь. smile.gif


Все это конечно красиво звучит, и такие мысли в воздухе роятся, только верить в них не хочется. Да и в стандарте нигде не встречал упоминания о том, что база дает ограничение на количество поднесущих одному юзеру. Опять же, lte позиционируют как большие абонентские скорости и маленькие задержки передачи трафика

Цитата(petrov @ Sep 1 2010, 10:34) *
Используем все поднесущие, соответственно FFT и IFFT выкидываем, получается обычная модуляция с одной несущей без сглаживания с минимальным PAPR.
Если у вас FDMA нету то все эти LTEшные заморочки не нужны.


Звучит красиво, вот только слишком много если: и синхронизация нужна практически мгновенная частотная и временная, да и ару с гестерезисом не приветствуется. Плюс очень хочется данные размазать по времени и частотам. А всё это на классике осилить тяжело. Пока что в качестве решения видиться только использование базиса (например fft) с пакетной передачей.

Да и про одну несущую вы немного не договариваете, на bpsk papr=6Дб возможно и увидим, но переходя на более высокие индексы модуляции увидим увеличение papr. А способы уменьшения всё те же, что и для ofdm'a. На настоящий момент не один из них меня не устраивает.

petrov
Цитата(infinity @ Sep 1 2010, 14:51) *
Звучит красиво, вот только слишком много если: и синхронизация нужна практически мгновенная частотная и временная, да и ару с гестерезисом не приветствуется. Плюс очень хочется данные размазать по времени и частотам. А всё это на классике осилить тяжело. Пока что в качестве решения видиться только использование базиса (например fft) с пакетной передачей.


Нет в LTE никаких чудес с точки зрения PAPR, если юзеру выделяются поднесущие идущие подряд по частоте, то во временной области будет обычная модуляция PSK, QAM с одной несущей и прямоугольными импульсами, если поднесущие выделяются произвольно то ни о каком малом PAPR речи уже не идёт. От сложностей с синхронизациями и АРУ никуда не уйти т. п., но все они решаемы. Если будете использовать модуляцию со многими поднесущими то от PAPR никуда не деться и он будет больше чем у модуляции с одной несущей.


Цитата(infinity @ Sep 1 2010, 14:51) *
Да и про одну несущую вы немного не договариваете, на bpsk papr=6Дб возможно и увидим, но переходя на более высокие индексы модуляции увидим увеличение papr. А способы уменьшения всё те же, что и для ofdm'a. На настоящий момент не один из них меня не устраивает.


Хотите использовать нелинейные усилители используйте модуляции без разрыва фазы. Хотите больше передавать в той же полосе придётся использовать амплитуду, а значит и PAPR будет расти и ничего не поделаешь.
EvgenyV
Цитата(infinity @ Sep 1 2010, 19:51) *
Да и в стандарте нигде не встречал упоминания о том, что база дает ограничение на количество поднесущих одному юзеру.

В uplink'е есть PUSCH канал, который так и называется Physical Uplink SHARED Channel. Он и делится между юзерами. Это 100%!
Я пару лет назад физический уровень LTE-Uplink на FPGA делал. Как раз SC-FDMA модуляцию. Я картинку прикрепил. По горизонтальной оси частота, вся область занятая квадратами и будет 20МГц. По вертикали - время. Там sub-frame это один SC-FDMA символ.

Цитата(infinity @ Sep 1 2010, 19:51) *
Звучит красиво, вот только слишком много если: и синхронизация нужна практически мгновенная частотная и временная, да и ару с гестерезисом не приветствуется.


Насчет синхронизации. Насколько помнится, юзер (UE -User Equipment) сначала вступает в сеть, синхронизируется с базой (eNodeB) и так и находится в синхронизированном состоянии (по времени). Вообще все UE, подключенные к одной eNB засинхронизированны по времени между собой. У каждого UE свой schedule того, когда надо передавать данные и на каких поднесущих. Поэтому когда одновременно вещают несколько UE каждый в своем диапазоне частот внутри этих 20МГц, не происходит коллизий и МСИ. Там какая-то мудрая система scheduling'а.


Нажмите для просмотра прикрепленного файла
infinity
Цитата(EvgenyV @ Sep 1 2010, 15:32) *
В uplink'е есть PUSCH канал, который так и называется Physical Uplink SHARED Channel. Он и делится между юзерами. Это 100%!
Я пару лет назад физический уровень LTE-Uplink на FPGA делал. Как раз SC-FDMA модуляцию. Я картинку прикрепил. По горизонтальной оси частота, вся область занятая квадратами и будет 20МГц. По вертикали - время. Там sub-frame это один SC-FDMA символ.


Честно говоря, картинка все еще больше запутала. Попробую перефразировать свой вопрос. Низкий papr -это как минимум поделитить все поднесущие на 4 абонентов, например так:

Нажмите для просмотра прикрепленного файла

В lte утверждается, что papr низкий. Значит ли это, что один абонент не может запросить на передачу трафика больше 1/4 от общего количества поднесущих?
EvgenyV
Согласен, картинка запутанная. Я сам в нее долго вникал. Извиняюсь. rolleyes.gif Всего лишь хотел показать, что канал делится между абонентами.

Цитата(infinity @ Sep 2 2010, 12:20) *
Значит ли это, что один абонент не может запросить на передачу трафика больше 1/4 от общего количества поднесущих?


Теоретически абонент может запросить больше чем 1/4. По-крайней мере в настройках передатчика, который я делал, можно было выделить все поднесущие на одного юзера. Как на практике распределяются ресурсы, я увы не знаю. Это где-то на более высоком уровне делается, не на физическом. Я в этом не разбирался. Возни и без этого хватало )

Возможно вы правы, что низкий papr и достигается тем, что юзеру не дают более чем 1/4 ресурсов за раз.
petrov
Цитата(EvgenyV @ Sep 2 2010, 08:29) *
Возможно вы правы, что низкий papr и достигается тем, что юзеру не дают более чем 1/4 ресурсов за раз.


Низкий PAPR достигается когда юзерам выделяются поднесущие как на рисунке а), хоть одну поднесущую хоть все, PAPR будет одинаково низким.
EvgenyV
Цитата(petrov @ Sep 2 2010, 17:19) *
Низкий PAPR достигается когда юзерам выделяются поднесущие как на рисунке а), хоть одну поднесущую хоть все, PAPR будет одинаково низким.


Хмм. Действительно так. Похоже я заблуждался :)
Посимулировал в Матлабе. PAPR не сильно меняется от количества несущих.
У меня также получилось, что и при а), и при b) PAPR не сильно отличается.

Вот моя симуляция. Делал по памяти, может где ошибся. Поправьте если что.
CODE

close all;
N = 120; % number of carriers
K = 1; %
S = 0; % start
h = modem.qammod(16); % create an object with default properties
x = randint(N, 1, 16); % generate input bits
y = modulate(h, x); % modulate x
% scatterplot(y)

buf1 = zeros(1536, 1);
buf1(169+S:168+S+N) = y; % subcarrier mapping
plot(abs(buf1));
dftout = fft(y);
plot(abs(dftout));

buf = zeros(4096, 1);
buf(1281+S:K:1280+S+N*K) = dftout; % subcarrier mapping
figure; plot(abs(buf));

sc_fdma = ifft(buf);
figure; plot(abs(sc_fdma));

papr = 20*log10(max(abs(sc_fdma))/mean(abs(sc_fdma)))
petrov
Чтобы PAPR считать нужно квадрат модуля брать а не просто модуль, ну и статистика нужна, одна реализация случайных данных может сама по себе низкий PAPR иметь.
infinity
Цитата(EvgenyV @ Sep 2 2010, 15:13) *
Хмм. Действительно так. Похоже я заблуждался smile.gif
Посимулировал в Матлабе. PAPR не сильно меняется от количества несущих.
У меня также получилось, что и при а), и при cool.gif PAPR не сильно отличается.


Не понятно, как это у вас получилось обнаружить, что вы заблуждались. unsure.gif Беру ваш код и вижу другие результаты.
Когда-то давно стянул из сети небольшой примерчик, немного его модернизировал:

Код
%function paprSCFDMA()

dataType = 'Q-PSK'; % Modulation format.
totalSubcarriers = 1024; % Number of total subcarriers.
numSymbols = 64; % Data block size.
Q = totalSubcarriers/numSymbols; % Bandwidth spreading factor of IFDMA.
Q_tilda = 31; % Bandwidth spreading factor of DFDMA. Q_tilda < Q.
subcarrierMapping = 'IFDMA'; % Subcarrier mapping scheme.
%subcarrierMapping = 'LFDMA'; % Subcarrier mapping scheme.
%subcarrierMapping = 'DFDMA'; % Subcarrier mapping scheme.

pulseShaping = 1; % Whether to do pulse shaping or not.
filterType = 'rc'; % Type of pulse shaping filter.
rolloffFactor = 0.0999999999; %Rolloff factor for the raised-cosine filter.
                              %To prevent divide-by-zero, for example, use 0.099999999 instead of 0.1.
Fs = 5e6; % System bandwidth.
Ts = 1/Fs; % System sampling rate.
Nos = 4; % Oversampling factor.
if filterType == 'rc' % Raised-cosine filter.
    psFilter = rcPulse(Ts, Nos, rolloffFactor);
elseif filterType == 'rr' % Root raised-cosine filter.
    psFilter = rrcPulse(Ts, Nos, rolloffFactor);
end
numRuns = 1e4; % Number of iterations.

papr = zeros(1,numRuns); % Initialize the PAPR results.

for n = 1:numRuns,
    % Generate random data.
    if dataType == 'Q-PSK'
        tmp0 = round(rand(numSymbols,2));
        tmp0 = tmp0*2 - 1;
        tmp1 = round(rand(numSymbols,2));
        tmp1 = tmp1*2 - 1;
        tmp2 = round(rand(numSymbols,2));
        tmp2 = tmp2*2 - 1;        
        tmp3 = round(rand(numSymbols,2));
        tmp3 = tmp3*2 - 1;        
        data0 = (tmp0(:,1) + j*tmp0(:,2))/sqrt(2);
        data1 = (tmp1(:,1) + j*tmp1(:,2))/sqrt(2);
        data2 = (tmp2(:,1) + j*tmp2(:,2))/sqrt(2);
        data3 = (tmp3(:,1) + j*tmp3(:,2))/sqrt(2);
    elseif dataType == '16QAM'
        dataSet = [-3+3i -1+3i 1+3i 3+3i ...
            -3+i -1+i 1+i 3+i ...
            -3-i -1-i 1-i 3-i ...
            -3-3i -1-3i 1-3i 3-3i];
        dataSet = dataSet / sqrt(mean(abs(dataSet).^2));
        tmp = ceil(rand(numSymbols,1)*16);
        for k = 1:numSymbols,
            if tmp(k) == 0
                tmp(k) = 1;
            end
            data0(k) = dataSet(tmp(k));
        end
        data0 = data0.';
    end

    % Convert data to frequency domain.
    X0 = fft(data0);                         % 1 абонент
    X1 = fft(data1);                         % 2 абонент
    X2 = fft(data2);                         % 3 абонент
    X3 = fft(data3);                         % 4 абонент

    % Initialize the subcarriers.
    Y = zeros(totalSubcarriers,1);    
    
    % Subcarrier mapping.
    if subcarrierMapping == 'IFDMA'
        Y(1:Q:totalSubcarriers) = X0;        
%        Y(2:Q:totalSubcarriers) = X1;
%        Y(3:Q:totalSubcarriers) = X2;
%        Y(4:Q:totalSubcarriers) = X3;
    elseif subcarrierMapping == 'LFDMA'
        Y(1:numSymbols) = X0;
    elseif subcarrierMapping == 'DFDMA'
        Y(1:Q_tilda:Q_tilda*numSymbols) = X0;
    end

    % Convert data back to time domain.
    y = ifft(Y);

    % Perform pulse shaping.
    if pulseShaping == 1
        % Up-sample the symbols.
        y_oversampled(1:Nos:Nos*totalSubcarriers) = y;
        % Perform filtering.
        y_result = filter(psFilter, 1, y_oversampled);
    else
        y_result = y;
    end
    
    % Calculate the PAPR.
    papr(n) = 10*log10(max(abs(y_result).^2) / mean(abs(y_result).^2));
end

% Plot CCDF.
[N,X] = hist(papr, 100);
semilogy(X,1-cumsum(N)/max(cumsum(N)),'b')

% Save data.
save paprSCFDMA


С параметрами: FFT=1024, DFT=64. На картинке слева papr для случая 4 DFT за время одного FFT от одного абонента. На картинке справа papr для 1 DFT за время одного FFT от одного абонента. Т.е. видим, что количество использованных поднесущих одним абонентом очень даже влияет на papr
Нажмите для просмотра прикрепленного файла

Если вас не зартруднит, не могли бы вы немного разжевать свою картинку формирования, или же дать ссылку, где можно разобраться.

EvgenyV
Цитата(infinity @ Sep 6 2010, 17:43) *
Не понятно, как это у вас получилось обнаружить, что вы заблуждались. :unsure: Беру ваш код и вижу другие результаты.

Аа. Кажется понял.

Когда я симулировал свой код в режиме LFDMA (рис. а), то у меня papr не зависел от количества несущих. И в вашем примере в режиме LFDMA, если менять numSymbols, то papr тоже не меняется.

А когда симулировал в режиме IFDMA (рис. b), то смотрел papr только для 1 юзера (1DFT). Поэтому papr у меня не менялся.

infinity
Цитата(EvgenyV @ Sep 6 2010, 17:31) *
Аа. Кажется понял.

Когда я симулировал свой код в режиме LFDMA (рис. а), то у меня papr не зависел от количества несущих. И в вашем примере в режиме LFDMA, если менять numSymbols, то papr тоже не меняется.

А когда симулировал в режиме IFDMA (рис. cool.gif, то смотрел papr только для 1 юзера (1DFT). Поэтому papr у меня не менялся.


Без разницы, какая схема формирования: LFDMA, IFDMA. Результат один - при условии, что один абонент формирует данные на более чем одно DFT за время одного FFT, происходит деградация papr.

По поводу моего примера numSymbols - это размер DFT. И увеличение этого параметра очень даже влияет на papr:
Нажмите для просмотра прикрепленного файла

Неужели на форуме нет человека, который если и не занимался подобными проблемами, но по багажу знаний смог бы грамотно объяснить по поводу papr для sc-fdma и lte в частности. crying.gif
petrov
Наврал выше. Добавление нулей в частотной области это интерполяция синком во временной. Импульсы будут сглажены обрезанным синком.

plot(real(ifft([fft([1 zeros(1,16-1) 1 zeros(1,16-1)]) zeros(1,512-32)])))

Чем больше юзеру выделяется поднесущих тем ближе его спектр к прямоугольному, во временной области импульс синка длиннее, как следствие PAPR будет увеличиваться.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.