Bai_Mu26 2019-05-03 08:05 采纳率: 0%
浏览 5191

求问这个代码如何解决错误使用 mesh (line 75) Z 必须为矩阵,不能是标量或矢量。?

这个代码本来是只有二维图,想用mesh生成一个三维图,请问该如何修改?
加了mesh总是报错
错误使用 mesh (line 75)
Z 必须为矩阵,不能是标量或矢量。

clc;
clear;
f = 750;%单频信号的频率
fsample = 50*f;%采样频率
dlts = 1/fsample;%采样周期
dd = 1;%阵元间距

cc=1500;%声速
dsita=2/360*pi;%扫描角度间隔
beam_no=2*pi/dsita;%波束个数
m=8;%阵元个数
dltc=cc*dlts;%一个采样周期声波传播的距离
t = 0.005:dlts:0.056;
n = length(t);
bn=round(dd/dltc);
ks=n-floor(m/2)*2*bn-1;
ss=zeros(beam_no,ks);
theta =45;

%单频信号
xx(1,:) = cos (2*pi*f.*t);
xx(2,:) = cos(2*pi*f.*(t - 3*dd*cos(theta*pi/180)/cc));
xx(3,:) = cos(2*pi*f.*(t + 3*dd*sin(theta*pi/180)/cc));
xx(4,:) = cos(2*pi*f.*(t + 3*dd*cos(theta*pi/180)/cc));
xx(5,:) = cos(2*pi*f.*(t - 3*dd*sin(theta*pi/180)/cc));
xx(6,:) = cos(2*pi*f.*(t - dd*cos(theta*pi/180)/cc));
xx(7,:) = cos(2*pi*f.*(t - 2*dd*cos(theta*pi/180)/cc));
xx(8,:) = cos(2*pi*f.*(t + dd*sin(theta*pi/180)/cc));
xx(9,:) = cos(2*pi*f.*(t + 2*dd*sin(theta*pi/180)/cc));
xx(10,:) = cos(2*pi*f.*(t + dd*cos(theta*pi/180)/cc));
xx(11,:) = cos(2*pi*f.*(t + 2*dd*cos(theta*pi/180)/cc));
xx(12,:) = cos(2*pi*f.*(t - dd*sin(theta*pi/180)/cc));
xx(13,:) = cos(2*pi*f.*(t - 2*dd*sin(theta*pi/180)/cc));
for i=1:beam_no
    dltn(1)=0;
    dltn(2)=round(3*dd*cos(dsita*(i-1))/dltc);
    dltn(3)=round(-3*dd*sin(dsita*(i-1))/dltc);    
    dltn(4)=round(-3*dd*cos(dsita*(i-1))/dltc);    
    dltn(5)=round(3*dd*sin(dsita*(i-1))/dltc);  
    dltn(6)=round(dd*cos(dsita*(i-1))/dltc);
    dltn(7)=round(2*dd*cos(dsita*(i-1))/dltc);    
    dltn(8)=round(-dd*sin(dsita*(i-1))/dltc);    
    dltn(9)=round(-2*dd*sin(dsita*(i-1))/dltc);      
    dltn(10)=round(-dd*cos(dsita*(i-1))/dltc);    
    dltn(11)=round(-2*dd*cos(dsita*(i-1))/dltc);
    dltn(12)=round(dd*sin(dsita*(i-1))/dltc);
    dltn(13)=round(2*dd*sin(dsita*(i-1))/dltc);
    for j=1:13
            ss(i,:)=ss(i,:)+xx(j,bn*floor(m/2)+1+dltn(j)+1:n-bn*floor(m/2)-1+dltn(j)+1);
    end
end
 peakx=zeros(1,beam_no);
    for i=1:beam_no
        peakx(i)=var(ss(i,:));
    end
alpha = 0:1/180*pi:2*pi-1/180*pi;
polar(alpha,peakx);

figure,mesh(abs(peakx))
  • 写回答

