查看: 1156|回复: 9|关注: 0

[已答复] 用diff函数求两次导数之后少了两行,该怎么解决?

[复制链接]

新手

10 麦片

财富积分


050


4

主题

22

帖子

0

最佳答案
发表于 2018-6-21 11:07:17 | 显示全部楼层 |阅读模式
原因是差分算法本身导致的,n个数据求导后只能得到n-1个数据点。

论坛优秀回答者

专家

2828 麦片

财富积分


20003000


4

主题

5239

帖子

615

最佳答案
  • 关注者: 924
发表于 2018-6-21 11:14:07 | 显示全部楼层
数值计算中,diff并不是求导,而是差分
建议改用gradient

新手

10 麦片

财富积分


050


4

主题

22

帖子

0

最佳答案
 楼主| 发表于 2018-6-27 09:39:51 | 显示全部楼层
本帖最后由 2313xn 于 2018-6-27 17:16 编辑
halleyhit 发表于 2018-6-21 11:14
数值计算中,diff并不是求导,而是差分
建议改用gradient

谢谢 ,根据提示已经做出来了。

[y,t,x]=lsim(sys,f,t,x0);

[Fx,Fy]=gradient(y);

[dFx,dFy]=gradient(Fy);


plot(t,dFy(:,4))

新手

10 麦片

财富积分


050


4

主题

22

帖子

0

最佳答案
 楼主| 发表于 2018-6-27 09:49:48 | 显示全部楼层
halleyhit 发表于 2018-6-21 11:14
数值计算中,diff并不是求导,而是差分
建议改用gradient

求出来的是时间域的加速度,这个是对的。但我想转变成频率域的加速度不知道该怎么做。如果用fft函数,该如何做呢?

我用这个程序求出来的跟书上结果不一样。
[y,t,x]=lsim(sys,f,t,x0);

[Fx,Fy]=gradient(y);

[dFx,dFy]=gradient(Fy);

figure(1)
plot(t,dFy(:,4))

YY=dFy(:,4);

Fs=100;
L=length(YY);
NFFT = 2^nextpow2(L);%better fft makes zero padding.
dyy = fft((YY - mean(YY)),NFFT);%fourier transform of the signal subracting DC Bias Voltage
%Also need to specify NFFT, if we don't, fft() defaults to 512 points
f = Fs/2*linspace(0,1,NFFT/2+1);%span of frequency we want to run through, all the way up to NFFT %value
   

figure(2);
plot(f,abs((dyy(1:NFFT/2+1)))/L);%plotting frequency vs. acceleration. FFT is in Volts*Seconds.
title('Drop Shock Test 1 FFT');
xlabel('Frequency (Hz)');
ylabel('Acceleration (G''s)');

论坛优秀回答者

专家

2828 麦片

财富积分


20003000


4

主题

5239

帖子

615

最佳答案
  • 关注者: 924
发表于 2018-6-27 09:51:50 | 显示全部楼层
2313xn 发表于 2018-6-27 09:49
求出来的是时间域的加速度,这个是对的。但我想转变成频率域的加速度不知道该怎么做。如果用fft函数,该 ...
  1. doc fft
复制代码

第一个范例

新手

10 麦片

财富积分


050


4

主题

22

帖子

0

最佳答案
 楼主| 发表于 2018-6-27 10:40:43 | 显示全部楼层
按照带一个范例编写与书上的结果还是不一致。

YY=dFy(:,4);
Fs=1000;
L=1000;
dy = fft(YY);
P2 = abs(dy/L);
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);

f = Fs*(0:(L/2))/L;
plot(f,P1) ;

论坛优秀回答者

专家

2828 麦片

财富积分


20003000


4

主题

5239

帖子

615

最佳答案
  • 关注者: 924
发表于 2018-6-27 15:29:54 | 显示全部楼层
2313xn 发表于 2018-6-27 10:40
按照带一个范例编写与书上的结果还是不一致。

YY=dFy(:,4);

Fs=1000?不是100么?照着范例写,不是照着抄呀

新手

10 麦片

财富积分


050


4

主题

22

帖子

0

最佳答案
 楼主| 发表于 2018-6-27 16:57:49 | 显示全部楼层
本帖最后由 2313xn 于 2018-6-27 17:15 编辑

我之前是按照100设置的,这个1000是我后来改的。:L

但是Fs=100也是不对的,跟结果对不上。:):):)
谢谢。。。

新手

10 麦片

财富积分


050


4

主题

22

帖子

0

最佳答案
 楼主| 发表于 2018-6-27 17:19:15 | 显示全部楼层
这是我编写的code,FS=100,也是对不上的结果。 AII.m (3.44 KB, 下载次数: 2)

新手

5 麦片

财富积分


050


0

主题

1

帖子

0

最佳答案
发表于 2019-3-15 00:13:23 | 显示全部楼层
halleyhit 发表于 2018-6-21 11:14
数值计算中,diff并不是求导,而是差分
建议改用gradient

你真是太棒了,帮大忙了,膜拜大神
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

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