单面的快速傅里叶transfrom从数据文件中

1视图(30天)
大家好,我想使用matlab的数据文件,其中包含速度值和不同位置形成一条直线,速度情节形成sinosodial形状和我想应用FFT然后frequecny,并用它来找到每个文件的波长。
(我有附一个示例文件,第一列的位置,第二列velcoity值,第三列时间具体文件)
我期待的是这个速度sinosodial波转换成一个单面的FFT,然后找到相应的频率最高的峰值波长将定义在文件(labmda = 1 /频率)
我试了但是它是远离我的期望,我应该得到一个FFT高峰,和1 /(相应的x值,峰值)假设给sinosodial波的波长。
data =负载(“data_1945.txt”);
%定义x和y的上传文件
x =数据(:1);
y =数据(:,2);
%从FFT获得波长
一个= fftshift (abs (fft (y)));
(党、频率)= findpeaks(一个);
[pk1 idx1] = max (pks);%最大峰值及其索引
pk_max = pk1;
idx_max = idx1;
f1 = idx_max;%最大峰值频率
λ= 1 / f1;
图(1)
图(一)
抓住
图(2)
情节(x, y)
抓住

接受的答案

马修•诺伊
马修•诺伊 2022年10月27日
你好
如果你记录的阶段数不是很高,你的信号是“干净”那么我宁愿succesives零序时间区别过境点(插值)
这将是确定更精确的比fft只有几个样品(频率分辨率df = Fs /样品)
数据= readmatrix (“data_1945.txt”);
t =数据(:1);
fs = 1 /意味着(diff (t));
y =数据(:,2);
% fft方法
[fhz, fft_spectrum] = do_fft (t (:), y (:));
[amplitude1, idx] = max (fft_spectrum);
频率= fhz (idx);
period1 = 1 /频率
amplitude1
%零交叉法替代清洁周期信号
zct = find_zc (t y 0);
period2 =意味着(diff (zct))
amplitude2 = 0.5 * (max (y) - min (y))
图(1)
情节(t y“b”、zct 0(1,元素个数(zct)),“* r”,“markersize”,25)
标题(目标位置:1.5弧度的)
包含(“时间[s]”)
ylabel (的位置(弧度))
传奇(“信号”,“佐点”)
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
函数zct = find_zc (x, y,阈值)
%斜率为正“零”交叉检测,使用线性插值
y = y -阈值;
zci = @(数据)找到(diff(符号(数据))> 0);%定义功能:返回+佐的指标
第九= zci (y);%找到+ x的零交叉的指标
ZeroX = @ (x0, y0 (x1, y1) x0——(y0。* (x0 - x1))。/ (y0 - y1);%以内插值替换的x值零交点
zct = ZeroX (x (ix), y (ix) x(第九+ 1),y(第九+ 1));
结束
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
函数[freq_vector, fft_spectrum] = do_fft(时间、数据)
dt =意味着(diff(时间));
Fs = 1 / dt;
nfft =长度(数据);%提高频率分辨率= > nfft等于信号长度
%窗口:汉宁
=汉宁窗(nfft);
cor_coef =(窗口)/长度总和(窗口);
% fft扩展
% fft_spectrum = abs (fft(数据))/ nfft;
fft_spectrum = abs (fft(数据。*窗口))* 2 * cor_coef / nfft;
%一个sid fft频谱%选择上半年
如果快速眼动(nfft, 2)% nfft奇怪
选择= (1:(nfft + 1) / 2) ';
其他的
选择= (1:nfft / 2 + 1) ';
结束
:fft_spectrum = fft_spectrum(选择);
freq_vector =(选择- 1)* Fs / nfft;
结束

答案(1)

侯赛因Kokash
侯赛因Kokash 2022年10月27日
你好 马修 ,谢谢你的输入!
Actullay步骤,一些时候信号看起来很乱,是这样的:
这就是为什么我试图实现FFT来得到一个准确的结果通过频率振幅。
我的想法是让每一个FFT结果和发现它的峰值frequecy指数,然后1 /频率波长。
有什么建议吗?很感激!
8的评论

登录置评。

类别

找到更多的在时频分析帮助中心文件交换

s manbetx 845


释放

R2018a

社区寻宝

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

开始狩猎!