五种傅里叶变换的分析(FT、FS、DTFT、DFT、DFS)(基于MATLAB)

五种傅里叶变换

FT傅里叶变换 Fourier Transform
FS傅里叶级数 Fourier Series
DTFT离散时间傅里叶变换 Discrete-time Fourier Transform
DFT离散傅里叶变换 Discrete Fourier Transform
DFS离散傅里叶级数 Discrete Fourier Series

各种信号时域和频域的关系

时域 频域
连续 、非周期性 非周期性、连续
连续 、周期性 非周期性、离散
离散 、非周期性 周期性、连续
离散 、周期性 周期性、离散

先放一张图让大家理解一下这几种变换相互之间的联系与区别。
在这里插入图片描述
在这篇文章中,我会用MATLAB画图的方式来解释这五种傅里叶变换的区别与联系。

一、(FT)傅里叶变换

在这里插入图片描述
这是傅里叶变换的公式,它可以将一个 以时间t为自变量 的连续的信号 f(t) 转换为 以频率为自变量 的函数 F(jf),该函数是复数形式的。

该公式有三个关键点:

  • f(t) 是一个时域上连续的信号。
  • t 从负无穷到正无穷积分。
  • 频率f 连续,其得到的结果 F(jf) 也为频率域上连续的频谱。

但计算机并不能处理连续的信号,得到的结果也是离散的,而且计算机只能处理有限长度的数据。故计算机不能实现傅里叶变换。

大家都知道一个连续的函数之所以连续,是因为其中每个值之间的间隔为无穷小,离散的信号不管间距多么的小,始终只能无限接近于连续的信号。
那么我们给与这样一个假设
当离散的间隔达到一个非常小的程度,我们就将该离散信号看成是连续信号。
① 将信号f(t)以∆t=0.001s进行采样,由于采样间隔很小,近似看成时域上连续的信号。
② 频率f也取一个∆f=0.001Hz的间隔,由于频率间隔很小,近似看成频率域上连续。

这样我们就可以通过计算机实现傅里叶变换了。

1、

我们产生出一个连续的信号(以0.001s为采样间隔),如下:
在这里插入图片描述
在这里插入图片描述
MATLAB代码:

Dt = 0.001;   %信号采样间隔,s
tlen = 4;     %信号长度,s
t = 0:Dt:tlen;
tsize = tlen/Dt+1;
k = 1;
for i=t
    if i<=2
        y(k) = 0.5*i;
    end
    if i>2
        y(k) = 2-0.5*i;
    end
    k=k+1;
end
plot(t,y);

这里产生了一个三角形状的信号,只有在t=0~4s有值,其余时刻都为0,这样便可以使得傅里叶变换在负无穷到正无穷上积分有意义。

2、

进行傅里叶变换:

