请教matlab程序错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教matlab程序错误相关的知识,希望对你有一定的参考价值。

我在编辑器中输入这个程序:
function [code,varargout]=AMI(signal,varargin)
status=1;
if nargin > 1 && isequal(varargin1,-1)
status=varargin1;
end
len=length(signal);
code=zeros(1,len);
for i=1:len
if isequal(signal(i),1)
code(i)=status;
status=0-status;
end
end
if nargout > 1
varargout1=status;
end
if nargout < 1
plot2code(code,'ami');
end
报错:??? Input argument "signal" is undefined.

Error in ==> AMI at 6
len=length(signal);
请问高手们错在哪里
请问怎么调用,我刚学的

你这是函数,不能直接在Editor中运行,因为没有参数输入,你要在Command Window中调用该函数,并传递signal和varargin两个变量 参考技术A 调用的时候,要先定义signal和varargin两个参数,才能调用。
AMI(signal,varargin)
参考技术B signal,varargin是函数AMI的两个参数。你调用AMI时直接赋予两个已经定义的变量就行,简单点说:调用AMI时的代码为[a,b]=AMI(c,d)。这里面c和d 要在这句之前定义,a和b是这个函数的输出结果

请教个matlab程序问题,帮个忙。

设计方法与步骤:
① 画出连续时间信号 的时域波形及其幅频特性曲线,其中幅度因子A=444.128,衰减因子a=222.144,模拟角频率=222.144;
② 对信号 进行采样,得到采样序列 ,其中T= 为采样间隔,通过改变采样频率可改变T,画出采样频率分别为200Hz,500 Hz,1000 Hz时的采样序列波形;
③ 对不同采样频率下的采样序列进行频谱分析,绘制其幅频和相频曲线,对比各频率下采样序列 和的幅频曲线有无差别,如有差别说明原因。
④ 设系统单位抽样响应为 ,求解当输入为 时的系统响应 ,画出 , , 的时域波形及幅频特性曲线,并利用结果验证卷积定理的正确性(此内容将参数设置为A=1,a=0.4, =2.0734,T=1)。
⑤ 用FFT 对信号 , , 进行谱分析,观察与④中结果有无差别。
⑥ 由采样序列 恢复出连续时间信号 ,画出其时域波形,对比 与原连续时间信号 的时域波形,计算并记录两者最大误差。

四、详细程序及仿真波形分析:
1、连续时间信号x(t)及其200Hz/500Hz/1000Hz频率抽样信号函数x(n)
%绘制信号x(n)的幅度谱和相位谱
n=0:50; %定义序列的长度是50
A=input('请输入A的值 A:'); %设置信号的有关参数
a=input('请输入a的值 a:');
w0=input('请输入w0的值 w0:');
T1=0.005;
T2=0.002;
T3=0.001;
T0=0.001;
x=A*exp(-a*n*T0).*sin(w0*n*T0); %pi 是MATLAB 定义的π,信号乘可采用“.*”
y1=A*exp(-a*n*T1).*sin(w0*n*T1); %pi 是MATLAB 定义的π,信号乘可采用“.*”
y2=A*exp(-a*n*T2).*sin(w0*n*T2); %pi 是MATLAB 定义的π,信号乘可采用“.*”
y3=A*exp(-a*n*T3).*sin(w0*n*T3); %pi 是MATLAB 定义的π,信号乘可采用“.*”
close all %清除已经绘制的x(n)图形
subplot(2,1,1);stem(n,x),grid on %绘制x(n)的图形
title('离散时间信号')
subplot(2,1,2);plot(n,x),grid on
title('连续时间信号')
figure(2)
subplot(3,1,1);stem(n,y1),grid on
title('200Hz理想采样信号序列'); %设置结果图形的标题
subplot(3,1,2);stem(n,y2),grid on
title('500Hz连续时间信号')
subplot(3,1,3);stem(n,y3),grid on
title('1000Hz连续时间信号')
k=-25:25;
W=(pi/12.5)*k;
w=W/pi;
Y1=y1*(exp(-j*pi/12.5)).^(n'*k);
figure(3)
subplot(2,1,1);plot(w,abs(Y1));grid,xlabel('w'),ylabel('幅度');
title('200Hz理想采样信号序列的幅度谱');
axis([-2 2 0 1000]);
subplot(2,1,2);plot(w,angle(Y1));grid,xlabel('w'),ylabel('幅角');
title ('200Hz理想采样信号序列的相位谱')
Y2=y2*(exp(-j*pi/12.5)).^(n'*k);
figure(4)
subplot(2,1,1);plot(w,abs(Y2));grid,xlabel('w'),ylabel('幅度');
title('500Hz理想采样信号序列的幅度谱');
axis([-2 2 0 1000]);
subplot(2,1,2);plot(w,angle(Y2));grid,xlabel('w'),ylabel('幅角');
title ('500Hz理想采样信号序列的相位谱')
Y3=y3*(exp(-j*pi/12.5)).^(n'*k);
figure(5)
subplot(2,1,1);plot(w,abs(Y3));grid,xlabel('w'),ylabel('幅度');
title('1000Hz理想采样信号序列的幅度谱');
axis([-2 2 0 1000]);
subplot(2,1,2);plot(w,angle(Y3));grid,xlabel('w'),ylabel('幅角');
title ('1000Hz理想采样信号序列的相位谱')

这个程序中这几句(
k=-25:25;
W=(pi/12.5)*k;
w=W/pi;
Y1=y1*(exp(-j*pi/12.5)).^(n'*k);
)怎么解释每句意思,请教下,小弟刚接触啊。

参考技术A k=-25:25;指的是k的取值是从-25到25之间,每隔1取一个值;
W=(pi/12.5)*k;指的是W的值为k的值乘以pi(3.1415926……)除以12.5;
w=W/pi;表示w的值为W的值除以pi;
Y1=......;表示Y1的值为后面这个运算的结果,其中exp表示自然指数函数,指数为括号里的值;(...).^(...)表示矩阵的指数函数,底为前面括号里的矩阵,指数为后面括号里的矩阵;n'表示矩阵n的转置追问

不是的,我是问这样做的目地是什么

追答

额,不好意思啊,我不是学信号的,对信号处理不太懂,我只知道这是在干什么,不知道为啥这么干。很抱歉,这里帮不了你了

参考技术B Y1=y1*(exp(-j*pi/12.5)).^(n'*k);
这一句实际上是离散傅里叶变换公式写开后变成
% for k=-25:25
% for n=0:50
% Y1(k+1)=Y1(k+1)+y1[n+2]*exp(-1i*pi/12.5).^(n*k)
你翻翻课本就知道了

以上是关于请教matlab程序错误的主要内容,如果未能解决你的问题,请参考以下文章

急!!请教高手:如何用MATLAB程序高效地对大批量的数据进行处理和保存?(回答满意追加5分)

请教一个qt与Matlab混合编程的问题

什么是MATLAB语言 程序设计应用有什么用途

请教关于Matlab中ikine函数

请教用MATLAB如何做协方差模型分析

请教高手!急!!! 请问如何将matlab中的矩阵数据转化为点云数据?