。。。。。。。。。 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程序,但是出来的结果还不如不校正,不知道为何,望老师指教 还有一个问题:相同幅度不同频率的信号,加窗,乘恢复系数,经FFT后幅度值相差很大,不知道有什么好的建议
我的邮箱是hjly-123@163.com
请教yangzj ,将将x函数的最后一项的幅值改为大于22的数后运行结果不对,为什么?
%SpectrumCorrect_Test.mclose 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);结果不对
请教yangzj ,将将x函数的最后一项的幅值改为大于22的数后运行结果不对,什么原因呀?
请教yangzj ,将将x函数的最后一项的幅值改为大于22的数后运行结果不对,为什么?%SpectrumCorrect_Test.mclose 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
为什么? 请教ya运行结果为:
XfCorrect =
253.5457 50.0018 -120.0449
250.5825 8.3657 53.1632
257.4372 6.4231 79.6608
ngzj ,将将x函数的最后一项的幅值改为大于22的数后运行结果不对,为什么?% 回复 yangzj 的帖子
谢谢您的辛勤劳动,向您致敬! 回复 yangzj 的帖子
虽然对这不大精通,但通过版主学习学习 学习了,谢谢! 版主就是《离散频谱分析校正理论与技术》的作者之一--杨志坚吧?
正在看这本书,写的很好,准备买一本呢~要是作者能把书后面的源程序给出MATLAB代码就更好了~ 我需要准确估计正弦信号的初相位, 想估算到单周期的万分之零点五, 这是个很高的数量级, 哪怕不准, 能在特定时刻(相位条件下)得到稳定值也行. 不只这思路可行不, 我粗弄下来感觉困难不小 回复 72 # wwllzz 的帖子
频率好办些 可以很多周期间隔平均估算. 定频采样的信号初相位似乎没有定海针, 有方法或可能估到万分之0.5不. 我是尝试解决实际工程问题 很新的领域?? 本帖最后由 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
效果相当的好。