声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2529|回复: 2

[FFT] 学写程序之三(源代码)--FFT+FT连续细化傅立叶变换分析校正法

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

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

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

x
第三贴,欢迎大家拍砖头阿,还请各位多多指教。
参考自丁康老师《离散频谱校正技术》一书和版主yangzj的相关贴子。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
clear all;clc  
Fs=1024;N=1024;
t =(0:N-1)/Fs;
tt=0:N-1;
hanning=0.5-0.5*cos(2*pi*tt/N);
windowtype=input('请选择加窗类型1.矩形窗2.汉宁窗');
    if windowtype==1
        x=4.2366*cos(2*pi*63.2*t+23.8*pi/180);%时域仿真函数
    elseif windowtype==2
        x=4.2366*cos(2*pi*63.2*t+23.8*pi/180).*hanning;
    else
        error('选择有误,请重新选择');
    end
y = fft(x);
Y=y(1:N/2+1)/N*2;
f=(0:N/2)*Fs/N;
subplot(211);plot(f,abs(Y(1:N/2+1)));grid on
A=abs(Y);
[Amax,k]=max(A);
if windowtype==1
    Amax_uncorrect=Amax%校正前幅值
elseif windowtype==2
    Amax_uncorrect=Amax*2
end
phmax_uncorrect=angle(Y(k))*180/pi%校正前相位
f_uncorrect=k-1%校正前频率
L=80;%要细化的点数
deltf=((k+1-1)*Fs/N-(k-1-1)*Fs/N)/L;%确定细化后频率分辨率
YY=zeros(1,N);
ff=(k-1-1)*Fs/N;
    for i=1:L
        for ii=1:N
            YY(i)=YY(i)+x(ii)*exp(-j*2*pi*ff*(ii-1)/Fs);
        end
        ff=ff+deltf;
    end     
    if windowtype==1;
        A_correct=max(abs(YY)/N*2)%校正后幅值
        [YYmax,YYk]=max(YY);
        f_correct=(k-1-1)*Fs/N+(YYk-1)*deltf%校正后频率
        phmax_correct=angle(YYmax)*180/pi%校正后相位
        Y(k)=A_correct;f(k)=f_correct;
        subplot(212);plot(f,abs(Y(1:N/2+1)));grid on
    else windowtype==2;
        A_correct=2*max(abs(YY)/N*2)%校正后幅值
        [YYmax,YYk]=max(YY);
        f_correct=(k-1-1)*Fs/N+(YYk-1)*deltf%校正后频率
        phmax_correct=angle(YYmax)*180/pi%校正后相位
        Y(k)=A_correct/2;f(k)=f_correct;%幅值除以2,保证向里的数值为原来数值
        subplot(212);plot(f,2*abs(Y(1:N/2+1)));grid on%2倍为幅值恢复系数
    end


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
运行结果:
理论值
幅值:4.2366 频率:63.2 相位:23.8度
加矩形窗
校正前
Amax_uncorrect =3.962471854470429
phmax_uncorrect =59.672485657326710
f_uncorrect =63
校正后
A_correct =4.235275753915142
f_correct =63.200000000000003
phmax_correct =23.660397117658885
加汉宁窗
校正前
Amax_uncorrect = 4.128431340024557
phmax_uncorrect =59.800004751788116
f_uncorrect =63
校正后
A_correct =4.236600313219102
f_correct =63.200000000000003
phmax_correct =23.800007456676489
回复
分享到:

使用道具 举报

发表于 2016-10-22 09:49 | 显示全部楼层
校正后,还是挺准的啊。为何没有人回复呢?现在大家一般用哪种方法进行校正呢?
发表于 2016-10-24 08:46 | 显示全部楼层
学习了  多谢
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-28 18:28 , Processed in 0.070799 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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