# Filter bank Multicarrier FBMC with QPSK Modulation instead of QAM

Status
Not open for further replies.

#### Ernte1893

##### Newbie level 3 Hey,

I am trying to implement a polyphase filter bank for a multicarrier transceiver. I want to
realize it with QPSK modulation. I managed to get it work with QAM with a input structure
for the IFFT as followed:
$\begin{bmatrix} 1 & i & -1 & -i \\ -i & 1 & i & -1 & \end{bmatrix}$
It means that each subcarrier is orthogonal to the adjacent one and each frame symbol is orthogonal
For the QPSK it is just sufficient that adjacent frame is adjacent to each other (WHY??):

Here is my code for the working version, where I put each subsequent frame has a phase difference of $\pi / 2$.
I can't realize that, because the input will be random. Do you have any idea for that ?

Code:
% FBMC Modulator
% Frame, Number of "FBMC symbols"
clear all;
close all;
clc;
N=128;
Frame=10;

% Prototype Filter For FBMC
M=N;% number of sub-channels
K=4; % overlapping factor
lp=K*M;% prototype filter length
yyy=[1 sqrt(2)/2];% coefficient of filter when K=2
s=2*pi/(K*M);
p1 = zeros(1,lp);
p2 = zeros(1,lp);
p3 = zeros(1,lp);
for  r = 1:lp
p3(r)=yyy(1,1)-2*yyy(1,2)*cos(r*s); % prototype filter equation K=2
end
[v2,~]=max(p3);
p3 = p3/v2;
h = p3;

figure(1);
plot(h);
title ('Filter Impulse response');

%% Transmitter
% Initialization for transmission
y=zeros(1,4*N+(Frame-1)*N);
x=zeros(N,Frame+6);
s = zeros(N,Frame);
% s(:,1) = sign(randn(N,1)) + 1i.* sign(randn(N,1));

for ttx = 1:Frame
%     % OQPSK Modulator: adjacent subcarriers are orthogonal to each other
%     rxI = sign(randn(N/2,1));
%     rxQ = 1i.*sign(randn(N/2,1));
%     s(1:2:end,ttx) = rxI(1:end) + [1i ; rxQ(1:end-1)];
%     s(2:2:end,ttx) = rxI(1:end) + rxQ(1:end);
%     % adjacent frames are orthogonal to each other
%     s(:,ttx) = exp(1i.*(ttx-1).*pi./2).*s(:,1);
%     %  QPSK
s(:,ttx) = (sign(randn(N,1)) +  1i.* sign(randn(N,1)));

xtime=ifft(s(:,ttx)); % [ 0 0 0 x1 x2 .. x10 0 0 0 ]
x(:,3+ttx)=xtime./sqrt(N);%4:Frame+3
end
rxx = reshape(x,1,[]);
for ntrametx=1:(Frame+3)
xf = rxx(1,1+(ntrametx-1)*N:(3+ntrametx)*N);
txmult = xf .* h;
y(1+(ntrametx-1)*N:ntrametx*N) = txmult(1:N)+txmult((N+1):(2*N))+txmult((2*N+1):(3*N))+txmult((3*N+1):(4*N));
end

signal = y;

rx=zeros(N,Frame);
hrx = [fliplr(h(1:N)) fliplr(h(1+N:2*N)) fliplr(h(1+2*N:3*N)) fliplr(h(1+3*N:4*N)) ];
sdemod = zeros(N,Frame);
for RxN=1:(Frame-1)
% Transmitted signal
rxmult = signal(1+(RxN-1)*N:(3+RxN)*N) .* hrx ;
sestn=fft(rxmult(1:N)+rxmult((N+1):(2*N))+rxmult((2*N+1):(3*N))+rxmult((3*N+1):(4*N)));

% QPSK equalizing
[v,i] = max(real(sestn));
sest=sestn/v;%/0.6863;

sdemod(:,RxN) = sest;
end

figure(2)
plot(s,'or');
hold on
plot(sdemod(:,2:end-1),'xk');
title('FBMC QPSK, o transmitted, x received');

Status
Not open for further replies.