设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1621|回复: 0

基于matlab的傅里叶变换

[复制链接]

8

主题

93

金钱

152

积分

入门用户

发表于 2019-10-30 16:05:29 | 显示全部楼层 |阅读模式

例子1
作用:使用傅里叶变换找出隐藏在噪声中的信号的频率成分。(指定信号的参数,采样频率为1 kHz,信号持续时间为1秒。)
  1. Fs = 1000;            % 采样频率
  2. T = 1/Fs;             % 采样周期
  3. L = 1000;             % 信号长度
  4. t = (0:L-1)*T;        % 时间向量

  5. %%形成一个信号,包含振幅为0.7的50hz正弦信号和振幅为1的120hz正弦信号。
  6. S = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
  7. X = S + 2*randn(size(t));             %用零均值的白噪声破坏信号,方差为4。


  8. plot(1000*t(1:50),X(1:50))
  9. title('Signal Corrupted with Zero-Mean Random Noise')
  10. xlabel('t (milliseconds)')
  11. ylabel('X(t)')1234567891011121314
复制代码


1.jpg
由上图可知:从时域中我们很难观察到信号的频率成分。怎么办呢?当然使用强大的傅里叶变换。
  1. Y = fft(X);     %计算傅里叶变换,X是加噪后的信号

  2. %%
  3. %计算双边谱P2。然后计算基于P2的单面谱P1和偶值信号长度L。(不太理解。。。)
  4. P2 = abs(Y/L);
  5. P1 = P2(1:L/2+1);
  6. P1(2:end-1) = 2*P1(2:end-1);

  7. %%
  8. %定义频率域f并绘制单面振幅谱P1。由于增加的噪音,振幅不完全是0.7和1。平均而言,较长的信号产生更好的频率近似。
  9. f = Fs*(0:(L/2))/L;
  10. plot(f,P1)
  11. title('Single-Sided Amplitude Spectrum of X(t)')
  12. xlabel('f (Hz)')
  13. ylabel('|P1(f)|')123456789101112131415
复制代码

2.jpg
  1. %%
  2. %现在,对原始的,未被损坏的信号进行傅里叶变换,并得到准确的振幅,0.7和1.0。
  3. Y = fft(S);   %S时原始的,没有加噪的信号。
  4. P2 = abs(Y/L);
  5. P1 = P2(1:L/2+1);
  6. P1(2:end-1) = 2*P1(2:end-1);

  7. plot(f,P1)
  8. title('Single-Sided Amplitude Spectrum of S(t)')
  9. xlabel('f (Hz)')
  10. ylabel('|P1(f)|')1234567891011
复制代码


3.jpg
4.png


例子2
作用:利用傅里叶变换,将高斯脉冲从时域转换为频域。
  1. Fs = 100;           % Sampling frequency
  2. t = -0.5:1/Fs:0.5;  % Time vector
  3. L = length(t);      % Signal length

  4. X = 1/(4*sqrt(2*pi*0.01))*(exp(-t.^2/(2*0.01)));

  5. plot(t,X)
  6. title('Gaussian Pulse in Time Domain')
  7. xlabel('Time (t)')
  8. ylabel('X(t)')12345678910
复制代码

5.jpg
  1. %%
  2. %要使用fft函数将信号转换为频域,首先要确定一个新的输入长度,该输入长度是原信号长度的下一个2次方。
  3. %为了提高fft的性能,这将使信号X以尾随零的形式出现。

  4. n = 2^nextpow2(L);
  5. Y = fft(X,n);
  6. f = Fs*(0:(n/2))/n;
  7. P = abs(Y/n);

  8. plot(f,P(1:n/2+1))
  9. title('Gaussian Pulse in Frequency Domain')
  10. xlabel('Frequency (f)')
  11. ylabel('|P(f)|')12345678910111213
复制代码

6.jpg

例子3余弦波
比较时域和频域的余弦波。指定信号的参数,采样频率为1kHz,信号持续时间为1秒。
  1. Fs = 1000;                    % Sampling frequency
  2. T = 1/Fs;                     % Sampling period
  3. L = 1000;                     % Length of signal
  4. t = (0:L-1)*T;                % Time vector

  5. x1 = cos(2*pi*50*t);          % First row wave
  6. x2 = cos(2*pi*150*t);         % Second row wave
  7. x3 = cos(2*pi*300*t);         % Third row wave

  8. X = [x1; x2; x3];

  9. for i = 1:3
  10.     subplot(3,1,i)
  11.     plot(t(1:100),X(i,1:100))
  12.     title(['Row ',num2str(i),' in the Time Domain'])
  13. end12345678910111213141516
复制代码

7.jpg
  1. n = 2^nextpow2(L);
  2. dim = 2;
  3. Y = fft(X,n,dim);
  4. P2 = abs(Y/n);
  5. P1 = P2(:,1:n/2+1);
  6. P1(:,2:end-1) = 2*P1(:,2:end-1);
  7. for i=1:3
  8.     subplot(3,1,i)
  9.     plot(0:(Fs/n):(Fs/2-Fs/n),P1(i,1:n/2))
  10.     title(['Row ',num2str(i), ' in the Frequency Domain'])
  11. end1234567891011
复制代码

8.jpg
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

快速回复 返回顶部 返回列表