MATLAB中关于FFT的问题 100
我现在有两个文件,两文件只有横纵坐标,点数相同,貌似要用FFT分析两组点出图的相似度,请问我该如何操作,或者看哪个教程上手快一点...我不需要懂MATLAB其他操作,只需要完成这一步就可以了... 展开
现成的FFT程序网上可以下到很多,但如何定义相似度需要考虑一下。可以考虑用相对变化率的形式(相对变化率=(数值1-数值2)/数值1 或者 相对变化率=(数值1-数值2)/数值2 )。
有一种情况跟你的需求很像:设计滤波器后说明滤波效果。这种情况,需要比较变化前后的信号进行幅频特性、相频特性曲线,以此说明滤波效果。在这一过程中就需要对两个信号分别进行FFT变换,以求得幅频曲线和相频曲线。
具体过程如下:
step1:将横坐标定义为t(matlab赋值语句t=[*,*,*];),将纵坐标定义为y(matlab赋值语句y=[*,*,*];),采样频率就是临近两个横坐标差值的倒数(一般横坐标都应为时间);
step2:新建一个m文件(快捷键为ctrl+N);
step3:将如下程序复制到m文件中
t=[*,*,*];%填入横轴数据
y=[*,*,*];%填入纵轴数据
N = size(t,2);%行向量时,列向量是为N = size(t,1);
N = 2^(nextpow2(N)-1);
Y = fft(y,N);
mag_Y = abs(Y)/N*2;%各个频率点处的幅值,这个就是fft变换后的数据
f = fs/2*linspace(0,1,N/2+1);%对应的频率值
plot(f,mag_Y(1:N/2+1))%显示变换后的曲线
step4:亲测实例
t = 1:0.001:10;
y= 2*sin(2*pi*100*t);%频率为100Hz
%=================以下同step3中代码==============
N = size(t,2);%行向量时,列向量是为N = size(t,1);
N = 2^(nextpow2(N)-1);
Y = fft(y,N);
mag_Y = abs(Y)/N*2;%各个频率点处的幅值,这个就是fft变换后的数据
f = fs/2*linspace(0,1,N/2+1);%对应的频率值
plot(f,mag_Y(1:N/2+1))%显示变换后的曲线
%=================以上同step3中代码==============
结果:
由于matlab自带FFT函数有些小瑕疵,所以在100Hz处幅值虽然接近2,但还是有些偏差的,对于偏差的修正网上也有相应的方法,如果需要在留言。