ω罪方法集成功能

74(30天)
托马索Ballantini
托马索Ballantini 2023年4月12日10点
编辑: 保罗 2023年4月15日15:41
你好,我是一个学生与matlab信号处理和练习。我试图整合一个正弦函数除以(我* 2 *π* f)。我试图这样做两次,好像我的信号是加速,我想计算位移。我不明白为什么它获得速度但并不与第二集成工作。这是代码。非常感谢每一个人。
清晰的所有;关闭所有;clc;
fs = 20;%采样频率
t = 0:1 / fs: 600;t = t。';%的时间向量
f1 = 0.01;%的振荡频率
acc =罪(2 *π* f1 * t);%加速度信号
N =长度(acc);
情节(t, acc);
acc_fft = fft (acc);%的fft加速
f = linspace (0 f / 2长度(acc_fft));f = f。';% freequency向量
ω= 2 *π* f;%ω向量
ω(1)=每股收益;%的第一个任期内不同于零
我*ωvel_fft = acc_fft. / (1);% fft速度将bt iω
韦尔=传输线(vel_fft);%速度在时间域
vel_analytic = 1 /(2 *π* f1) * cos(2 *π* f1 * t);
情节(t,真正的(或者));
持有
情节(t, vel_analytic‘*’)
传奇(“Velocita otenuta da FFT的,“Velocita analitica”)
disp_analytic = 1 /(2 *π* f1) ^ 2 *罪(2 *π* f1 * t);%分析位移
情节(t, disp_analytic)
我*ωdisp_fft = vel_fft. / (1);%的fft位移vel_fft除以(iω)
disp =传输线(disp_fft);%在时域位移
持有
情节(t)的(disp))

接受的答案

保罗
保罗 2023年4月14日17:23
编辑:保罗 2023年4月15日15:41
你好,托马索,
从加速度的原创代码(我更喜欢使用行向量)
%使用行向量
fs = 20;%采样频率
t = 0:1 / fs: 600;% t = t。';%的时间向量
f1 = 0.01;%的振荡频率
acc =罪(2 *π* f1 * t);%加速度信号
N =长度(acc);
情节的fft
acc_fft = fft (acc);%的fft加速
f = linspace (0 f / 2长度(acc_fft));% f = f。';% freequency向量
情节(f、abs (acc_fft),“o”)、网格
0.02轴([0 0 1 e2])
我们看到两个问题。首先,峰值出现在f = 0.005,当它应该在f1 = 0.01。频率向量,f,不正确的定义。最后一点是fs / 2,当它应该fs - fs / N。第二,我们看到非常小的,但非零,在峰值点,如果试图分析纯正弦信号不应该发生的情况一样。这些点是acc向量是一个元素的结果太久,即。acc的周期性扩展并不是一个完美的正弦波。
所以我们重新定义acc
N = 12000;
t = (0: n - 1) / fs;
acc =罪(2 *π* f1 * t);%加速度信号
acc_fft = fft (acc);%的fft加速
acc的和样品应该是零,但它不是因为浮点计算错误。
总和(acc)
ans = -2.5463 e-13
根据定义,第一点在acc_fft应该acc的总和,理论上应该是零。
acc_fft (1)
ans = -6.4812 e15汽油
这是非常小的,所以我们将迫使它是零。这将是重要的。
acc_fft (1) = 0;
定义正确的对应于acc_fft frquency向量
f = (0: N - 1) / N * fs;% f = f。';% freequency向量
FFT的阴谋。
情节(f、abs (acc_fft),“o”)、网格
0.02轴([0 0 1 e2])
正如预期的那样,峰值在f = 0.01和其他点都非常非常接近于零。在这一点上,我们将合理设置的所有值的acc_fft零除了两个山峰(你会看到第二个峰值远右边缘的情节如果你改变轴命令适当)。
现在有另一个问题。它看起来像我们使用离散傅里叶变换/系列说明发生了什么连续傅里叶变换或连续复杂的傅里叶级数。然而,离散傅里叶变换,计算 fft ,按照惯例,至少在Matlab中,只计算正频率(因为底层的离散时间傅里叶变换周期)。然而,连续变换不定期,我们必须小心区分正面和负面frquencies。所以,如果我们想使用离散傅里叶变换作为连续情况下的分析工具,我们必须使用 fftshift ifftshift 正确之间来回切换离散和连续的频率。
定义对应的频率向量连续变换域。
%ω= 2 *π* f;%ω向量
ω= (- N / 2: (N / 2 - 1)) / N * 2 *π* fs;
因为我们要除以ω之后,用一个较小的值替换ω= 0
ω(ω= = 0)=每股收益;%的第一个任期内不同于零
fftshift acc_fft,除以频率,然后ifftshift回来,thentake传输线。这里的元素在acc_fft除以每股收益已被迫0以上。如果我们没有这样做,我们会得到一个不正确的非零值在vel_fft(1),这将导致另一个问题当我们做以下vel_fft(1) /每股收益。
记住,从理论上讲,只有两个元素的acc_fft零,只有这些元素应该除以ω的相应值。但是,更容易把整个数组除以ω,这就是为什么我们必须防止除以零项,真的不应该划分。
vel_fft = ifftshift (fftshift (acc_fft)。/我*ω)(1);% fft速度将bt iω
韦尔=传输线(vel_fft);%速度在时间域
计算分析结果和overplot。良好的匹配
vel_analytic = 1 /(2 *π* f1) * cos(2 *π* f1 * t);
情节(t,真正的(或者));
持有
情节(t, vel_analytic‘*’)
传奇(“Velocita otenuta da FFT的,“Velocita analitica”)
做相同的位移。再一次,一个关键元素是vel_fft被除以每股收益是零。它不是,然后disp_fft(1)我们是一个非常大的值,这将改变整个disp_fft上升(或下降),较大的值。我相信你看到代码中的效果。
disp_analytic = 1 /(2 *π* f1) ^ 2 *罪(2 *π* f1 * t);%分析位移
情节(t, disp_analytic)
disp_fft = ifftshift (fftshift (vel_fft)。/我*ω)(1);%的fft位移vel_fft除以(iω)
disp =传输线(disp_fft);%在时域位移
持有
情节(t)的(disp))
情节(t,实际(disp) -disp_analytic)
良好的匹配。
2的评论

