|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
我这有一个振动台试验数据,要进行模态识别,我对数据先进行了带通滤波处理,在进行EMD分解,但出现问题,滤波后得到的时域信号EMD分解不出来 IMF=emd(y) 得到的imf 和y一某一样,程序如下:
clear all
clc
fid=fopen('A7e1s1h.dat'); %读入数据,原始数据文件名在程序中输入
x=fscanf(fid,'%f',[1,inf]);
sf=255; %sf为采样频率
fmin=4; %根据傅立叶谱来判断各阶模态频率的范围,选取合适的滤波频率,单位:Hz
fmax=4.2;
status=fclose(fid);
n=length(x);
t=(0:1/sf:(n-1)/sf); %建立离散输出时间向量
nfft=2^nextpow2(n); % 建立FFT长度
ni=round(fmin*nfft/sf+1); %四舍五入取整求最小截止频率对应数组元素的下标
na=round(fmax*nfft/sf+1); %四舍五入取整求最大截止频率对应数组元素的下标
y=fft(x,nfft); %FFT变换,结果存于y
a=zeros(1,nfft);
a(ni:na)=y(ni:na); %将y的正频率带通内的元素赋值给a
a(nfft-na+1:nfft-ni+1)=y(nfft-na+1:nfft-ni+1);%将y的负频率带通内的元素赋值给a
y=ifft(a,nfft); %将滤波处理后数据恢复出时域信号
y=(real(y(1:n))); %取逆变换的实部n个元素为滤波结果列向量
subplot(2,1,1) %绘制滤波前的时程曲线图形
figure(1)
plot(t,x)
subplot(2,1,2) %绘制滤波后的时程曲线图形
plot(t,y)
%%%以上为输入数据和滤波过程%%%
imf=emd(y); %调用EMD函数,得到滤波后的各阶IMF
emd_visu(y,1:length(y),imf) |
|