[未答复] Matlab小波包分解后plot作图后出现错误,该怎么解决?

[复制链接]
ydgshmnh 发表于 2018-2-7 11:11:43
本帖最后由 ydgshmnh 于 2018-2-7 11:21 编辑

如图所示为我的原始时间-位移信号,x轴范围是0:0.01,可在作小波包分解后,plot(t,cfs1)时出现错误?说是矢量个数必须相同,我自己感觉作plot(t,y)时也没有出错,可在小波分解后作图时怎么出错了呢?我该怎么解决?
代码如下:
  1. clear
  2. clc
  3. close all hidden
  4. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  5. %fni=input('频域积分-输入数据文件名:','s');
  6. fid=fopen('E:\碧冰\实验数据\6.15\1.txt','r');
  7. fs=12500000;        %采样频率
  8. fmin=5000;     %最小截止频率
  9. fmax=15000;     %最大截止频率
  10. c=1000000;        %单位变换系数
  11. it=2;       %积分次数
  12. %sx=fscanf(fid,'%s',1);       %横向坐标轴的标注
  13. %sy1=fscanf(fid,'%s',1);       %纵向坐标轴输入单位的标注
  14. %sy2=fscanf(fid,'%s',1);       %纵向坐标轴输出单位的标注
  15. fno='out.txt';       %输出数据文件名
  16. xx=fscanf(fid,'%f',[1,inf]);   %输入数据存成行向量
  17. x=xx*9800;
  18. %status=fclose(fid);
  19. n=length(x);
  20. %建立时间向量
  21. t=0:1./fs:(n-1)./fs;   
  22. %大于并最接近n的2的幂次方为FFT的长度
  23. nfft=2^nextpow2(n);
  24. %FFT变换
  25. y=fft(x,nfft);
  26. %计算频率间隔(Hz/s)
  27. df=fs/nfft;
  28. %计算指定频带对应频率数组的下标
  29. ni=round(fmin/df+1);
  30. na=round(fmax/df+1);
  31. %计算圆频率间隔(rad/s)
  32. dw=2*pi*df;
  33. %建立正的离散圆频率向量
  34. w1=0:dw:2*pi*0.5*fs;
  35. %建立负的离散圆频率向量
  36. w2=-2*pi*(0.5*fs-df):dw:-dw;
  37. %将正负圆频率向量组合成一个向量
  38. w= [w1,w2];
  39. %以积分次数为指数,建立圆频率变量向量
  40. w=w.^it;
  41. %进行积分的频域变换
  42. a=zeros(1,nfft);
  43. a(2:nfft-1)=y(2:nfft-1)./w(2:nfft-1);
  44. if it==2
  45. %进行二次积分的相位变换
  46. y=-a;
  47. else
  48. %进行一次积分的相位变换
  49. a1=imag(a);
  50. a2=real(a);
  51. y=a1-a2*i;
  52. end
  53. a=zeros(1,nfft);
  54. %消除指定正频带外的频率成分
  55. a(ni:na)=y(ni:na);
  56. %消除指定负频带外的频率成分
  57. a(nfft-na+1:nfft-ni+1)=y(nfft-na+1:nfft-ni+1);
  58. %IFFT变换
  59. y=ifft(a,nfft);
  60. %取逆变换的实部n个元素并乘以单位变换系数为积分结果
  61. y=real(y(1:n))*c;
复制代码

无损原始信号.png

1 条回复


ydgshmnh 发表于 2018-2-7 11:23:56
  1. figure;
  2. plot(t,y);
  3. s=y;

  4. wpt=wpdec(s,3,'dmey');  %小波包分解,3代表分解3层,像图1那样,'dmey'使用meyr小波
  5. cfs1=wpcoef(wpt,[2,0]);
  6. cfs2=wpcoef(wpt,[2,1]);
  7. cfs3=wpcoef(wpt,[2,2]);
  8. cfs4=wpcoef(wpt,[2,3]);
  9. figure;
  10. plot(t,cfs1);
复制代码

这个是前面写不进去的代码,新手,求帮助。谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
热门教程
站长推荐
快速回复 返回顶部 返回列表