登录置评。

答案(1)

Askic V
Askic V 2023年4月12日11时55
编辑:Askic V 2023年4月14日10点
你得到的奇怪值disp因为分工与eps(很少)。
这段代码会产生你希望:
清晰的所有;关闭所有;clc;
fs = 20;%采样频率
t = 0:1 / fs: 600;t = t。';%的时间向量
f1 = 0.01;%的振荡频率
acc =罪(2 *π* f1 * t);%加速度信号
N =长度(acc);
情节(t, acc);
acc_fft = fft (acc);%的fft加速
f = linspace (0 f / 2长度(acc_fft));f = f。';% freequency向量
ω= 2 *π* f;%ω向量
ω(1)= 1;%的第一个任期内不同于零
我*ωvel_fft = acc_fft. / (1);% fft速度将bt iω
韦尔=传输线(vel_fft);%速度在时间域
vel_analytic = 1 /(2 *π* f1) * cos(2 *π* f1 * t);
情节(t,真正的(或者));
持有
情节(t, vel_analytic‘*’)
传奇(“Velocita otenuta da FFT的,“Velocita analitica”)
disp_analytic = 1 /(2 *π* f1) ^ 2 *罪(2 *π* f1 * t);%分析位移
情节(t, disp_analytic)
我*ωdisp_fft = vel_fft. / (2);%的fft位移vel_fft除以(iω)
disp =传输线(disp_fft);%在时域位移
持有
情节(t,实际(disp),“o”)
请注意有一个部门找disp_fft 2 *我*ω。
我不知道这是为什么,但它可能与偶数/奇数功能。有很多人非常熟悉FFT和传输线,可能知道为什么这个比例是很重要的。
2的评论
Askic V
Askic V 2023年4月13日在29
不,这不是你的错,我补充道 我*ωdisp_fft = vel_fft. /(2)为了正确。你的原始代码1我*ω。执行,自己看看。

登录置评。

类别

找到更多的在傅里叶分析和过滤帮助中心文件交换

标签

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的