错误使用 reshape 元素数不能更改。请使用 [] 作为大小输入之 一,以自动计算该维度的适当大小。 出错 modulatedemodulate (第 22 行) y1 = reshape(dem,40,100);
时间: 2024-03-05 22:52:45 浏览: 174
这个错误提示是因为 `dem` 的长度和 `40*100` 不匹配,不能用 `reshape` 函数进行改变。你可以使用 `reshape` 函数的第二个参数来指定输出矩阵的大小,以自动计算该维度的适当大小,如下所示:
```matlab
y1 = reshape(dem,[],100);
```
这样会自动计算输出矩阵的行数,使得 `y1` 的长度与 `dem` 相同,同时满足矩阵的列数为 100。修改后的代码如下:
```matlab
fs = 1000;
fc = 50;
f_stop = 200;
dt = 1/fs;
t = 0 : dt : 10-dt;
df = fs/length(t);
f = -fs/2 : df : fs/2-df;
s0 = ones(1,40);
rand('seed',1234);
msg = randi([0,1],100,1);
msg1 = msg*ones(1, fs/10);
msg2 = reshape(msg1',1, length(t));
sam = (msg2).*cos(2*pi*fc*t);
r1 = awgn(sam, 15, 'measured');
y = r1.* cos(2*pi*fc*t);
Y = fftshift(fft(y))/fs;
n_stop = round(f_stop/df);
Hlow = zeros(size(f));
Hlow(abs(f)<=n_stop) = 1;
DEM = Y.*Hlow;
dem = ifft(ifftshift(DEM))*fs;
y1 = reshape(dem,[],100);
r00 = s0*y1;
j = find(r00>20);
decmsg = zeros(1,100);
decmsg(j) = 1;
decmsg = decmsg.';
decmsg1 = decmsg*ones(1,fs/10);
decmsg2 = reshape(decmsg1',1, length(t));
subplot(5,1,1);
plot(t,msg2);
title('原信号');
axis([0 10 0 1.5]);
subplot(5,1,2);
plot(t,sam);
title('已调信号');
axis([0 10 -1.5 1.5]);
subplot(5,1,3);
plot(t,r1);
title('已调信号awgn');
axis([0 10 -1.5 1.5]);
subplot(5,1,4);
plot(t,dem);
title('解调信号');
axis([0 10 0 1.5]);
subplot(5,1,5);
plot(t,decmsg2);
title('判决信号');
axis([0 10 0 1.5]);
```
这样,你的代码应该就可以正常运行了。
阅读全文