Advertisement

数字信号处理matlab基础例题相关

阅读量:

离散傅里叶变换(DFT)

已知序列x(n)={1 2 4 3},试用MATLAB求其离散傅里叶变换X(k),然后再求X(k)的离散傅里叶反变换x(n),并对结果进行比较。

dft与dftmtx均可实现傅里叶变换后者可以看作是傅里叶变换所形成的正交基
y=dftmtx(4)*x与y=dft(x)等价,dftmtx产生的矩阵元素均为旋转因子的行列倍(也就是系数,都需要后面再乘一个x)
A.’ 表示求A得非共轭转置矩阵, A’ 表示求A得共轭转置矩阵,在下述应用无所谓因为不包含虚数部分。
rand(m,n)表示产生0-1之间的m行n列的随机数
display()为显示函数,将括号内内容所指代的对象显示到命令窗口去
conj为做共轭
利用dft求idft两个方法
%其一:先将X(K)取共轭,再直接调用FFT,在对运算结果取共轭并乘以常数1/N
%其二:先调用FFT计算X(K)的DFT,然后把运算结果翻褶后平移N位,最后乘以常数1/N
display (xn)显示函数,将xk的内容以xk= XXX 显示到命令窗口,去掉括号就直接显示xk

复制代码
    %计算DFT
    xn=[1 2 4 3]';%矩阵A'作用为求A得共轭转置矩阵,A.'为求A的非共轭转置矩阵
    %x=rand(4,1);y=dftmtx(4)*x与y=dft(x)等价,dftmtx产生的矩阵元素均为旋转因子的行列倍
    xk=dftmtx(4)*xn;%dft与dftmtx均可实现傅里叶变换后者可以看作是傅里叶变换所形成的正交基
    display (xk)%显示函数,将xk的内容以xk= XXX 显示到命令窗口,去掉括号就直接显示xk
    %计算IDFT
    xk=[10 -3+1i 0 -3-1i]';%同理,对xk的矩阵做共轭转置
    xn=conj(dftmtx(4))/4*xk;%利用dft求idft两个方法,conj为做共轭,此处用方法一
    %其一:先将X(K)取共轭,再直接调用FFT,在对运算结果取共轭并乘以常数1/N
    %其二:先调用FFT计算X(K)的DFT,然后把运算结果翻褶后平移N位,最后乘以常数1/N
    display (xn)
    
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-14/Dpam9q3K2b0cYWsxkCZwenNT5uoS.png)

对连续的单一频率周期信号cos(0.5 pi t)按采样频率fs=8fa采样,截取长度分别选N=48和N=32,用MATLAB分别绘出其离散傅里叶变换的幅度谱。

fft,进行快速傅里叶运算

复制代码
    %对连续的单一频率周期信号cos(0.5*pi*t)按采样频率fs=8fa采样,截取长度分别选N=48和N=32
    k=16;%采样以后得到的序列为x(n)=cos(0.5*pi*n/8),,所以k应为8?
    n1=[0:1:47];%以1为间隔取点,起点为0,终点为48
    xn1=cos(0.5*pi*n1/k);%采样的得到的序列
    subplot(221);plot(n1,xn1);grid;
    xlabel('t/T');ylabel('x(n)');
    xk1=fft(xn1);%对xn1做fft运算
    subplot(222);stem(n1,abs(xk1),'.');grid;
    xlabel('k');ylabel('X(k)');
    %截止长度为32
    n2=[0:1:31];
    xn2=cos(0.5*pi*n2/k);
    subplot(223);plot(n2,xn2);grid;
    xlabel('t/T');ylabel('x(n)');
    xk2=fft(xn2);
    subplot(224);stem(n2,abs(xk2),'.');grid;
    xlabel('k');ylabel('X(k)');
    %比较图像得,当N=48时有部分频谱超出了折叠频率而导致了频谱泄露
    %而N=32时并未发生频谱泄露,因为其正好截取了两个整周期(不是四个?),
    
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-14/amNsWSxbgLKjBrdpe1AOyRVtn5FT.png)

全部评论 (0)

还没有任何评论哟~