clear all; M = 4; N = 100000; TxAntennas = 2; RxAntennas = 1; signal = randi([0, M-1], TxAntennas, N/2); SNR = 0:15; mimo21_BER = zeros(size(SNR)); for i = 1:length(SNR) mimo21_modulation = qammod(signal, M); symbol_energy = 1;%單一功率 signal_power = TxAntennas * symbol_energy;%總功率 noise_power = signal_power / (10^(SNR(i)/10)); noise = sqrt(noise_power/2) * (randn(TxAntennas, length(mimo21_modulation)) + 1i * randn(TxAntennas, length(mimo21_modulation))); noisy_signal = mimo21_modulation + noise; mimo21_demodulation = qamdemod(noisy_signal, M); mimo21_BER(i) = sum(sum(signal ~= mimo21_demodulation))/length(signal); end semilogy(SNR, mimo21_BER, 'r-x');我這樣的matlab模擬有錯誤嗎
时间: 2024-01-21 10:03:26 浏览: 80
在这段Matlab代码中,我看到以下几个问题:
1. 在计算信号功率时,使用了单个符号的能量,但没有进行平均。应该将每个符号的能量除以信号点数,即 `symbol_energy/TxAntennas`。
2. 在添加噪声时,使用了 `mimo21_modulation`,但应使用 `noisy_signal`。
3. 在计算误码率时,除数应该是 `length(signal(:))`,而不是 `length(signal)`。
下面是修改后的代码:
```
clear all;
M = 4;
N = 100000;
TxAntennas = 2;
RxAntennas = 1;
signal = randi([0, M-1], TxAntennas, N/2);
SNR = 0:15;
mimo21_BER = zeros(size(SNR));
for i = 1:length(SNR)
mimo21_modulation = qammod(signal, M);
symbol_energy = 1; %单个符号能量
signal_power = TxAntennas * symbol_energy / 2; %平均功率,除以2是因为有实部和虚部
noise_power = signal_power / (10^(SNR(i)/10));
noise = sqrt(noise_power/2) * (randn(TxAntennas, length(mimo21_modulation)) + 1i * randn(TxAntennas, length(mimo21_modulation)));
noisy_signal = mimo21_modulation + noise;
mimo21_demodulation = qamdemod(noisy_signal, M);
mimo21_BER(i) = sum(sum(signal ~= mimo21_demodulation))/length(signal(:)); %误码率
end
semilogy(SNR, mimo21_BER, 'r-x');
```
希望对你有所帮助!
阅读全文