100.*rand(4,1)
时间: 2023-04-09 11:04:32 浏览: 84
这是一个随机生成一个 4 行 1 列的矩阵,每个元素都是 100 倍一个 0 到 1 之间的随机数。具体的代码实现可能是这样的:
```lua
function rand(m, n)
return torch.rand(m, n)
end
function generate_matrix()
return 100 * rand(4, 1)
end
```
其中 `torch.rand(m, n)` 是一个 Torch7 库中的函数,用于生成一个大小为 `m x n` 的随机矩阵。
相关问题
IQ_256qam=zeros(N,L,2); for i=1:N x=randi([0,255],L,1); y_com=qammod(x,256); y_com = raylrnd(1).*y_com.*exp(1i*rand()*pi/16); snr = 40*rand()-20; y_noise = awgn(y_com, snr, 'measured'); y_noise = y_noise./std(y_noise); x = real(y_noise); y = imag(y_noise); IQ_256qam(i,:,1)=x; IQ_256qam(i,:,2)=y; end 根据这段代码仿写MSK调制
以下是根据给出的代码仿写的MSK调制的MATLAB代码:
```matlab
%% MSK调制,仿真IQ数据
clear all;close all;clc;
% 设置参数
fc=1e4; %载波频率
Tb=1/100; %比特周期
Ts=Tb/2; %符号周期
fs=1/Ts; %采样频率
N=1000; %仿真周期数
L=100; %每个周期包含的符号数
% 生成二进制数据
data=rand(1,N*L)>0.5; %产生随机二进制数据
% 调制
t=0:1/fs:N*Tb*L-1/fs; %时间轴
data_upsample=kron(data,ones(1,fs/Tb)); %上采样
phi=zeros(1,length(data_upsample)); %初始相位
for i=2:length(data_upsample)
phi(i)=phi(i-1)+pi*data_upsample(i-1)*(1+data_upsample(i))/2;
end
s=sqrt(2/Tb)*cos(2*pi*fc*t+phi); %MSK信号
s_I=real(s); %实部
s_Q=imag(s); %虚部
% 仿真IQ数据
IQ_msk=zeros(N,L,2); %存储IQ数据
for i=1:N
y_com=s(i*L-L+1:i*L); %取出一段MSK信号
y_com=y_com(:); %转化为列向量
y_com=y_com.*exp(1i*pi/2); %将MSK信号转化为BPSK信号
snr=40*rand()-20; %随机生成信噪比
y_noise=awgn(y_com,snr,'measured'); %加入高斯白噪声
y_noise=y_noise./std(y_noise); %信号标准化
x=real(y_noise); %实部
y=imag(y_noise); %虚部
IQ_msk(i,:,1)=x; %存储实部
IQ_msk(i,:,2)=y; %存储虚部
end
% 画图
figure;
subplot(3,1,1);plot(t,phi);title('相位');
subplot(3,1,2);plot(t,s);title('MSK信号');
subplot(3,1,3);plot(s_I,s_Q);title('IQ图像');
```
注:以上代码仅供参考,实际应用中可能需要根据具体情况进行修改。需要注意的是,MSK调制和256QAM调制有很大的不同,因此在仿写的过程中,需要根据MSK调制的原理来进行编写。
clear f = @(x,y) 20 + x.^2 + y.^2 - 10*cos(2*pi.*x) - 10*cos(2*pi.*y) ; x0 = [-5.12:0.05:5.12]; y0 = x0 ; [X,Y] = meshgrid(x0,y0); Z =f(X,Y) ; figure(1); mesh(X,Y,Z); colormap(parula(5)); n = 10; narvs = 2; c1 = 0.6; c2 = 0.6; w_max = 0.9; w_min = 0.4; K = 100; vmax = 1.2; x_lb = -5.12; x_ub = 5.12; x = zeros(n,narvs); x = x_lb + (x_ub-x_lb).*rand(n,narvs) v = -vmax + 2*vmax .* rand(n,narvs); fit = zeros(n,1); for i = 1:n fit(i) = Obj_fun1(x(i,:)); end pbest = x; ind = find(fit == max(fit), 1); gbest = x(ind,:); h = scatter(x,fit,80,'*r'); fitnessbest = ones(K,1); for d = 1:K for i = 1:n f_i = fit(i); f_avg = sum(fit)/n; f_max = max(fit); if f_i >= f_avg if f_avg ~= f_max w = w_min + (w_max - w_min)*(f_max - f_i)/(f_max - f_avg); else w = w_max; end else w = w_max; end v(i,:) = w*v(i,:) + c1*rand(1)*(pbest(i,:) - x(i,:)) + c2*rand(1)*(gbest - x(i,:)); for j = 1: narvs if v(i,j) < -vmax(j) v(i,j) = -vmax(j); elseif v(i,j) > vmax(j) v(i,j) = vmax(j); end end x(i,:) = x(i,:) + v(i,:); for j = 1: narvs if x(i,j) < x_lb(j) x(i,j) = x_lb(j); elseif x(i,j) > x_ub(j) x(i,j) = x_ub(j); end end fit(i) = Obj_fun1(x(i,:)); if fit(i) > Obj_fun1(pbest(i,:)) pbest(i,:) = x(i,:); end if fit(i) > Obj_fun1(gbest) gbest = pbest(i,:); end end fitnessbest(d) = Obj_fun1(gbest); pause(0.1) h.XData = x; h.YData = fit; end figure(2) plot(fitnessbest) xlabel('迭代次数'); disp('最佳的位置是:'); disp(gbest) disp('此时最优值是:'); disp(Obj_fun1(gbest)) function y = Obj_fun1(x) y = 7*cos(5*x) + 4*sin(x); end
代码中有两处错误:
1. 在初始化 x 变量时,应该使用矩阵赋值,而不是两次赋值。修改后的代码如下:
```
x = x_lb + (x_ub-x_lb).*rand(n,narvs);
```
2. 在迭代更新速度时,应该将速度限制在 [-vmax, vmax] 的范围内。修改后的代码如下:
```
for j = 1: narvs
if v(i,j) < -vmax
v(i,j) = -vmax;
elseif v(i,j) > vmax
v(i,j) = vmax;
end
end
```
修改后的完整代码如下:
```
clear
f = @(x,y) 20 + x.^2 + y.^2 - 10*cos(2*pi.*x) - 10*cos(2*pi.*y);
x0 = [-5.12:0.05:5.12];
y0 = x0;
[X,Y] = meshgrid(x0,y0);
Z = f(X,Y);
figure(1);
mesh(X,Y,Z);
colormap(parula(5));
n = 10;
narvs = 2;
c1 = 0.6;
c2 = 0.6;
w_max = 0.9;
w_min = 0.4;
K = 100;
vmax = 1.2;
x_lb = -5.12;
x_ub = 5.12;
x = x_lb + (x_ub-x_lb).*rand(n,narvs);
v = -vmax + 2*vmax .* rand(n,narvs);
fit = zeros(n,1);
for i = 1:n
fit(i) = Obj_fun1(x(i,:));
end
pbest = x;
ind = find(fit == max(fit), 1);
gbest = x(ind,:);
h = scatter(x(:,1),x(:,2),80,'*r');
fitnessbest = ones(K,1);
for d = 1:K
for i = 1:n
f_i = fit(i);
f_avg = sum(fit)/n;
f_max = max(fit);
if f_i >= f_avg
if f_avg ~= f_max
w = w_min + (w_max - w_min)*(f_max - f_i)/(f_max - f_avg);
else
w = w_max;
end
else
w = w_max;
end
v(i,:) = w*v(i,:) + c1*rand(1)*(pbest(i,:) - x(i,:)) + c2*rand(1)*(gbest - x(i,:));
for j = 1: narvs
if v(i,j) < -vmax
v(i,j) = -vmax;
elseif v(i,j) > vmax
v(i,j) = vmax;
end
end
x(i,:) = x(i,:) + v(i,:);
for j = 1: narvs
if x(i,j) < x_lb
x(i,j) = x_lb;
elseif x(i,j) > x_ub
x(i,j) = x_ub;
end
end
fit(i) = Obj_fun1(x(i,:));
if fit(i) > Obj_fun1(pbest(i,:))
pbest(i,:) = x(i,:);
end
if fit(i) > Obj_fun1(gbest)
gbest = pbest(i,:);
end
end
fitnessbest(d) = Obj_fun1(gbest);
pause(0.1)
h.XData = x(:,1);
h.YData = x(:,2);
end
figure(2)
plot(fitnessbest)
xlabel('迭代次数');
disp('最佳的位置是:');
disp(gbest)
disp('此时最优值是:');
disp(Obj_fun1(gbest))
function y = Obj_fun1(x)
y = 7*cos(5*x) + 4*sin(x);
end
```