声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

楼主: yangzj

[综合] 关于离散频谱校正

  [复制链接]
发表于 2009-11-8 14:36 | 显示全部楼层
学习了,受益匪浅
回复 支持 反对
分享到:

使用道具 举报

发表于 2009-12-15 19:51 | 显示全部楼层
学习了

。。。。。。。。。
发表于 2010-3-10 20:26 | 显示全部楼层
if(amplitude[max_num+1]>amplitude[max_num-1])
                   {
                      df=(2*amplitude[max_num+1]-amplitude[max_num])/(amplitude[max_num+1]+amplitude[max_num]);

                   }
                   else
                   {
                     df=(amplitude[max_num]-2*amplitude[max_num-1])/(amplitude[max_num]+amplitude[max_num-1]);

                   }
                     fv[0]=fs*(max_num-df)/N;
                       module[0]=2*amplitude[max_num]*pi*(1-df*df)/sin(pi*df);


yangzi老师,我把汉宁窗的校正写出C程序,但是出来的结果还不如不校正,不知道为何,望老师指教
发表于 2010-3-10 20:30 | 显示全部楼层
还有一个问题:相同幅度不同频率的信号,加窗,乘恢复系数,经FFT后幅度值相差很大,不知道有什么好的建议
我的邮箱是hjly-123@163.com
发表于 2010-5-19 21:20 | 显示全部楼层

请教yangzj ,将将x函数的最后一项的幅值改为大于22的数后运行结果不对,为什么?

%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
将x函数的最后一项的幅值改为大于22的数后运行结果不对,为什么?即将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);修改为x=4*cos(2*pi*80*t+30*pi/180)+3*cos(2*pi*150.232*t+80*pi/180)+50*cos(2*pi*253.5453*t+240*pi/180);结果不对
发表于 2010-5-19 21:42 | 显示全部楼层

请教yangzj ,将将x函数的最后一项的幅值改为大于22的数后运行结果不对,什么原因呀?

请教yangzj ,将将x函数的最后一项的幅值改为大于22的数后运行结果不对,为什么?%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
将x函数的最后一项的幅值改为大于22的数后运行结果不对,为什么?即将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);修改为x=4*cos(2*pi*80*t+30*pi/180)+3*cos(2*pi*150.232*t+80*pi/180)+50*cos(2*pi*253.5453*t+240*pi/180);结果不对
运行结果为:
XfCorrect =


253.5457
50.0018 -120.0449


250.5825
8.3657
53.1632


257.4372
6.4231
79.6608

为什么?
发表于 2010-5-19 21:43 | 显示全部楼层
请教ya运行结果为:
XfCorrect =

  253.5457   50.0018 -120.0449
  250.5825    8.3657   53.1632
  257.4372    6.4231   79.6608
ngzj ,将将x函数的最后一项的幅值改为大于22的数后运行结果不对,为什么?%

评分

1

查看全部评分

发表于 2010-11-4 23:34 | 显示全部楼层
回复 yangzj 的帖子

谢谢您的辛勤劳动,向您致敬!
发表于 2010-11-5 09:07 | 显示全部楼层
回复 yangzj 的帖子

虽然对这不大精通,但通过版主学习学习
发表于 2011-3-9 10:26 | 显示全部楼层
学习了,谢谢!
发表于 2011-4-11 21:43 | 显示全部楼层
版主就是《离散频谱分析校正理论与技术》的作者之一--杨志坚吧?
正在看这本书,写的很好,准备买一本呢~  要是作者能把书后面的源程序给出MATLAB代码就更好了~
发表于 2011-4-12 13:09 | 显示全部楼层
我需要准确估计正弦信号的初相位, 想估算到单周期的万分之零点五, 这是个很高的数量级, 哪怕不准, 能在特定时刻(相位条件下)得到稳定值也行. 不只这思路可行不, 我粗弄下来感觉困难不小
发表于 2011-4-12 13:14 | 显示全部楼层
回复 72 # wwllzz 的帖子

频率好办些 可以很多周期间隔平均估算. 定频采样的信号初相位似乎没有定海针, 有方法或可能估到万分之0.5不. 我是尝试解决实际工程问题
发表于 2011-5-11 19:23 | 显示全部楼层
很新的领域??
发表于 2011-5-18 12:31 | 显示全部楼层
本帖最后由 liyuhao_qi 于 2011-5-18 12:31 编辑

这个东西太有用了,在企业里面做产品的检验,就需要检测信号的频率,而且要求测试时间短,那么通过校正就能减少采样时间,减少工时,创造了很大的价值啊!我是这样校正的:
for i=1:length(data);
    x(i)=data(i)*(0.5-0.5*cos(2*pi*i/length(data)))';
end
clear i;


y=abs(fft(x))';
ff=fs*linspace(0,1,length(x))';
df=fs/(length(x)-1);
[~,b]=max(y(1:length(ff)/2));
F=ff(b);
% N=ceil(fs/(2*F));

if b>1;
    if y(b-1)>y(b+1);
        a=y(b-1)/y(b);
        q=(2*a-1)/(1+a);
        F=ff(b)-df*q;
    else y(b-1)<y(b+1);
        a=y(b)/y(b+1);
        q=(2*a-1)/(1+a);
        F=ff(b+1)-df*q;
    end
end
效果相当的好。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-24 21:36 , Processed in 0.081286 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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