错误使用 zeros Size 输入必须为整数。 出错 psk_2_4_8 (line 15) symbols_8psk = zeros(1,N/3);
时间: 2024-06-07 22:07:31 浏览: 368
这个错误提示是因为在使用 `zeros` 函数时,输入的 `N/3` 不是整数,导致无法创建一个长度为 `N/3` 的零向量。可能是因为 `N` 的值不是3的倍数,或者 `N` 的值不是整数。你可以检查一下输入的 `N` 的值,确保其是一个整数并且能够被3整除。如果 `N` 的值不是3的倍数,你可以考虑调整代码逻辑,使其能够适应任意长度的输入。
相关问题
matlab实现4-PSK、16-PSK仿真,并与8-PSK比较
好的,我可以回答这个问题。首先,我们需要了解什么是PSK调制。PSK调制是一种数字调制技术,它将数字信息转换为相位调制信号。在PSK调制中,信息被编码为数字位,然后将这些数字位映射为不同的相位状态。
在4-PSK中,我们有4个相位状态,即0°、90°、180°和270°。在16-PSK中,我们有16个相位状态,即0°、22.5°、45°、67.5°、90°、112.5°、135°、157.5°、180°、202.5°、225°、247.5°、270°、292.5°、315°和337.5°。在8-PSK中,我们有8个相位状态,即0°、45°、90°、135°、180°、225°、270°和315°。
现在,我们来看看如何使用MATLAB实现PSK调制。
首先,我们需要生成随机的数字位序列。
```
M = 4; % 4-PSK
N = 1000; % Number of symbols
data = randi([0 M-1],N,1);
```
然后,我们需要将数字位映射为相位状态。在这里,我们使用gray2bin函数将格雷码转换为二进制码,再将二进制码转换为相位状态。
```
bin = gray2bin(data,'psk',M);
phase = 2*pi/M*bin2dec(bin);
```
接下来,我们生成载波信号。
```
fc = 100; % Carrier frequency
fs = 1000; % Sampling frequency
t = 0:1/fs:(N-1)/fs;
carrier = sqrt(2)*cos(2*pi*fc*t);
```
然后,我们将相位调制信号与载波信号相乘,得到调制信号。
```
modulated = real(exp(1j*phase).*carrier');
```
最后,我们可以将调制信号传输并进行解调,计算误码率。
```
% Noise variance
Eb = mean(abs(modulated).^2);
SNR = 0:2:16;
N0 = Eb./10.^(SNR/10);
variance = N0/2;
% Demodulation
demodulated = zeros(N,length(SNR));
for i=1:length(SNR)
noise = sqrt(variance(i))*randn(size(modulated));
received = modulated + noise';
for j=1:N
[~,index] = min(abs(received(j)-exp(1j*[0:M-1]*2*pi/M)));
demodulated(j,i) = index-1;
end
end
% Bit error rate
ber = zeros(1,length(SNR));
for i=1:length(SNR)
ber(i) = sum(demodulated(:,i)~=data)/N;
end
% Plot
semilogy(SNR,ber,'-o');
xlabel('SNR (dB)');
ylabel('Bit error rate');
legend('4-PSK','8-PSK','16-PSK');
```
这样,我们就可以实现4-PSK、8-PSK和16-PSK的仿真,并比较它们的误码率。
用matlab实现4-PSK、16-PSK仿真,并与8-PSK比较
好的,我们可以使用MATLAB来实现4-PSK、8-PSK和16-PSK的仿真,并比较它们的误码率。下面是具体的实现步骤。
首先,我们需要生成随机的数字位序列。
```
M = 4; % 4-PSK
N = 1000; % Number of symbols
data = randi([0 M-1],N,1);
```
然后,我们需要将数字位映射为相位状态。在这里,我们使用gray2bin函数将格雷码转换为二进制码,再将二进制码转换为相位状态。
```
bin = gray2bin(data,'psk',M);
phase = 2*pi/M*bin2dec(bin);
```
接下来,我们生成载波信号。
```
fc = 100; % Carrier frequency
fs = 1000; % Sampling frequency
t = 0:1/fs:(N-1)/fs;
carrier = sqrt(2)*cos(2*pi*fc*t);
```
然后,我们将相位调制信号与载波信号相乘,得到调制信号。
```
modulated = real(exp(1j*phase).*carrier');
```
最后,我们可以将调制信号传输并进行解调,计算误码率。
```
% Noise variance
Eb = mean(abs(modulated).^2);
SNR = 0:2:16;
N0 = Eb./10.^(SNR/10);
variance = N0/2;
% Demodulation
demodulated = zeros(N,length(SNR));
for i=1:length(SNR)
noise = sqrt(variance(i))*randn(size(modulated));
received = modulated + noise';
for j=1:N
[~,index] = min(abs(received(j)-exp(1j*[0:M-1]*2*pi/M)));
demodulated(j,i) = index-1;
end
end
% Bit error rate
ber = zeros(1,length(SNR));
for i=1:length(SNR)
ber(i) = sum(demodulated(:,i)~=data)/N;
end
% Plot
semilogy(SNR,ber,'-o');
xlabel('SNR (dB)');
ylabel('Bit error rate');
legend('4-PSK','8-PSK','16-PSK');
```
这样,我们就可以实现4-PSK、8-PSK和16-PSK的仿真,并比较它们的误码率。
阅读全文