欢迎光临散文网 会员登陆 & 注册

傅里叶分析存在的问题

2020-04-20 21:57 作者:ocean_tide  | 我要投稿

在处理海洋和大气时间序列时,我们经常需要用傅里叶变换来对其做频谱分析,寻找其显著周期。傅里叶变换的有关知识大家可以自行百度,这里我举一个有趣的小例子来说明傅里叶变换可能存在的问题。下面的代码改编自MATLAB函数FFT自带的例子,有两个正弦信号,一个频率是50Hz, 另一个是150Hz。将这个两个正弦信号相加,然后做傅里叶变换,结果如图1所示,可以看到在50和150Hz处有峰。但是如果这两个正弦信号不是相加,而是相乘呢?结果如图2所示,在100和200Hz处有峰。原因很简单,大家可以回想起高中学过的三角函数积化和差公式,两个正弦信号相乘可以转化为两个正弦信号相加。傅里叶变换是无法反映乘法运算的,只能反映加法运算。在现实世界里,乘法运算是普遍存在的,比如潮波传播到近海,由于水深变浅,在摩擦项的非线性作用下,会诞生浅水分潮。

Fs = 1000;                    % Sampling frequency

T = 1/Fs;                     % Sample time

L = 1000;                     % Length of signal

t = (0:L-1)*T;                % Time vector

x1=sin(2*pi*50*t);

x2=2*sin(2*pi*150*t);

y= x1+x2; %y= x1.*x2;

NFFT = 2^nextpow2(L); % Next power of 2 from length of y

Y = fft(y,NFFT)/L;

f = Fs/2*linspace(0,1,NFFT/2+1);

figure()

plot(f,2*abs(Y(1:NFFT/2+1)))

xlabel('频率 (Hz)')

ylabel('振幅')

set(gca,'Fontsize',13,'linewidth',1.1)

 

图1 两个正弦信号相加后的频谱


图2  两个正弦信号相乘后的频谱


刚才的例子非常简单易懂,这里再举一个更复杂的例子。保留频率为50Hz的正弦信号,将频率为150Hz的正弦信号替换成随机噪声。如果将50Hz的正弦信号与随机噪声相加,频谱分析结果如图3所示,可以看到在50Hz出有一个明显的峰,其他频率上也有峰,但是都非常小(代表了随机噪声)。如果将50Hz的正弦信号与随机噪声相乘,频谱分析结果如图4所示,在50Hz处已经没有峰了。我们还是可以用积化和差来解释(把随机噪声看成是一系列余弦信号的叠加)。

Fs = 1000;                    % Sampling frequency

T = 1/Fs;                     % Sample time

L = 1000;                     % Length of signal

t = (0:L-1)*T;                % Time vector

x1=sin(2*pi*50*t);

x2=0.5*randn(size(t));

y= x1+x2;%y= x1.*x2

NFFT = 2^nextpow2(L); % Next power of 2 from length of y

Y = fft(y,NFFT)/L;

f = Fs/2*linspace(0,1,NFFT/2+1);

figure()

plot(f,2*abs(Y(1:NFFT/2+1)))

xlabel('频率 (Hz)')

ylabel('振幅')

set(gca,'Fontsize',13,'linewidth',1.1)

图3  正弦信号和噪声相加后的频谱

图4 正弦信号和噪声相乘后的频谱



傅里叶分析存在的问题的评论 (共 条)

分享到微博请遵守国家法律