声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2305|回复: 6

[编程技巧] 大家帮忙看下这程序,总是提示未定义

[复制链接]
发表于 2007-4-8 15:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
实现通信里抽样定理的matlab程序
1)
function [M,m,df]=fftseq(m,ts,df)
[M,m,df]=fftseq(m,ts,df) ;
[M,m,df]=fftseq(m,ts) ;
fs=1/ts;
if nargin == 2
n1=0;
else
n1=fs/df;
end
n2=length(m);
n=2^(max(nextpow2(n1),nextpow2(n2)));  
M=fft(m,n);
m=[m,zeros(1,n-n2)];
df=fs/n;

2)clear
t0=10;
ts=0.001;
ts1=0.1;
ts2=0.05;
fs=1/ts;
fs1=1/ts1;
fs2=1/ts2;
df=0.5;
t=[-t0/2:ts:t0/2];
x=sin(20*t);
m=x./t;
w=t0/(2*ts)+1;
m(w)=20;
m=m.*cos(100*t);
[M,mn,dfy]=fftseq(m,ts,df);
M=M/fs;
f=[0:dfy:dfy*length(mn)-dfy]-fs/2;
pause;
subplot(2,1,1);
plot(f,abs(fftshift(M)));
axis([-50,50,0.3]);
t1=[-t0/2:ts1:t0/2];
x1=sin(20*t1);
m1==x1./t1;
w1=t0/(2*ts1)+1;
m1(w1)=20;
m1=m1.*cos(100*t1);
[M1,mn1,df1]=fftseq(m1,ts1,df);
M1=M1/fs1;
N1=[M1,M1,M1,M1,M1,M1,M1,M1,M1,M1,M1,M1,M1];
f1=[-7*df1*length(mn1):df1:6*df1*length(mn1)-df1]-fs1/2;
subplot(2,2,3);
plot(f1,abs(fftshift(N1)));
title('不满足采样要求');
t2=[-t0/2:ts2:t0/2];
x2=sin(20*t2);
m2=x2./t2;
w2=t0/(2*ts2)+1;
m2(w2)=20;
m2=m2.*cos(100*t2);
[M2,mn2,df2]=fftseq(m2,ts2,df);
M2=M2/fs2;
N2=[M2,M2,M2,M2,M2,M2,M2,M2,M2,M2,M2,M2,M2];
f2=[-7*df2*length(mn2):df2:6*df2*length(mn2)-df2]-fs2/2;
subplot(2,2,4);
title('满足采样要求');
xlable('频率')



出现错误:??? Maximum recursion limit of 500 reached. Use set(0,'RecursionLimit',N)
to change the limit.  Be aware that exceeding your available stack space can
crash MATLAB and/or your computer.
Error in ==> e:\MATLAB6p5\work\fftseq.m
On line 2  ==> [M,mn,df]=fftseq(m,ts,df) ;
Error in ==> e:\MATLAB6p5\work\bandpsample.m
On line 16  ==> [M,mn,dfy]=fftseq(m,ts,df);
回复
分享到:

使用道具 举报

发表于 2007-4-8 16:14 | 显示全部楼层
Use set(0,'RecursionLimit',N) to change the limit

上句不是提醒了你了吗
 楼主| 发表于 2007-4-8 16:36 | 显示全部楼层
set(0,'RecursionLimit',N)
加在t=[-t0/2:ts:t0/2];后面?
我菜鸟啊,解释下
发表于 2007-4-8 16:44 | 显示全部楼层
原帖由 skyhitskaka 于 2007-4-8 16:36 发表
set(0,'RecursionLimit',N)
加在t=;后面?
我菜鸟啊,解释下



set(0,'RecursionLimit',1000) ;

加在程序开头吧,反正在fftseq前面就行
 楼主| 发表于 2007-4-8 17:28 | 显示全部楼层
不行
还是一样的提示

用了2个不同的程序,都报一样的错
郁闷
发表于 2007-4-8 17:36 | 显示全部楼层
原帖由 skyhitskaka 于 2007-4-8 17:28 发表
不行
还是一样的提示

用了2个不同的程序,都报一样的错
郁闷



这个不是错误,只是提示你最大的迭代次数已经达到,N可以自己调整,不过如果太大容易造成matlab或者系统崩溃
 楼主| 发表于 2007-4-8 18:49 | 显示全部楼层
那是程序本身的错误吗
Error in ==> e:\MATLAB6p5\work\fftseq.m
On line 2  ==> [M,mn,df]=fftseq(m,ts,df) ;
Error in ==> e:\MATLAB6p5\work\bandpsample.m
On line 16  ==> [M,mn,dfy]=fftseq(m,ts,df);
那个会不会影响程序

在其他网页上看到过,如果0被除,会导致后面的变换出错

是这样吗

请赐教
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-24 17:19 , Processed in 0.064362 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表