你这样计算还是错的啊,y就1000个浮点,你咋想的从里头采出20000个点
时间: 2024-03-03 19:52:06 浏览: 17
非常抱歉,我的回答还是有误。采样点数 `N` 的计算公式应该是:
```
N = length(y) * fs / fc
```
其中,`length(y)` 表示 `y` 的长度,即原始信号的采样点数,`fs` 表示采样频率,`fc` 表示信号的频率,即载波频率。根据这个公式,可以计算出采样点数 `N`,然后从 `y` 中取出前 `N` 个元素作为采样后的信号 `r`。
修改后的代码如下:
```matlab
% 随机离散信号生成
x = randi([0 1], 1, 1000);
% 调制
fc = 10e6; % 载波频率
t = (0:length(x)-1) / fc;
s = 2*x-1; % BPSK调制
y = s .* cos(2*pi*fc*t);
% 采样
fs = 20*fc; % 采样频率
N = length(y) * fs / fc; % 采样点数
r = y(1:N);
% 瑞利衰落信道模拟
fc = 900e6; % 载波频率
v = 50; % 移动速度,单位:km/h
fd = v / 3.6 * fc / 3e8; % 多普勒频移
t = (0:length(r)-1) / fs;
h = sqrt(0.5) * (randn(size(r)) + 1i*randn(size(r)));
r = r .* exp(1i*2*pi*fd*t) .* h;
% 接收端采样
fs = 10*fc; % 采样频率
ts = 1/fs; % 采样时间间隔
r = r(1:length(r)*fs/(20*fc));
% 解调
s_hat = real(r) > 0;
% 比特误码率计算
ber = sum(x ~= s_hat) / length(x);
fprintf('比特误码率:%.4f\n', ber);
% 输出向量大小信息
disp(['r 大小:' num2str(size(r))])
disp(['t 大小:' num2str(size(t))])
disp(['h 大小:' num2str(size(h))])
```
这里使用了正确的采样点数计算公式,可以避免采样点数不足或超出的问题。希望这次的修改可以解决问题,如有其他问题,请随时与我联系。