声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2402|回复: 4

[综合讨论] 离散加速度信号积分的报错 怎么解决呢?跪求

[复制链接]
发表于 2014-4-22 10:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
本帖最后由 牛小贱 于 2014-4-22 11:21 编辑

程序如下
  1. %频域积分
  2. %%%%%%%%%%%%%%%%%%%%%%%%%%
  3. clear
  4. clc
  5. close all hidden
  6. %%%%%%%%%%%%%%%%%%
  7. fni=input('频域积分-输入数据文件名:','s');
  8. fid=fopen(fni,'r');
  9. sf=fscanf(fid,'%f',100000);    %采样频率
  10. fmin=fscanf(fid,'%f',1000);    %最小截止频率
  11. fmax=fscanf(fid,'%f',10000);   %最大截止频率
  12. c=fscanf(fid,'%f',1);      %单位变换系数
  13. it=fscanf(fid,'%f',1);     %积分次数
  14. sx=fscanf(fid,'%s',1);     %横向坐标轴的标注
  15. sy1=fscanf(fid,'%s',1);    %纵向坐标轴输入单位的标注
  16. sy2=fscanf(fid,'%s',1);    %纵向坐标轴输出单位的标注
  17. fno=fscanf(fid,'%s',1);     %输出数据文件名
  18. x=fscanf(fid,'%f',[1,inf]);%输入数据存成行向量
  19. status=fclose(fid);
  20. n=length(x);
  21. %建立时间向量
  22. t=0:1/sf:(n-1)/sf;
  23. %大于并最接近n的2的幂次方为FFT长度
  24. nfft=2^nextpow2(n);
  25. %FFT变换
  26. y=fft(x,nfft);
  27. %计算频率间隔(Hz/s)
  28. df=sf/nfft;
  29. %计算指定频带对应频率数组的下标
  30. ni=round (fmin/df+1);
  31. na=round (fmax/df+1);
  32. %计算圆频率间隔(rad/s)
  33. dw=2*pi*df;
  34. %建立正的离散圆频率向量
  35. w1=0:dw:2*pi*(0.5*sf);
  36. %建立负的离散圆频率向量
  37. w2=-2*pi*(0.5*sf-df):dw:-dw;
  38. %将正负圆频率向量组合成一个向量
  39. w=[w1,w2];
  40. %以积分次数为指数,建立圆频率变量向量
  41. w=w.^it;
  42. %进行积分的频域变换
  43. a=zeros(1,nfft);
  44. a(2:nfft-1) =y(2:nfft-1)./w(2:nfft-1);
  45. if it == 2
  46.    y=-a; %进行二次积分的相位变换
  47. else
  48.    real(y)=imag(a);
  49.    imag(y)=-real(a); %进行一次积分的相位变换
  50. end
  51. a=zeros(1,nfft);
  52. %消除指定正频带外的频率成分
  53. a(ni:na)=y(ni:na);
  54. %消除指定负频带外的频率成分
  55. a(nfft-na+1:nfft-ni+1)=y(nfft-na+1:nfft-ni+1);
  56. y=ifft(a,nfft); %IFFT变换
  57. %取逆变换的实部n个元素并乘以单位变换系数为积分结果
  58. y=real(y(1:n))*c;
  59. subplot(2,1,1); plot(t,x); xlabel(sx); ylabel(sy1); grid on; %绘制几分钱的时程曲线图形
  60. subplot(2,1,2); plot(t,y); xlabel(sx); ylabel(sy2); grid on; %绘制积分后的时程曲线图形
  61. %打开文件输出积分后的数据
  62. fid=fopen(fno,'w');
  63. for k=1:n, fprintf(fid,'%f \n',y(k)); end
  64. status=fclose(fid)
复制代码
报错如下
??? Error using ==> mrdivide
Matrix dimensions must agree.
Error in ==> ceshi1 at 31
ni=round (fmin/df+1);
处理的数据在附件。。。
跪求大神
}%{N`9A%]ZJJQ0WSPQ]29DI.jpg

yi.txt

266 Bytes, 下载次数: 7

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

发表于 2014-4-22 22:23 | 显示全部楼层
原理不懂,还是想看看结果
发表于 2014-4-23 08:27 | 显示全部楼层
size(fmin);size(df)看看矩阵大小匹配吗
发表于 2014-4-24 09:21 | 显示全部楼层
我想LZ误解fscanf的使用了!?
[A,count] = fscanf(fid, format, size)

第三个参数是矩阵大小而非赋值
发表于 2014-6-3 21:54 | 显示全部楼层
看不懂,结果有吗
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-12 08:04 , Processed in 0.072303 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表