How to resolve reshape error
3 views (last 30 days)
Show older comments
Hi There,
I previously asked a question about this piece of code with QPSK however, when using 64-QAM i get an error with the reshape value. The code is as follows:
N = 10e6;
M = 64;
k = log2(M);
bit_stream = randi([0,1],[1,N]);
tx_bits = reshape(bit_stream,k,[]);
tx_symbols = sum(tx_bits.*pow2(k-1:-1:0).',1);
qammod_sig = qammod(tx_symbols,M);
snr = -10:10;
Nsnr = numel(snr);
error_rate = zeros(1,Nsnr);
n_symb = N/k;
for ii = 1:Nsnr
rx_sig = awgn(qammod_sig,snr(ii));
qamdemod_symb = qamdemod(rx_sig,M);
error_rate(ii) = nnz(tx_symbols ~= qamdemod_symb) / n_symb;
end
scatterplot(qammod_sig)
figure()
semilogy(snr,error_rate(1,:),'.-')
xlabel ('SNR [dB]')
ylabel('BER')
The error which I am receiving is this:
Error using reshape
Product of known dimensions, 6, not divisible into total
number of elements, 10000000.
Error in coursework_task_1_qam (line 5)
tx_bits = reshape(bit_stream,k,[]);
2 Comments
Dyuman Joshi
on 27 Mar 2024
bit_stream is 1x10e6. You are trying to reshape it into an array with 6 rows and 10e6/6 columns, which is not possible as number of columns must be natural numbers.
What is the idea behind reshaping bit_stream? What is the operation you are trying to perform?
Accepted Answer
Voss
on 27 Mar 2024
Edited: Voss
on 27 Mar 2024
Pick an N that's a multiple of k, or adjust N to be a multiple of k in the code, or append enough bits onto the end of the bit stream to make it a multiple of k in length before reshaping.
N = 1e6; % pick an N that's a multiple of k
M = 64;
k = log2(M);
N = ceil(N/k)*k; % or make N the first multiple of k >= N
bit_stream = randi([0,1],[1,N]);
m = mod(N,k);
if m
bit_stream(end+1:end+k-m) = 0; % or append some zeros to the bit stream as necessary
end
tx_bits = reshape(bit_stream,k,[]);
tx_symbols = sum(tx_bits.*pow2(k-1:-1:0).',1);
qammod_sig = qammod(tx_symbols,M);
snr = -10:10;
Nsnr = numel(snr);
error_rate = zeros(1,Nsnr);
n_symb = N/k;
for ii = 1:Nsnr
rx_sig = awgn(qammod_sig,snr(ii));
qamdemod_symb = qamdemod(rx_sig,M);
error_rate(ii) = nnz(tx_symbols ~= qamdemod_symb) / n_symb;
end
scatterplot(qammod_sig)
figure()
semilogy(snr,error_rate(1,:),'.-')
xlabel ('SNR [dB]')
ylabel('BER')
More Answers (0)
See Also
Categories
Find more on QPSK in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!