MATLAB中的傅立叶变换是一种非常常用的信号处理方法,可以用于分析信号的频率特征。而尺度变换是指对信号进行缩放以改变其时间尺度,例如将信号放大或缩小。基于MATLAB GUI的傅里叶变换分析的仿真设计可以方便地进行信号处理和分析。 下面是一个简单的MATLAB GUI程序,用于进行傅立叶变换和尺度变换的仿真设计: ```matlab function varargout = FourierTransform(varargin) % FOURIERTRANSFORM MATLAB code for FourierTransform.fig % FOURIERTRANSFORM, by itself, creates a new FOURIERTRANSFORM or raises the existing % singleton*. % % H = FOURIERTRANSFORM returns the handle to a new FOURIERTRANSFORM or the handle to % the existing singleton*. % % FOURIERTRANSFORM('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in FOURIERTRANSFORM.M with the given input arguments. % % FOURIERTRANSFORM('Property','Value',...) creates a new FOURIERTRANSFORM or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before FourierTransform_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to FourierTransform_OpeningFcn via varargin. % % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one % instance to run (singleton)". % % See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to help FourierTransform % Last Modified by GUIDE v2.5 19-Aug-2021 12:00:06 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @FourierTransform_OpeningFcn, ... 'gui_OutputFcn', @FourierTransform_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT % --- Executes just before FourierTransform is made visible. function FourierTransform_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to FourierTransform (see VARARGIN) % Choose default command line output for FourierTransform handles.output = hObject; % Update handles structure guidata(hObject, handles); % UIWAIT makes FourierTransform wait for user response (see UIRESUME) % uiwait(handles.figure1); % --- Outputs from this function are returned to the command line. function varargout = FourierTransform_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structure varargout{1} = handles.output; % --- Executes on button press in load_button. function load_button_Callback(hObject, eventdata, handles) % hObject handle to load_button (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) [file, path] = uigetfile({'*.wav;*.mp3;*.mp4;*.avi','All Audio and Video Files';'*.wav','WAV Files (*.wav)';'*.mp3','MP3 Files (*.mp3)';'*.mp4','MP4 Files (*.mp4)';'*.avi','AVI Files (*.avi)'},'Choose an audio or video file'); if isequal(file,0) || isequal(path,0) return; else [audio, fs] = audioread(fullfile(path,file)); handles.audio = audio; handles.fs = fs; axes(handles.original_audio); plot(audio); xlabel('Time (s)'); ylabel('Amplitude'); title('Original Audio'); guidata(hObject, handles); end % --- Executes on button press in play_button. function play_button_Callback(hObject, eventdata, handles) % hObject handle to play_button (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) sound(handles.audio, handles.fs); % --- Executes on button press in FFT_button. function FFT_button_Callback(hObject, eventdata, handles) % hObject handle to FFT_button (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) audio = handles.audio; fs = handles.fs; L = length(audio); NFFT = 2^nextpow2(L); Y = fft(audio, NFFT)/L; f = fs/2*linspace(0,1,NFFT/2+1); axes(handles.FFT_plot); plot(f, 2*abs(Y(1:NFFT/2+1))); xlabel('Frequency (Hz)'); ylabel('|Y(f)|'); title('Single-Sided Amplitude Spectrum of y(t)'); % --- Executes on button press in scale_button. function scale_button_Callback(hObject, eventdata, handles) % hObject handle to scale_button (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) audio = handles.audio; fs = handles.fs; scale_factor = str2double(get(handles.scale_factor_edit, 'String')); scaled_audio = resample(audio, scale_factor, 1); axes(handles.scaled_audio); plot(scaled_audio); xlabel('Time (s)'); ylabel('Amplitude'); title(['Scaled Audio (' num2str(scale_factor) 'x)']); handles.scaled_audio = scaled_audio; guidata(hObject, handles); function scale_factor_edit_Callback(hObject, eventdata, handles) % hObject handle to scale_factor_edit (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of scale_factor_edit as text % str2double(get(hObject,'String')) returns contents of scale_factor_edit as a double % --- Executes during object creation, after setting all properties. function scale_factor_edit_CreateFcn(hObject, eventdata, handles) % hObject handle to scale_factor_edit (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end % --- Executes on button press in scaled_FFT_button. function scaled_FFT_button_Callback(hObject, eventdata, handles) % hObject handle to scaled_FFT_button (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) scaled_audio = handles.scaled_audio; fs = handles.fs; L = length(scaled_audio); NFFT = 2^nextpow2(L); Y = fft(scaled_audio, NFFT)/L; f = fs/2*linspace(0,1,NFFT/2+1); axes(handles.scaled_FFT_plot); plot(f, 2*abs(Y(1:NFFT/2+1))); xlabel('Frequency (Hz)'); ylabel('|Y(f)|'); title('Single-Sided Amplitude Spectrum of y(t) (Scaled)'); ``` 这个GUI程序包括以下组件: - load_button:加载音频文件 - play_button:播放音频文件 - FFT_button:将音频信号进行傅立叶变换,并绘制频谱图 - scale_factor_edit和scale_button:对音频信号进行尺度变换,并绘制缩放后的信号图 - scaled_FFT_button:对缩放后的信号进行傅立叶变换,并绘制频谱图 使用该程序,您可以通过以下步骤进行傅立叶变换和尺度变换的仿真设计: 1. 运行程序,并单击“load_button”按钮以加载音频文件。 2. 单击“play_button”按钮以播放音频文件。 3. 单击“FFT_button”按钮以进行傅立叶变换,并绘制频谱图。 4. 在“scale_factor_edit”文本框中输入缩放因子,并单击“scale_button”按钮以对音频信号进行尺度变换,并绘制缩放后的信号图。 5. 单击“scaled_FFT_button”按钮以对缩放后的信号进行傅立叶变换,并绘制频谱图。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值