Advertisement

离散时间傅里叶变换和离散傅里叶变换

阅读量:

离散时间傅里叶变换和离散傅里叶变换

该系统采用离散傅里叶变换\textbf{DFT}对输入信号进行频域分析,并通过\textbf{IDFT}实现频域信号与时域信号间的逆向转换关系。
具体而言,
输入序列x(n)经过\textbf{DFT}运算后生成频域序列X(k)
X(k)则可经由\textbf{IDFT}反推出原始时间序列x(n)
其中,
\textbf{DFT}[x(n)]\textbf{IDFT}[X(k)]分别表示离散傅里叶变换及其逆变换过程,
W_N^{nk}W_N^{-nk}则代表复指数因子,
用于完成信号在时频域之间的转换运算。

\begin{cases} X(e^{j\omega})被定义为DTFT[x(n)]的结果,并通过累加x(n)e^{-j\omega n}\quad k=0,1,\dots,N-1的方式进行计算 \\ x(n)由IDTFT[X(e^{j\omega})]给出,并通过将X(e^{j\omega})乘以e^{j\omega n}\quad在区间[-π, π]内进行积分来计算 \end{cases}

自定义dtft()

复制代码
    function [w,X] = dtft(x)
    % DTFT变换
    N = length(x);
    n = 0:N-1;
    w = linspace(-2*pi,2*pi,500); %将[-2pi,2pi]分割成500份
    X = x * exp(-1j*n'*w);
    end

自定义dft()

复制代码
    function X = dft(xn)
    % 计算离散傅立叶变换(DFT)
    N = length(xn);  % 获取序列长度
    n = 0:N-1;  % 时间序列
    X = zeros(1, N);  % 初始化频域序列
    	for k = 0:N-1
    	    X(k+1) = sum(xn .* exp(-1i*2*pi*k*n/N));  % 计算DFT的每个频率分量
    	end
    end

例子:

复制代码
    % DTFT
    clear;
    xn = [0 1 2 3 4 5 6 7];
    [w,X] = dtft(xn);
    N = length(xn);
    n = 0:N-1;
    
    figure('Color','w');
    subplot(2 ,2 ,[1,2])
    stem(xn,"filled");
    subplot(223)
    plot(w,abs(X));
    subplot(224)
    plot(w,angle(X));
    
    % DFT
    
    clear;
    xn = [0 1 2 3 4 5 6 7 zeros(1,92)];
    X = dft(xn);
    N = length(xn);
    n = 0:N-1;
    
    figure('Color','w');
    subplot(2 ,2 ,[1,2])
    stem(xn,"filled");
    subplot(223)
    stem(abs(X),'filled');
    subplot(224)
    stem(angle(X),'filled');

全部评论 (0)

还没有任何评论哟~