声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1791|回复: 5

[FFT] 关于频谱校正法的问题~

[复制链接]
发表于 2007-5-14 16:59 | 显示全部楼层 |阅读模式

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

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

x
小弟学的是力学建模,可是带我做毕业设计的老师搞的是信号处理,让我做"若干频谱校正法的比较"这个论文,以前还以为很简单,就忙着去找工作没怎么做,现在做起来感觉困难很大,都快要毕业了,还没搞出点头绪来,那个老师也不教我们了,说他没时间,感觉好像不想让我毕业似的..急死我了`
这里有没有在这方面很有在行的大哥大姐呀,指点一下~给几个matlab编程仿真计算的实例....
谢谢啊:@)

[ 本帖最后由 xinyuxf 于 2007-5-16 10:28 编辑 ]
回复
分享到:

使用道具 举报

发表于 2007-5-14 17:00 | 显示全部楼层

回复 #1 xingliu2008 的帖子

http://forum.vibunion.com/forum/thread-41740-1-2.html
学会使用搜索功能,以后多关注论坛
 楼主| 发表于 2007-5-14 17:09 | 显示全部楼层

回复 #2 zhangnan3509 的帖子

谢谢您的指导...
可是那篇文章比值法的仿真计算实例
我想求一下能量重心法,幅值法还有
FFT+DFT法的matlab计算实例....
 楼主| 发表于 2007-5-14 22:32 | 显示全部楼层

回复 #1 xingliu2008 的帖子

为什么我把这个输进matlab老是不能实现呀?:@L
spectrumcorrect无定义?:@o
大牛们告诉一下怎么定义呀~~~:@(


%SpectrumCorrect_Test.m
close all;
clear all;
clc;
fs=1024;
N=1024;
t=(0:N-1)/fs;
x=4*cos(2*pi*80*t+30*pi/180)+3*cos(2*pi*150.232*t+80*pi/180)+1*cos(2*pi*253.5453*t+240*pi/180);
xf=fft(x);
xf=xf(1:N/2)/N*2;
XfCorrect=SpectrumCorrect(xf,3,1);
XfCorrect(:,1)=XfCorrect(:,1)*fs/N;
XfCorrect
w=hann(N,'periodic');
xfw=fft(x.*w');
xfw=xfw(1:N/2)/N*4;
XfCorrectW=SpectrumCorrect(xfw,3,2);
XfCorrectW(:,1)=XfCorrectW(:,1)*fs/N;
XfCorrectW



%离散频谱比值校正法  by yangzj  2007.4.28
%
%xf为FFT后的复数谱
%CorrectNum为校正的谱线条数,即校正最大的CorrectNum条
%WindowType为加窗类型,1为矩形窗,2为Hanning窗
%
%SpectrumCorrect.m
function XfCorrect=SpectrumCorrect(xf,CorrectNum,WindowType)
XfCorrect=zeros(CorrectNum,3);
for i=1:CorrectNum
    A=abs(xf);
    [Amax,index]=max(A);
    phmax=angle(xf(index));
   
    %比值法
    %加矩形窗
    if (WindowType==1)
        indsecL=A(index-1)>A(index+1);
        df=indsecL.*A(index-1)./(Amax+A(index-1))-(1-indsecL).*A(index+1)./(Amax+A(index+1));
        XfCorrect(i,1)=index-1-df;
        XfCorrect(i,2)=Amax/sinc(df);
        XfCorrect(i,3)=(phmax+pi*df)*180/pi;
        
        xf(index-2:index+2)=zeros(1,5);
    end
   
    %比值法
    %加Hanning窗
    if (WindowType==2)
        indsecL=A(index-1)>A(index+1);
        df=indsecL.*(2*A(index-1)-Amax)./(Amax+A(index-1))-(1-indsecL).*(2*A(index+1)-Amax)./(Amax+A(index+1));
        XfCorrect(i,1)=index-1-df;
        XfCorrect(i,2)=(1-df^2)*Amax/sinc(df);
        XfCorrect(i,3)=(phmax+pi*df)*180/pi;
        
        xf(index-4:index+4)=zeros(1,9);
    end
    XfCorrect(i,3)=mod(XfCorrect(i,3),360);
    XfCorrect(i,3)=XfCorrect(i,3)-(XfCorrect(i,3)>180)*360;
end


运行结果
XfCorrect =
   80.0014    4.0016   29.8261
  150.2333    2.9981   79.7127
  253.5397    0.9996 -118.7272

XfCorrectW =
   80.0000    4.0000   30.0000
  150.2320    3.0000   80.0000
  253.5453    1.0000 -120.0002
发表于 2007-5-15 19:12 | 显示全部楼层
既然你要写论文,当然要自己先把这些都弄明白呀,不然大家给了你一个程序,到时候你怎么去分析,怎么写出论文呀.而且还建议你先看看matlab的基础书.
呵呵,工欲善其事,必先利其器.准备工作还是要的.

另外,你如果只比较这些的话,已经有人做过了,你还得先搜搜相关的论文
发表于 2007-5-22 17:42 | 显示全部楼层
我在Matalab讨论区共享了一些相关程序,希望能给你带来帮助
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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