How to solve the RESHAPE error ?

CODE:
%% *Nakagami-m Fading Channel*
clc;clear all;close all;
N = 10^6; % number of bits or symbols
Eb_N0_dB = (0:25); % multiple Eb/N0 values
nTx = 2;
nRx = 2;
m = 2;
for ii = 1:length(Eb_N0_dB)
% Transmitter
ip = rand(1,N)>0.5; % generating 0,1 with equal probability
s = 2*ip-1; % BPSK modulation 0 -> -1; 1 -> 0
sMod = kron(s,ones(nRx,1)); %
sMod = reshape(sMod,[nRx,nTx,N/nTx]); % grouping in [nRx,nTx,N/NTx ] matrix
h = nak_m(m,nRx,nTx); % Nakagami-m channel
n = 1/sqrt(2)*(randn(nRx,N/nTx) + 1j*randn(nRx,N/nTx)); % white gaussian noise, 0dB variance
% Channel and noise Noise addition
y = squeeze(sum(h.*sMod,2)) + 10^(-Eb_N0_dB(ii)/20)*n;
% Receiver
% Forming the Zero Forcing equalization matrix W = inv(H^H*H)*H^H
% H^H*H is of dimension [nTx x nTx]. In this case [2 x 2]
% Inverse of a [2x2] matrix [a b; c d] = 1/(ad-bc)[d -b;-c a]
hCof = zeros(2,2,N/nTx) ;
hCof(1,1,:) = sum(h(:,2,:).*conj(h(:,2,:)),1); % d term
hCof(2,2,:) = sum(h(:,1,:).*conj(h(:,1,:)),1); % a term
hCof(2,1,:) = -sum(h(:,2,:).*conj(h(:,1,:)),1); % c term
hCof(1,2,:) = -sum(h(:,1,:).*conj(h(:,2,:)),1); % b term
hDen = ((hCof(1,1,:).*hCof(2,2,:)) - (hCof(1,2,:).*hCof(2,1,:))); % ad-bc term
hDen = reshape(kron(reshape(hDen,1,N/nTx),ones(2,2)),2,2,N/nTx); % formatting for division
hInv = hCof./hDen; % inv(H^H*H)
hMod = reshape(conj(h),nRx,N); % H^H operation
yMod = kron(y,ones(1,2)); % formatting the received symbol for equalization
yMod = sum(hMod.*yMod,1); % H^H * y
yMod = kron(reshape(yMod,2,N/nTx),ones(1,2)); % formatting
yHat = sum(reshape(hInv,2,N).*yMod,1); % inv(H^H*H)*H^H*y
% receiver - hard decision decoding
ipHat = real(yHat)>0;
% counting the errors
nErr(ii) = size(find([ip- ipHat]),2);
end
simBer = nErr/N; % simulated ber
EbN0Lin = 10.^(Eb_N0_dB/10);
theoryBer_nRx1 = 0.5.*(1-1*(1+1./EbN0Lin).^(-0.5));
p = 1/2 - 1/2*(1+1./EbN0Lin).^(-1/2);
theoryBerMRC_nRx2 = p.^2.*(1+2*(1-p));
close all
figure
semilogy(Eb_N0_dB,theoryBer_nRx1,'bp-','LineWidth',2);
hold on
semilogy(Eb_N0_dB,theoryBerMRC_nRx2,'kd-','LineWidth',2);
semilogy(Eb_N0_dB,simBer,'mo-','LineWidth',2);
axis([0 25 10^-5 0.5])
grid on
legend('theory (nTx=1,nRx=1)', 'theory (nTx=1,nRx=2, MRC)', 'sim (nTx=2, nRx=2, ZF)');
xlabel('Average Eb/No,dB');
ylabel('Bit Error Rate');
title('BER for BPSK modulation with 2x2 MIMO and ZF equalizer (Nakagami-m Channel)');
ERROR:
Error using reshape
To RESHAPE the number of elements must not change.
hMod = reshape(conj(h),nRx,N); % H^H operation

8 件のコメント

Stephen23
Stephen23 2022 年 3 月 24 日
編集済み: Stephen23 2022 年 3 月 24 日
"How to solve the RESHAPE error"
Very simple: don't change the number of elements when reshaping.
Please show us the output of this command:
numel(conj(h))
Supratik Das
Supratik Das 2022 年 3 月 24 日
>> numel(conj(h))
ans =
4
Supratik Das
Supratik Das 2022 年 3 月 24 日
function for h = nak_m(m,nRx,nTx)
function H3=nak_m(m,nRx,nTx)
n=zeros(nRx,nTx);
for i=1:2*m
n=n+randn(nRx,nTx).^2;
end
n=n/(2*m);
phi=2*pi*rand(nRx,nTx);
H3=(n.^0.5).*cos(phi)+1j*(n.^0.5).*sin(phi);
Supratik Das
Supratik Das 2022 年 3 月 24 日
could you please help @Stephen
Stephen23
Stephen23 2022 年 3 月 24 日
編集済み: Stephen23 2022 年 3 月 24 日
hMod = reshape(conj(h),nRx,N);
% ^^^^^^^ 4 elements
% ^^^ = 2
% ^ = 1e6
How do you expect to RESHAPE four elements into 2e6 elements?
Four elements can be reshaped into 1x4, 2x2, or 4x1 (or many other with higher dimensions). 2x1e6 is not on that list.
What is the expected output? Do you actually expect to replicate elements, or interpolate, or something else? Is the size of CONJ(H) incorrect: do you expect it to have 2e6 elements?
Supratik Das
Supratik Das 2022 年 3 月 24 日
Yes i expected the size to be 2x1e6, but it came to be 4. How to solve this issue @Stephen. Please help!!!!
Supratik Das
Supratik Das 2022 年 3 月 24 日
Size of conj(h) to be 2x1e6
Stephen23
Stephen23 2022 年 3 月 24 日
Using the values provided in your original question and the function you provided in this comment:
nTx = 2;
nRx = 2;
m = 2;
h = nak_m(m,nRx,nTx) % please explain how h should have size 2x1e6.
h =
-0.4009 + 0.1983i -0.2413 + 1.1134i -1.0830 + 0.1033i 0.4586 - 0.6362i
function H3=nak_m(m,nRx,nTx)
n=zeros(nRx,nTx);
for i=1:2*m
n=n+randn(nRx,nTx).^2;
end
n=n/(2*m);
phi=2*pi*rand(nRx,nTx);
H3=(n.^0.5).*cos(phi)+1j*(n.^0.5).*sin(phi);
end

サインインしてコメントする。

回答 (0 件)

質問済み:

2022 年 3 月 24 日

コメント済み:

2022 年 3 月 24 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by