用matlab进行快速傅里叶变换,将长度-时间图转换成幅值频率图,总感觉有点问题?
下面这是实验数据(数据保存在shuju.m文件中)。%t8121620Data=...[2.00E+002.40E+012.04E+002.74E+012.08E+001...
下面这是实验数据(数据保存在shuju.m文件中)。
% t 8 12 16 20
Data = ...
[2.00E+00 2.40E+01
2.04E+00 2.74E+01
2.08E+00 1.64E+01
2.13E+00 1.77E+01
2.16E+00 2.08E+01
2.21E+00 2.46E+01
2.24E+00 2.89E+01
2.29E+00 3.21E+01
2.33E+00 2.95E+01
2.37E+00 3.03E+01
2.42E+00 1.44E+01
2.45E+00 1.94E+01
2.49E+00 2.16E+01
2.54E+00 2.33E+01
2.58E+00 2.87E+01
2.63E+00 2.99E+01
2.66E+00 3.05E+01
2.71E+00 3.24E+01
2.75E+00 2.52E+01
2.79E+00 2.02E+01
2.83E+00 2.25E+01
2.88E+00 1.92E+01
2.92E+00 2.29E+01
2.96E+00 2.77E+01
3.00E+00 3.05E+01
3.04E+00 3.16E+01
3.08E+00 3.10E+01
3.13E+00 2.22E+01
3.17E+00 1.66E+01
3.20E+00 1.88E+01
3.25E+00 2.55E+01
3.29E+00 3.03E+01
3.33E+00 3.07E+01
3.37E+00 1.94E+01
3.42E+00 2.56E+01
3.46E+00 3.17E+01
3.50E+00 3.30E+01
3.54E+00 1.69E+01
3.58E+00 2.01E+01
3.62E+00 2.54E+01
3.66E+00 2.97E+01
3.71E+00 3.23E+01
3.74E+00 3.23E+01
3.79E+00 3.27E+01
3.83E+00 1.44E+01
3.88E+00 1.81E+01
3.91E+00 2.19E+01
3.96E+00 2.57E+01
4.01E+00 2.73E+01
4.04E+00 2.83E+01
4.08E+00 2.54E+01
4.13E+00 2.92E+01
4.16E+00 2.08E+01];
然后,这是程序
clear all
clc
shuju;
t=Data(:,1);y=Data(:,2);
figure;
subplot(2,1,1);plot(t,y)
title('长度')
xlabel('时间(s)')
ylabel('长度(mm)')
Fs=25;L=53;
N = 2^nextpow2(L); %采样点数,采样点数越大,分辨的频率越精确,N>=L,超出的部分信号补为0
Y = fft(y,N)/N*2 %除以N乘以2才是真实幅值,N越大,幅值精度越高
f = Fs/N*(0:1:N-1); %频率
A = abs(Y); %幅值
subplot(2,1,2);
plot(f(1:N/2),A(1:N/2)); %函数fft返回值的数据结构具有对称性,因此我们只取前一半
title('幅值频谱')
xlabel('频率(Hz)')
ylabel('幅值')
我用上述程序fft变换后的图不正确,不知道哪里出错了,求大神解答,不胜感激。如果需要讨论,可以qq或者vx详谈。 展开
% t 8 12 16 20
Data = ...
[2.00E+00 2.40E+01
2.04E+00 2.74E+01
2.08E+00 1.64E+01
2.13E+00 1.77E+01
2.16E+00 2.08E+01
2.21E+00 2.46E+01
2.24E+00 2.89E+01
2.29E+00 3.21E+01
2.33E+00 2.95E+01
2.37E+00 3.03E+01
2.42E+00 1.44E+01
2.45E+00 1.94E+01
2.49E+00 2.16E+01
2.54E+00 2.33E+01
2.58E+00 2.87E+01
2.63E+00 2.99E+01
2.66E+00 3.05E+01
2.71E+00 3.24E+01
2.75E+00 2.52E+01
2.79E+00 2.02E+01
2.83E+00 2.25E+01
2.88E+00 1.92E+01
2.92E+00 2.29E+01
2.96E+00 2.77E+01
3.00E+00 3.05E+01
3.04E+00 3.16E+01
3.08E+00 3.10E+01
3.13E+00 2.22E+01
3.17E+00 1.66E+01
3.20E+00 1.88E+01
3.25E+00 2.55E+01
3.29E+00 3.03E+01
3.33E+00 3.07E+01
3.37E+00 1.94E+01
3.42E+00 2.56E+01
3.46E+00 3.17E+01
3.50E+00 3.30E+01
3.54E+00 1.69E+01
3.58E+00 2.01E+01
3.62E+00 2.54E+01
3.66E+00 2.97E+01
3.71E+00 3.23E+01
3.74E+00 3.23E+01
3.79E+00 3.27E+01
3.83E+00 1.44E+01
3.88E+00 1.81E+01
3.91E+00 2.19E+01
3.96E+00 2.57E+01
4.01E+00 2.73E+01
4.04E+00 2.83E+01
4.08E+00 2.54E+01
4.13E+00 2.92E+01
4.16E+00 2.08E+01];
然后,这是程序
clear all
clc
shuju;
t=Data(:,1);y=Data(:,2);
figure;
subplot(2,1,1);plot(t,y)
title('长度')
xlabel('时间(s)')
ylabel('长度(mm)')
Fs=25;L=53;
N = 2^nextpow2(L); %采样点数,采样点数越大,分辨的频率越精确,N>=L,超出的部分信号补为0
Y = fft(y,N)/N*2 %除以N乘以2才是真实幅值,N越大,幅值精度越高
f = Fs/N*(0:1:N-1); %频率
A = abs(Y); %幅值
subplot(2,1,2);
plot(f(1:N/2),A(1:N/2)); %函数fft返回值的数据结构具有对称性,因此我们只取前一半
title('幅值频谱')
xlabel('频率(Hz)')
ylabel('幅值')
我用上述程序fft变换后的图不正确,不知道哪里出错了,求大神解答,不胜感激。如果需要讨论,可以qq或者vx详谈。 展开
2个回答
展开全部
代码没什么问题,图像看上去不怎么平滑,N取1024*4试试。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
大概看了一下,幅值没取对数吗
更多追问追答
追问
取了的,abs(Y)
追答
你那是绝对值不是对数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询