错误使用 + 矩阵维度必须一致。 出错 psk_2_4_8 (line 11) s = A*cos(2*pi*fc*t + pi*(data-0.5));
时间: 2024-01-17 14:59:29 浏览: 29
这个错误通常是因为矩阵的维度不匹配导致的。在你的代码中,变量 `t` 和 `data` 的维度可能不匹配,导致计算 `pi*(data-0.5)` 时出现了维度不一致的错误。请确保变量 `t` 和 `data` 都是相同长度的向量或矩阵,以便进行正确的计算。你可以使用 `size()` 函数检查 `t` 和 `data` 的维度是否一致。另外,你还需要检查变量 `A` 和 `fc` 是否具有正确的值。
相关问题
错误使用 zeros Size 输入必须为整数。 出错 psk_2_4_8 (line 15) symbols_8psk = zeros(1,N/3);
这个错误提示是因为在使用 `zeros` 函数时,输入的 `N/3` 不是整数,导致无法创建一个长度为 `N/3` 的零向量。可能是因为 `N` 的值不是3的倍数,或者 `N` 的值不是整数。你可以检查一下输入的 `N` 的值,确保其是一个整数并且能够被3整除。如果 `N` 的值不是3的倍数,你可以考虑调整代码逻辑,使其能够适应任意长度的输入。
matlab编写2psk、qpsk、8psk调制解调的蒙特卡罗仿真,并将误码曲线绘制在同一个图中,并且代码中矩阵维度必须一致
以下是一个简单的 MATLAB 代码示例,用于执行2PSK、QPSK和8PSK的调制和解调蒙特卡罗仿真,并将误码率曲线绘制在同一图中。请注意,此示例代码中的参数和常量值可能需要根据您的特定需求进行修改。在运行此代码之前,请确保您已经具备了 MATLAB 环境和相关的通信工具箱。
```matlab
clear all;
close all;
clc;
%% 参数设置
Eb = 1; % 符号能量
SNRdB = 0:2:16; % 信噪比范围
N = 100000; % 发送符号的个数
M = [2 4 8]; % 调制阶数
%% 调制信号生成
for ii = 1:length(M) % 对于每种调制方式
switch M(ii)
case 2 % 2PSK
a = [1 -1];
s = a(randi([0 1],1,N)+1);
modulated = s;
case 4 % QPSK
a = [1 -1];
s = a(randi([0 1],2,N)*2+1) + 1j*a(randi([0 1],2,N)*2+1);
s = s/sqrt(2);
modulated = s;
case 8 % 8PSK
a = [1 -1];
s = a(randi([0 1],3,N)*2+1) + 1j*a(randi([0 1],3,N)*2+1);
s = s/sqrt(2);
modulated = s;
end
% 规范化信号能量
modulated = modulated./sqrt(Eb);
%% 加噪声并解调
for jj = 1:length(SNRdB) % 对于每个信噪比
% 信噪比转化为线性比
SNR = 10^(SNRdB(jj)/10);
N0 = Eb/SNR;
% 生成噪声并添加到信号中
noise = sqrt(N0/2)*(randn(size(modulated)) + 1j*randn(size(modulated)));
received = modulated + noise;
% 解调信号
switch M(ii)
case 2 % 2PSK
r = real(received);
demodulated = sign(r);
demodulated(demodulated == -1) = 0;
case 4 % QPSK
r = real(received);
i = imag(received);
demodulated = zeros(2,N);
demodulated(1,:) = sign(r);
demodulated(1,demodulated(1,:) == -1) = 0;
demodulated(2,:) = sign(i);
demodulated(2,demodulated(2,:) == -1) = 0;
demodulated = demodulated(:).';
demodulated = bi2de(reshape(demodulated,2,[]).','left-msb');
case 8 % 8PSK
r = real(received);
i = imag(received);
demodulated = zeros(3,N);
demodulated(1,:) = sign(r);
demodulated(1,demodulated(1,:) == -1) = 0;
demodulated(2,:) = sign(i);
demodulated(2,demodulated(2,:) == -1) = 0;
r2 = r - demodulated(1,:)*sqrt(2)/2;
i2 = i - demodulated(2,:)*sqrt(2)/2;
demodulated(3,:) = sign(r2).*sign(i2);
demodulated(3,demodulated(3,:) == -1) = 0;
demodulated = demodulated(:).';
demodulated = bi2de(reshape(demodulated,3,[]).','left-msb');
end
%% 计算误码率
errors = sum(modulated ~= demodulated);
ber(ii,jj) = errors/N;
end
end
%% 绘制误码率曲线
figure;
semilogy(SNRdB,ber(1,:),'-bo',SNRdB,ber(2,:),'-rx',SNRdB,ber(3,:),'-gs','LineWidth',1.5);
grid on;
xlabel('信噪比 (dB)');
ylabel('误码率');
title('2PSK、QPSK和8PSK的误码率曲线比较');
legend('2PSK','QPSK','8PSK','Location','best');
```
在此示例代码中,我们首先定义了一些参数和常量,例如符号能量 Eb、信噪比范围 SNRdB、发送符号数量 N 和调制阶数 M。然后,我们根据每种调制方式生成调制信号,并进行规范化。接下来,我们在每个信噪比下添加噪声并解调信号,并计算误码率。最后,我们绘制了2PSK、QPSK和8PSK的误码率曲线。
请注意,此示例代码中的矩阵维度是一致的,因为我们使用了相同的 N 和 M 变量来控制发送符号数量和调制阶数。如果您需要修改代码以适应不同的矩阵维度,请相应地更改这些变量。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.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)