Ernte1893
Newbie level 3
- Joined
- Jul 16, 2014
- Messages
- 4
- Helped
- 0
- Reputation
- 0
- Reaction score
- 0
- Trophy points
- 1
- Activity points
- 43
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
to the adjacent frame.
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 ?
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
to the adjacent frame.
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;
%% Receiver
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');