MATLAB fft变换,横坐标为频率
如何写呢?clc;clear;closeall;t=0:0.001:0.6;x=sin(2*pi*50*t)+2*sin(2*pi*120*t);Y=fft(x,512)...
如何写呢?
clc;clear;close all;
t = 0:0.001:0.6;
x = sin(2*pi*50*t)+2*sin(2*pi*120*t);
Y = fft(x,512);
py1=Y/512;
py2=py1*2; % 为什么乘以2
py3=abs(py2);
i=(0:256)*500/256; % 为什么乘以500
plot(i,py3(1:257))
%py3=abs(py2)*2^(1/2); 展开
clc;clear;close all;
t = 0:0.001:0.6;
x = sin(2*pi*50*t)+2*sin(2*pi*120*t);
Y = fft(x,512);
py1=Y/512;
py2=py1*2; % 为什么乘以2
py3=abs(py2);
i=(0:256)*500/256; % 为什么乘以500
plot(i,py3(1:257))
%py3=abs(py2)*2^(1/2); 展开
2个回答
2009-03-12
展开全部
可以用自功率密度函数或互功率谱密度函数,给你一个自功率谱:
>> fni=input('随机信号谱分析:','s')
>> fid=fopen(fni,'r')
>> sf=200
>> nfft=1024
>>fno= ‘自功率谱密度 ‘
>> a=fscanf(fid,'%f',[2,inf])
>> status=fclose(fid)
>> x=a(1,:)
>> y=a(2,:)-a(1,:)
>> f=0:sf/nfft:sf/2-sf/nfft
>> w=hanning(nfft)
>> z=psd(y,nfft,sf,w,nfft/2)
>> nn=1:nfft/4
>> subplot(2,1,1)
>>plot(f(nn),abs(z(nn)))
>> xlabel('频率(Hz)')
>> ylabel('幅值(m^2/s^4)')
>> grid on
>>fid=fopen(fno,’w’)
>> for k=1:nfft/2
fprintf(fid,'%f%%%f\n',f(k),abs(z(k)))
end
status=fclose(fid)
>> fni=input('随机信号谱分析:','s')
>> fid=fopen(fni,'r')
>> sf=200
>> nfft=1024
>>fno= ‘自功率谱密度 ‘
>> a=fscanf(fid,'%f',[2,inf])
>> status=fclose(fid)
>> x=a(1,:)
>> y=a(2,:)-a(1,:)
>> f=0:sf/nfft:sf/2-sf/nfft
>> w=hanning(nfft)
>> z=psd(y,nfft,sf,w,nfft/2)
>> nn=1:nfft/4
>> subplot(2,1,1)
>>plot(f(nn),abs(z(nn)))
>> xlabel('频率(Hz)')
>> ylabel('幅值(m^2/s^4)')
>> grid on
>>fid=fopen(fno,’w’)
>> for k=1:nfft/2
fprintf(fid,'%f%%%f\n',f(k),abs(z(k)))
end
status=fclose(fid)
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
matlab FFT 横坐标问题:前人关于FFT横坐标的详细阐述
我们知道Fourier分析是信号处理里很重要的技术,matlab提供了强大的信号处理能力,但是有一些细节部分需要我们注意。
记信号f(t)的起始时间为t_start, 终止时间为t_end, 采样周期为t_s, 可以计算信号的持续时间Duration为 t_end – t_start, 信号离散化造成的采样点数 N = Duration/t_s + 1;
根据Fourier分析的相关结论,我们知道时域的采样将会造成频域的周期化,该周期为采样频率f_s(著名的香农采样定理基于此).
于是, 经过matlab的fft函数处理后,得到数据的横坐标为0:f_s/(N-1):f_s。相关代码如下所示:
%matlab fft 测试代码
t_s = 0.01;
t_start = 0.5; t_end = 5;
t = t_start:t_s:t_end;
y = 0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t);
y_f = fft(y);
subplot(3,1,1);
plot(t,y); title('original signal');
Duration = t_end - t_start;
Sampling_points = Duration/t_s + 1;
f_s = 1/t_s;
f_x = 0:f_s/(Sampling_points-1):f_s;
subplot(3,1,2);
plot(f_x,abs(y_f)); title('fft transform');
subplot(3,1,3);
plot(f_x-f_s/2,abs(fftshift(y_f))); title('shift fft transform');
也就是说,如果我们不使用fftshift,其变换后的横坐标为0:f_s/(N-1):f_s,如果使用fftshift命令,0频率分量将会移到坐标中心,这也正是matlab中帮助中心给出的意思:对fft的坐标进行了处理。实际上由于频谱的周期性,我们这样做是合理的,可以接受的。
我们知道Fourier分析是信号处理里很重要的技术,matlab提供了强大的信号处理能力,但是有一些细节部分需要我们注意。
记信号f(t)的起始时间为t_start, 终止时间为t_end, 采样周期为t_s, 可以计算信号的持续时间Duration为 t_end – t_start, 信号离散化造成的采样点数 N = Duration/t_s + 1;
根据Fourier分析的相关结论,我们知道时域的采样将会造成频域的周期化,该周期为采样频率f_s(著名的香农采样定理基于此).
于是, 经过matlab的fft函数处理后,得到数据的横坐标为0:f_s/(N-1):f_s。相关代码如下所示:
%matlab fft 测试代码
t_s = 0.01;
t_start = 0.5; t_end = 5;
t = t_start:t_s:t_end;
y = 0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t);
y_f = fft(y);
subplot(3,1,1);
plot(t,y); title('original signal');
Duration = t_end - t_start;
Sampling_points = Duration/t_s + 1;
f_s = 1/t_s;
f_x = 0:f_s/(Sampling_points-1):f_s;
subplot(3,1,2);
plot(f_x,abs(y_f)); title('fft transform');
subplot(3,1,3);
plot(f_x-f_s/2,abs(fftshift(y_f))); title('shift fft transform');
也就是说,如果我们不使用fftshift,其变换后的横坐标为0:f_s/(N-1):f_s,如果使用fftshift命令,0频率分量将会移到坐标中心,这也正是matlab中帮助中心给出的意思:对fft的坐标进行了处理。实际上由于频谱的周期性,我们这样做是合理的,可以接受的。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |