ensonmj 发表于 2009-11-8 14:36

学习了,受益匪浅

robustcococole 发表于 2009-12-15 19:51

学习了

。。。。。。。。。

huan0918 发表于 2010-3-10 20:26

if(amplitude>amplitude)
                   {
                      df=(2*amplitude-amplitude)/(amplitude+amplitude);

                   }
                   else
                   {
                     df=(amplitude-2*amplitude)/(amplitude+amplitude);

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


yangzi老师,我把汉宁窗的校正写出C程序,但是出来的结果还不如不校正,不知道为何,望老师指教

huan0918 发表于 2010-3-10 20:30

还有一个问题:相同幅度不同频率的信号,加窗,乘恢复系数,经FFT后幅度值相差很大,不知道有什么好的建议
我的邮箱是hjly-123@163.com

ljylmqlcz 发表于 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);结果不对

ljylmqlcz 发表于 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
为什么?

ljylmqlcz 发表于 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的数后运行结果不对,为什么?%

毛毛先知 发表于 2010-11-4 23:34

回复 yangzj 的帖子

谢谢您的辛勤劳动,向您致敬!

土木年华 发表于 2010-11-5 09:07

回复 yangzj 的帖子

虽然对这不大精通,但通过版主学习学习

blue1122 发表于 2011-3-9 10:26

学习了,谢谢!

dhaosgg 发表于 2011-4-11 21:43

版主就是《离散频谱分析校正理论与技术》的作者之一--杨志坚吧?
正在看这本书,写的很好,准备买一本呢~要是作者能把书后面的源程序给出MATLAB代码就更好了~

wwllzz 发表于 2011-4-12 13:09

我需要准确估计正弦信号的初相位, 想估算到单周期的万分之零点五, 这是个很高的数量级, 哪怕不准, 能在特定时刻(相位条件下)得到稳定值也行. 不只这思路可行不, 我粗弄下来感觉困难不小

wwllzz 发表于 2011-4-12 13:14

回复 72 # wwllzz 的帖子

频率好办些 可以很多周期间隔平均估算. 定频采样的信号初相位似乎没有定海针, 有方法或可能估到万分之0.5不. 我是尝试解决实际工程问题

huzhi1988 发表于 2011-5-11 19:23

很新的领域??

liyuhao_qi 发表于 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
效果相当的好。
页: 1 2 3 4 [5] 6 7 8
查看完整版本: 关于离散频谱校正