How to resolve reshape error
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Liam
el 27 de Mzo. de 2024
Comentada: Dyuman Joshi
el 2 de Abr. de 2024
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 comentarios
Dyuman Joshi
el 27 de Mzo. de 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?
Respuesta aceptada
Voss
el 27 de Mzo. de 2024
Editada: Voss
el 27 de Mzo. de 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')
Más respuestas (0)
Ver también
Categorías
Más información sobre QPSK en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!