Winger-ville源程序分解信号
% Wigner-Ville分布计算程序function=SWWignerVille(Sig,SampFreq,FreqBins,GLen,HLen)
%Sig : 输入信号
%FreqBins : 频率轴划分区间数(默认值:512)
%SampFreq : 信号的采集频率
%alfa : 窗函数控制参数
%GLen : 窗函数g的长度(默认值:FreqBins/5)
%HLen : 窗函数h的长度(默认值:FreqBins/4)
%WVD : SWWigner-Ville计算结果
if (nargin<1),
error('At least 1 input required');
end;
% Sig=hilbert(real(Sig)); % 计算信号的解析信号
SigLen=length(Sig); % 获取信号的长度
if (nargin<2),
SampFreq=1;
elseif (nargin<3),
FreqBins=512;
elseif (nargin<4),
GLen=floor(FreqBins/5);
HLen=floor(FreqBins/4);
end;
FreqBins=2^nextpow2(FreqBins);
FreqBins=min(FreqBins,SigLen);
GLen=GLen+1-rem(GLen,2);
HLen=HLen+1-rem(HLen,2);
GWin=window(@gausswin,GLen);
HWin=window(@gausswin,HLen);
Lg=(GLen-1)/2;
Lh=(HLen-1)/2;
HWin=HWin/HWin(Lh+1);
WVD=zeros(FreqBins,SigLen);
wait=waitbar(0,'Under calculation,please wait...');
for kk=1:SigLen,
waitbar(kk/SigLen,wait);
MTau=min();
k=-min():min();
SubG=GWin(Lg+1+k);
SubG=SubG/sum(SubG);
WVD(1,kk)=sum(SubG.*Sig(kk-k).*conj(Sig(kk-k)));%
for tau=1:MTau,
k=-min():min();
SubG=GWin(Lg+1+k);
SubG=SubG/sum(SubG);
R=sum(SubG.*Sig(kk+tau-k).*conj(Sig(kk-tau-k)));
WVD(1+tau,kk)=HWin(Lh+tau+1)*R;
R=sum(SubG.*Sig(kk-tau-k).*conj(Sig(kk+tau-k)));
WVD(FreqBins+1-tau,kk)=HWin(Lh-tau+1)*R;
end;
end;
close(wait);
WVD=fft(WVD);
f=linspace(0,0.5,FreqBins)*SampFreq;
t=(0:(SigLen-1))/SampFreq;
set(gcf,'position',);
set(gcf,'color','w');
axes('position',);
mesh(t,f,abs(WVD));
axis();
colorbar;
xlabel('t/s');
ylabel('f/Hz');
title('平滑伪Wigner-Ville分布');
为什么我应用这个做出的图是这样的呢?
为什么我的纵坐标不是20HZ二是0.2水能给改一下?
都没看到你怎么调用的这个程序。我想你只是直接调用,并没有做其他设置,所以出这样的结果。
在没有设置采样频率的情况下,直接调用这个程序的结果就是这样---归一化频率后的结果:默认情况下直接调用时采样频率被默认为1,另外分析频率受采样定理的限制,这样一来最后出来的结果都在0.5Hz之内。如果你是利用的时频分析的工具箱操作的话,会有选项栏让重新设置采样频率,这样输入正确的采样频率就能输出正确的结果。
补充:没有必要贴上你的Wigner-Ville分布计算程序,如果不是你自己编写的,如果只是从时频分析工具箱中找到的话。另外,在发帖前请搜索相关的内容!最后,建议删帖! 用工具包就可以,没有这样麻烦{:{20}:} yazhoulong 发表于 2012-12-28 21:55 static/image/common/back.gif
用工具包就可以,没有这样麻烦
那你能帮我仿真看看吗
没有数据,怎么仿呢?
页:
[1]