错误使用 zeros Size 输入必须为整数。 出错 psk_2_4_8 (line 15) symbols_8psk = zeros(1,N/3);
时间: 2024-06-07 09:07:31 浏览: 15
这个错误提示是因为在使用 `zeros` 函数时,输入的 `N/3` 不是整数,导致无法创建一个长度为 `N/3` 的零向量。可能是因为 `N` 的值不是3的倍数,或者 `N` 的值不是整数。你可以检查一下输入的 `N` 的值,确保其是一个整数并且能够被3整除。如果 `N` 的值不是3的倍数,你可以考虑调整代码逻辑,使其能够适应任意长度的输入。
相关问题
matlab编写2psk、qpsk、8psk调制解调的蒙特卡罗仿真
以下是用 MATLAB 编写的 2PSK、QPSK 和 8PSK 调制解调的 Monte Carlo 仿真代码:
```matlab
clear all;
snr_dB = 0:2:12; % Signal to Noise Ratio (in dB)
N = 10^4; % Number of symbols in simulation
% Generating Gray code sequence for 2PSK modulation
seq_2psk = [0 1];
% Generating Gray code sequence for QPSK modulation
seq_qpsk = [0 1 3 2];
% Generating Gray code sequence for 8PSK modulation
seq_8psk = [0 1 3 2 6 7 5 4];
% Initializing error counters
err_2psk = zeros(1,length(snr_dB));
err_qpsk = zeros(1,length(snr_dB));
err_8psk = zeros(1,length(snr_dB));
for i = 1:length(snr_dB)
snr = 10^(snr_dB(i)/10); % Signal to Noise Ratio (in linear scale)
sigma = sqrt(1/(2*snr)); % Standard deviation of noise
% Generating random symbols for simulation
symbols_2psk = randi([0 1],1,N);
symbols_qpsk = randi([0 3],1,N/2);
symbols_8psk = randi([0 7],1,N/3);
% Modulation
mod_2psk = exp(1j*pi*seq_2psk(symbols_2psk+1));
mod_qpsk = exp(1j*pi/2*seq_qpsk(symbols_qpsk+1));
mod_8psk = exp(1j*pi/4*seq_8psk(symbols_8psk+1));
% Generating AWGN noise
noise = sigma*(randn(1,length(mod_2psk)) + 1j*randn(1,length(mod_2psk)));
% Adding noise to modulated signal
rx_2psk = mod_2psk + noise;
rx_qpsk = mod_qpsk + noise(1:length(mod_qpsk));
rx_8psk = mod_8psk + noise(1:length(mod_8psk));
% Demodulation
demod_2psk = real(rx_2psk) >= 0;
demod_qpsk = 2*(real(rx_qpsk) >= 0) + (imag(rx_qpsk) >= 0);
demod_8psk = 4*(real(rx_8psk) >= 0) + 2*(imag(rx_8psk) >= 0) + (real(rx_8psk) + imag(rx_8psk) >= 0);
% Counting errors
err_2psk(i) = sum(symbols_2psk ~= demod_2psk);
err_qpsk(i) = sum(symbols_qpsk ~= demod_qpsk);
err_8psk(i) = sum(symbols_8psk ~= demod_8psk);
end
% Plotting results
semilogy(snr_dB,err_2psk/N,'o-',snr_dB,err_qpsk/N,'*-',snr_dB,err_8psk/N,'+-');
legend('2PSK','QPSK','8PSK');
xlabel('SNR (dB)');
ylabel('Bit Error Rate');
title('Monte Carlo Simulation of PSK Modulation and Demodulation');
```
该代码会生成三条曲线,分别代表 2PSK、QPSK 和 8PSK 调制解调的比特误码率(BER)随信噪比(SNR)变化的情况。可以通过修改 `snr_dB` 和 `N` 的值来调整仿真的参数。
matlab编写2psk、qpsk、8psk的调制解调误码分析
2PSK调制解调:
以下是MATLAB代码示例:
% 生成2PSK调制所的随机比特串
N = 100; % 比特串长度
bits = rand([0 1],N,1);
% 将特串变为符号
symbols = 2*bits-1;
% 生成调制波形
fc = 100; % 载波频率
t = 0:1e-5:(N/2e6-1e-5); % 时间轴
carrier = cos(2*pi*fc*t);
modulated = symbols.'.*carrier;
% 生成加性高斯白噪声
EbNo = 10; % 信噪比
snr = EbNo + 10*log10(log2(length(symbols))); % SNR
noise = randn(1,length(modulated));
noise_power = 10^(-snr/10);
scaled_noise = sqrt(noise_power)*noise;
% 加入噪声得到接收信号
received = modulated + scaled_noise;
% 解调
demodulated = received.*carrier;
demodulated_symbols = sign(demodulated);
% 误码分析
errors = sum(bits~=((demodulated_symbols+1)/2));
BER = errors/N;
QPSK调制解调:
以下是MATLAB代码示例:
% 生成QPSK调制所需的随机比特串
N = 1000; % 比特串长度
bits = randi([0 1],N,1);
% 将比特串转换为符号
I = 2*bits(1:2:end)-1; % 一个符号的I部分
Q = 2*bits(2:2:end)-1; % 一个符号的Q部分
symbols = I + 1i*Q;
% 生成调制波形
fc = 100; % 载波频率
t = 0:1e-5:(N/4e6-1e-5); % 时间轴
carrier = cos(2*pi*fc*t) + 1i*sin(2*pi*fc*t);
modulated = symbols.'.*carrier;
% 生成加性高斯白噪声
EbNo = 10; % 信噪比
snr = EbNo + 10*log10(log2(length(symbols))); % SNR
noise = randn(1,length(modulated));
noise_power = 10^(-snr/10);
scaled_noise = sqrt(noise_power/2)*(noise+1i*noise);
% 加入噪声得到接收信号
received = modulated + scaled_noise;
% 解调
demodulated = received./carrier;
I_demod = real(demodulated);
Q_demod = imag(demodulated);
demodulated_symbols = zeros(N/2,1);
demodulated_symbols(1:2:end) = (I_demod>0)*2-1;
demodulated_symbols(2:2:end) = (Q_demod>0)*2-1;
% 误码分析
errors = sum(bits~=reshape(de2bi((demodulated_symbols+1)/2,2).',[],1));
BER = errors/N;
8PSK调制解调:
以下是MATLAB代码示例:
% 生成8PSK调制所需的随机比特串
N = 1000; % 比特串长度
bits = randi([0 1],N,1);
% 将比特串转换为符号
symbols = zeros(N/3,1);
for i = 1:N/3
symbols(i) = bi2de(bits((i-1)*3+1:i*3).','left-msb');
end
symbols = exp(1i*2*pi/8*(symbols-1));
% 生成调制波形
fc = 100; % 载波频率
t = 0:1e-5:(N/3e6-1e-5); % 时间轴
carrier = cos(2*pi*fc*t) + 1i*sin(2*pi*fc*t);
modulated = symbols.'.*carrier;
% 生成加性高斯白噪声
EbNo = 10; % 信噪比
snr = EbNo + 10*log10(log2(length(symbols))); % SNR
noise = randn(1,length(modulated));
noise_power = 10^(-snr/10);
scaled_noise = sqrt(noise_power/2)*(noise+1i*noise);
% 加入噪声得到接收信号
received = modulated + scaled_noise;
% 解调
demodulated = received./carrier;
angles = angle(demodulated);
angles(angles<0) = angles(angles<0)+2*pi;
demodulated_symbols = ceil(angles/(2*pi/8));
% 将符号转换为比特串
bits_received = de2bi(demodulated_symbols-1,3,'left-msb');
bits_received = reshape(bits_received.',[],1);
% 误码分析
errors = sum(bits~=bits_received);
BER = errors/N;
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)