1条回答 默认 最新

  • 嵌入式职场 嵌入式领域优质创作者 2020-02-24 17:46
    关注

    首先对于三维图像的意义是什么,这个我不清楚。
    **错误为:
    错误使用 mesh (line 75)
    Z 必须为矩阵,不能是标量或矢量。

    说明z使用出错,对应代码中的abs(peakx),abs为求绝对值函数。peakx变量大小为:1x360 double,从这可以看出为矢量而不是矩阵,所以出现了错误。
    修改如下:

    clear
    clc
    
    f = 750;%单频信号的频率
    fsample = 50*f;%采样频率
    dlts = 1/fsample;%采样周期
    dd = 1;%阵元间距
    
    cc=1500;%声速
    dsita=2/360*pi;%扫描角度间隔
    beam_no=2*pi/dsita;%波束个数
    m=8;%阵元个数
    dltc=cc*dlts;%一个采样周期声波传播的距离
    t = 0.005:dlts:0.056;
    n = length(t);
    bn=round(dd/dltc);
    ks=n-floor(m/2)*2*bn-1;
    ss=zeros(beam_no,ks);
    theta =45;
    
    %单频信号
    xx(1,:) = cos (2*pi*f.*t);
    xx(2,:) = cos(2*pi*f.*(t - 3*dd*cos(theta*pi/180)/cc));
    xx(3,:) = cos(2*pi*f.*(t + 3*dd*sin(theta*pi/180)/cc));
    xx(4,:) = cos(2*pi*f.*(t + 3*dd*cos(theta*pi/180)/cc));
    xx(5,:) = cos(2*pi*f.*(t - 3*dd*sin(theta*pi/180)/cc));
    xx(6,:) = cos(2*pi*f.*(t - dd*cos(theta*pi/180)/cc));
    xx(7,:) = cos(2*pi*f.*(t - 2*dd*cos(theta*pi/180)/cc));
    xx(8,:) = cos(2*pi*f.*(t + dd*sin(theta*pi/180)/cc));
    xx(9,:) = cos(2*pi*f.*(t + 2*dd*sin(theta*pi/180)/cc));
    xx(10,:) = cos(2*pi*f.*(t + dd*cos(theta*pi/180)/cc));
    xx(11,:) = cos(2*pi*f.*(t + 2*dd*cos(theta*pi/180)/cc));
    xx(12,:) = cos(2*pi*f.*(t - dd*sin(theta*pi/180)/cc));
    xx(13,:) = cos(2*pi*f.*(t - 2*dd*sin(theta*pi/180)/cc));
    for i=1:beam_no
        dltn(1)=0;
        dltn(2)=round(3*dd*cos(dsita*(i-1))/dltc);
        dltn(3)=round(-3*dd*sin(dsita*(i-1))/dltc);    
        dltn(4)=round(-3*dd*cos(dsita*(i-1))/dltc);    
        dltn(5)=round(3*dd*sin(dsita*(i-1))/dltc);  
        dltn(6)=round(dd*cos(dsita*(i-1))/dltc);
        dltn(7)=round(2*dd*cos(dsita*(i-1))/dltc);    
        dltn(8)=round(-dd*sin(dsita*(i-1))/dltc);    
        dltn(9)=round(-2*dd*sin(dsita*(i-1))/dltc);      
        dltn(10)=round(-dd*cos(dsita*(i-1))/dltc);    
        dltn(11)=round(-2*dd*cos(dsita*(i-1))/dltc);
        dltn(12)=round(dd*sin(dsita*(i-1))/dltc);
        dltn(13)=round(2*dd*sin(dsita*(i-1))/dltc);
        for j=1:13
                ss(i,:)=ss(i,:)+xx(j,bn*floor(m/2)+1+dltn(j)+1:n-bn*floor(m/2)-1+dltn(j)+1);
        end
    end
     peakx=zeros(1,beam_no);
        for i=1:beam_no
            peakx(i)=var(ss(i,:));
        end
    alpha = 0:1/180*pi:2*pi-1/180*pi;
    polar(alpha,peakx);
    x=abs(peakx);
    y=x;
    m=x';
    z=m*y;
    figure,mesh(z)
    
    

    最后结果为:
    图片说明
    图片说明

    评论

报告相同问题?

悬赏问题

  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥50 汇编语言除法溢出问题
  • ¥65 C++实现删除N个数据列表共有的元素
  • ¥15 Visual Studio问题
  • ¥15 state显示变量是字符串形式,但是仍然红色,无法引用,并显示类型不匹配
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波