当前位置:   article > 正文

Matlab代码:采用仿真信号验证fft、ifft、滤波和加窗处理_ifft算法matlab

ifft算法matlab

一、仿真信号设置

        单频15 Hz,调频100-200 Hz、800-1000 Hz和3000-3500 Hz;幅值均为1;时长设置为1秒;采样频率为10 kHz。

  1. fs = 10e3;
  2. t = (0:fs-1)/fs;
  3. s1 = sin(2*pi*15.*t);
  4. s2 = sin(2*pi*(100+100.*t).*t);
  5. s3 = sin(2*pi*(800+200.*t).*t);
  6. s4 = sin(2*pi*(3000+500.*t).*t);
  7. data = s1+s2+s3+s4; %仿真信号
  8. N = length(data); %信号长度

二、傅里叶变换(fft)

  1. f = fs*(1:(N/2))/N; %频率变换
  2. fre_S = fft(data,N)
  3. Y = 2*abs(fre_S(2:N/2+1)) /N; %幅值变换
  4. plot(f,Y);
图1

三、带通滤波后做fft

  1. %%%%%% 带通滤波
  2. fup = 4000; %带通滤波频率上限
  3. fdown = 50; %带通滤波频率下限
  4. filterNum = 4;
  5. freq = [fdown fup];
  6. Wn = freq/(fs/2);
  7. [b,a] = butter(filterNum,Wn);
  8. filter_data = filter(b,a,data);
  9. %%%%%% fft
  10. fre_x1= fft(filter_data,N);
  11. Ydata_x1 = 2*abs(fre_x1(2:N/2+1)) / N;
  12. fdata = fs*(1:(N/2))/N;
  13. plot(fdata,Ydata_x1);
图2

四、加窗

        加窗的作用是为了防止频谱泄露,至于是否加窗这个取决于你所分析的信号,即加窗这个步骤是非必要的。

  1. x1 = filter_data'; %滤波信号
  2. w = hanning(N); %汉宁窗
  3. x2 = 1.633*x1.*w; %加窗后的时域信号
  4. fre_x2= fft(x2,N);
  5. Ydata = 2*abs(fre_x2(2:N/2+1)) /N; %幅值变换
  6. fdata = fs*(1:(N/2))/N; %频率变换
  7. plot(fdata,Ydata);
图3
图4

五、fft和加窗处理(增加fft的点数)

  1. nfft = 2^nextpow2(N); %增加fft点数
  2. Y1 = fft(x1,nfft);
  3. Y2 = fft(x2,nfft);
  4. f2= [0:fs/nfft:fs/2];
  5. figure;
  6. plot(f2,abs(Y1(1:nfft/2+1) *2/nfft));
  7. hold on;
  8. plot(f2,abs(Y2(1:nfft/2+1) *2/nfft));
图5  未加窗和加窗的频谱对比

六、逆傅里叶变换(ifft)

  1. X1=ifft(fre_x1); %未加窗信号
  2. X2=ifft(fre_x2); %加窗信号
  3. y1=ifft(Y1,nfft); %未加窗,增加fft点数
  4. y2=ifft(Y2,nfft); %加窗,增加fft点数
  5. figure
  6. plot(real(X1));
  7. hold on;
  8. plot(x1);
  9. legend('X1','x1');
  10. figure
  11. plot(real(X2));
  12. hold on;
  13. plot(real(y1));
  14. hold on;
  15. plot(real(y2));
  16. legend('X2','y1','y2');
图6  ifft后的信号和原始信号的时域波形对比
图7

七、ifft除以窗逆变换

  1. X22 = X2./w/1.633;
  2. y22 = y2(1:N)./w/1.633;
  3. rmse5 = sqrt(sum((X22 - x1).^2)/N) %均方根误差
  4. rmse6 = sqrt(sum((y22(1:N) - x1).^2)/N)
  5. %%%% 输出误差
  6. % rmse5 = 1.7691e-11
  7. % rmse6 = 9.7542e-12

        综上所述,fft、ifft、滤波和加窗处理是信号处理中常用的方法。其中,针对fft和ifft之间的相互变换,如果fft变换中乘以系数和加窗,那么ifft时相应的除以窗和系数逆变换回去;fft中增加点数的作用是提高频谱的分辨率,也就是频率划分得更细。至于加窗的这一处理,上述的仿真信号明显不需要加窗的,加窗是为了防止频谱泄露的,实际中是因分析信号而定的,不是为了加窗而加窗。 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/527292
推荐阅读
相关标签
  

闽ICP备14008679号