demonkao 发表于 2007-5-27 13:35

帮忙看看我的程序

各位大侠.昨天老师给了个算法,让使用matlab 进行编程仿真,小弟是个初学者,对matlab一点都不熟悉,费了好大功夫才写了这么一点,还老提示错误,谁能帮忙给看看修改下啊。我把算法的大概意思说说:
给一个正弦信号g(t),对它做N点采样等到g(n),它的DFT系数为Gk (k是下标),经过变形得到Gk的表达式为:1,取Gk的最大为2.那么被估计信号的频率为3.
1.    2.   3.         都是公式,打不上来.所以发个附件了,希望大家能看看.
我的目的是将程序写出来看看估计的频率与实际频率的差值,并把它的频谱图给画出来.如果能把算法的估计方差得出来更好,可我不知道用哪个命令,希望大家帮帮我.. 谢谢大家.

这是我写的程序:
clear all;
N=1000;
a=2;
f0=100;
ot=1;
n=0:N-1;
T=N/ot;
k=0:N-1;
V(k)=((k)*Ws/N)-W0;
W(s)=(2*pi)/ot;
W0=2*pi*f0;
g(s)=a*cos(2*pi*f0*t);
noise=1*rand(1,N);
g(n)=a*exp(j*2*pi*n*ot);
d=npise+g(n);
for k=0;N-1;
    G(k)=a*(exp(j*(1-N)))*(sin(N*V(k)*ot/2))/(sin(V(k)*ot/2));
end;
G(k0)=max(G(k));
if G(k0+1)<=G(k0-1);
    r=-1;
else r=1;
    f=((k0)+((r*(G(k0+r))/(G(k0)+G(k0+r)))));
   
    figure(2.1);
    plot(g(s));
    title('正弦信号');
    Xlabel('频率');
    Ylabel('频率');
    axis ;
    grid on;
   
    figure(2.2)
    plot(d);
    title('噪声信号');
   
    figure(2.3);
    plot(abs(fft(g(n))));
    title('频谱');
    Xlable('k');
    Ylable('幅度');

[ 本帖最后由 eight 于 2007-5-27 22:01 编辑 ]

无水1324 发表于 2007-5-27 15:08

错的地方太多了
你最好再看一下matlab的书
比如

   V(k)=((k)*Ws/N)-W0;
   W(s)=(2*pi)/ot;

还有for if 循环的结构是怎么样的
这些都是最基本的

demonkao 发表于 2007-5-27 15:26

(k)和0都应该是下表,可matlab中我不会打下标啊 ,程序中的()内容很多都是下标,我不会打,只能用()了,你能不能帮忙说说啊   matlan书刚开始看,明天上机要做实验。看的头疼了。

demonkao 发表于 2007-5-27 15:41

回复 #2 无水1324 的帖子

不好意思,那个是打错了,还有应该是g(t)不是g(s),那个V(k)里面的k是V的下标。还有ot本来是△t,但是matlab中也打不出来啊。那些带着一大队括号的都是公式,太难打了。。。。
算法中最关键的部分是 取Gk0是Gk中最大的谱线。   再对Gk0+1(右谱线)和Gk0-1(左谱线)进行比较。其中k0+1和k0-1也都是下标,在matlab中该怎么表示啊?
那写细节的问题我会再仔细处理的,可这个基本的我不会啊,希望帮一下。

xjzuo 发表于 2007-5-27 15:49

的确是相当糟糕的一段代码-----建议找一本信号处理相关的Matlab书对照着看看.

demonkao 发表于 2007-5-27 16:10

呵呵。第一次写程序,写的很烂,让大家见笑了啊 。那书上面没有关于算法的程序,我又看了会书,发现确实很多错误的啊,不过谁告诉我那些该死的下标到底怎么打啊 ?能用什么办法解决啊!

hzlinjh 发表于 2007-5-27 22:03

路过说几句。

我也在做MATLAB解微分方程,呵呵,和楼Z一样都刚刚起步,不要灰心啊,大家一起前进,多看看贴有好处。
页: [1]
查看完整版本: 帮忙看看我的程序