matlab求信号瞬时频率Ts=0.01;t=0:Ts:10;f=50; %50Hzsignal=cos(2*pi*f*t)+j*sin(2*pi*f*t);for i=1:length(siganal)theta(i)=atan(imag(signal(i))/real(signal(i)));endfreq=diff(theta)/(2*pi*Ts)理论上来讲freq的所有元素都应该等于50(50Hz
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/15 14:02:08
matlab求信号瞬时频率Ts=0.01;t=0:Ts:10;f=50; %50Hzsignal=cos(2*pi*f*t)+j*sin(2*pi*f*t);for i=1:length(siganal)theta(i)=atan(imag(signal(i))/real(signal(i)));endfreq=diff(theta)/(2*pi*Ts)理论上来讲freq的所有元素都应该等于50(50Hz
matlab求信号瞬时频率
Ts=0.01;
t=0:Ts:10;
f=50; %50Hz
signal=cos(2*pi*f*t)+j*sin(2*pi*f*t);
for i=1:length(siganal)
theta(i)=atan(imag(signal(i))/real(signal(i)));
end
freq=diff(theta)/(2*pi*Ts)
理论上来讲freq的所有元素都应该等于50(50Hz),但是居然会出现值为-450的元素!
请问这是什么问题?
matlab求信号瞬时频率Ts=0.01;t=0:Ts:10;f=50; %50Hzsignal=cos(2*pi*f*t)+j*sin(2*pi*f*t);for i=1:length(siganal)theta(i)=atan(imag(signal(i))/real(signal(i)));endfreq=diff(theta)/(2*pi*Ts)理论上来讲freq的所有元素都应该等于50(50Hz
你这个程序贴错了吧,
Ts=0.001还差不多
如果是这样的话,就是fs是1000Hz.
atan在matlab里面取值范围就是[-pi/2,pi/2],因此肯定存在从pi/2到-pi/2的突变,如果采样频率是1000hz的话,1000对应2pi,那么突变-pi对应就是-500hz,所以才会出现从50突变到-450的元素.
求瞬时频率为了避免这种突变,都是取一个中间变量,如
c(i)=signal(i)./signal(i-1)或者c(i)=signal(i).*signal(i-1)' (signal(i-1)的共轭)
然后直接freq = atan(c)/(2*pi*Ts)
for i=1:length(siganal)
theta(i)=atan(imag(signal(i))/real(signal(i)));
end
直接写作theta=atan(imag(signal)/real(signal));
避免循环