Matlab语言实现正反傅氏变换的相关知识点以及代码

正反傅氏变换的相关知识点

已知关于正反傅氏变换的表达式为

正反傅氏变换的表达式

傅氏正变换

根据公式可知,在进行正变换时可将时域信号转换为频域信号,下面将对如何确定频域f的 范围进行相关推导:

在这里插入图片描述

傅氏逆变换

傅氏逆变换即将频域信号转换为时域信号,下面将对如何确定时间t的范围进行相关推导:

在这里插入图片描述

正反傅氏变换的Matlab代码

%% 此程序用于实现正反傅氏变换
%% 选用正弦函数:y=A*sin(2*pi*f*t)

clc;clear all; close all;

Fs=1000; % the sampling frequency
Ts=1/Fs; % the samplng time
dt=0:Ts:5-Ts; % the time range
n=length(dt); % the length of the time

f1=10;
f2=30;
f3=70;

y1=10*sin(2*pi*f1*dt); % the first function
y2=30*sin(2*pi*f2*dt); % the second function
y3=15*sin(2*pi*f3*dt); % the third function
y4=y1+y2+y3; % the sum of the former three functions

% 画图:时域信号
figure
temp(:,1)=y1;
temp(:,2)=y2;
temp(:,3)=y3;
temp(:,4)=y4;
for i=1:4
    subplot(4,1,i)
    plot(dt,temp(:,i),'LineWidth',0.6)
    xlabel('Time (s)');
    ylabel('Amplitude');
    if i==1
        title('Time Domain Signal(Original)');
    end
    set(gca, 'LineWidth',2,'Fontname', 'TimesNewroman','FontWeight','bold','FontSize',12)
end

%% 在进行傅氏正变换时,数据的长度不用加到2^nextpow2(n),即可实现正变换
ff1=fft(y1,n);
ff2=fft(y2,n);
ff3=fft(y3,n);
ff4=fft(y4,n);
xfft=1/(dt(end)-dt(1))*(0:n/2-1); % 频域信号的横坐标轴即f的范围

%画图:频域信号
figure
temp2(:,1)=ff1(1:n/2);
temp2(:,2)=ff2(1:n/2);
temp2(:,3)=ff3(1:n/2);
temp2(:,4)=ff4(1:n/2);
for i=1:4
    subplot(4,1,i)
    plot(xfft,abs(temp2(:,i)),'LineWidth',0.6)
    xlabel('Frequenct (Hz)');
    ylabel('Amplitude');
    if i==1
        title('Frequency Domain Signal(FFT)');
    end
    set(gca, 'LineWidth',2,'Fontname', 'TimesNewroman','FontWeight','bold','FontSize',12)
end

%% 在进行正变换后,在进行反变换,检验傅氏变换的正确性
%% 注意事项:在进行逆傅式变换时,用的是正变换后整个的频域信号,在求时间t时在原来公式的基础上除以2即可
yy1=ifft(ff1,n);
yy2=ifft(ff2,n);
yy3=ifft(ff3,n);
yy4=ifft(ff4,n);

xifft=1/(xfft(end)-xfft(1))*(0:n-1)/2;
figure
temp3(:,1)=yy1;
temp3(:,2)=yy2;
temp3(:,3)=yy3;
temp3(:,4)=yy4;
for i=1:4
    subplot(4,1,i)
    plot(xifft,temp3(:,i),'LineWidth',0.6)
    xlim([xifft(1) xifft(end)])
    xlabel('Time (s)');
    ylabel('Amplitude');
    if i==1
        title('Time Domain Signal(iFFT)');
    end
    set(gca, 'LineWidth',2,'Fontname', 'TimesNewroman','FontWeight','bold','FontSize',12)
end
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页