我是靠谱客的博主 俊秀蚂蚁,这篇文章主要介绍MATLAB中Spectrum_Calc可实现傅里叶变换,现在分享给大家,希望可以做个参考。

从Matlab的帮助文档中,可以提取出这样一个可以用于实际的快速fourier变换程序。

function [Yf,f] = Spectrum_Calc(yt,Fs)
%功能:实现快速fourier变换
%输入参数:yt为时域信号序列,Fs为采样频率
%返回值:Yf为经过fft的频域序列,f为相应频率

L = length(yt);
NFFT = 2^nextpow2(L);
Yf = fft(yt,NFFT)/L;

Yf = 2*abs(Yf(1:NFFT/2+1));
f = Fs/2 * linspace(0,1,NFFT/2+1);
end

 

调用方法:

Fs = 1000;                    % Sampling frequency
T = 1/Fs;                     % Sample time
L = 1000;                     % Length of signal
t = (0:L-1)*T;                % Time vector
% Sum of a 50 Hz sinusoid and a 120 Hz sinusoid
x = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
y = x + 2*randn(size(t));     % Sinusoids plus noise

[Yf,f] = Spectrum_Calc(y,Fs);
plot(f,Yf);

image

备注:

(1)关于Fs/2的说明:这个其实是采样定理的规定,即当采样频率fs.max大于信号中最高频率fmax的2倍时(fs.max>=2fmax),采样之后的数字信号完整地保留了原始信号中的信息,所以,这里f的最大值为Fs/2。如果大于此值,比如取Fs,那么频域上的图像会关于Fs/2对称,而此时靠右侧的尖峰频率实际上是不存在的。

(2)这个Spectrum_Calc是用矩形窗截断的数据,在某些情况下可以加Hanning窗或其他窗,方法很简单

function [Yf,f] = Spectrum_Calc(yt,Fs)
%功能:实现快速fourier变换
%输入参数:yt为时域信号序列,Fs为采样频率
%返回值:Yf为经过fft的频域序列,f为相应频率

L = length(yt);

% 加Hanning窗

w = hann(L);

yt = yt(:).*w(:);

NFFT = 2^nextpow2(L);
Yf = fft(yt,NFFT)/L;

Yf = 2*abs(Yf(1:NFFT/2+1));
f = Fs/2 * linspace(0,1,NFFT/2+1);
end

Matlab帮助文档关于fft的说明

fft

Fast Fourier transform
Syntax

Y = fft(x)
Y = fft(X,n)
Y = fft(X,[],dim)
Y = fft(X,n,dim)

最后

以上就是俊秀蚂蚁最近收集整理的关于MATLAB中Spectrum_Calc可实现傅里叶变换的全部内容,更多相关MATLAB中Spectrum_Calc可实现傅里叶变换内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部