精华内容
下载资源
问答
  • matlab实现dft和fft
    2021-04-20 03:38:15

    对任意长度的序列进行傅里叶变换 DFT 与 FFT 的运算时间比较 设计要求 利用 Matlab 或者 C 语言设计 DFT 和 FFT 程序,比较两种频谱分析方法的 计算速度,并与......

    DFT 与 FFT 计算速度比较分析 用 MATLAB 实现 DFT 及 FFT 对任意长度的序列进行傅里叶变换 DFT 与 FFT 的运算时间比较 利用 Matlab 或者 C 语言设计 DFT 和......

    2 了解用 FFT 进行频谱分析可能出现的分析误差及其原因; 二 实验原理 1.用 DFT 对非周期序列进行谱分析 单位圆上的 Z 变换就是序列的傅里叶变换,即 X (e ......

    实验目的 (1) 学习信号 DFT 变换的 matlab 实现; (2) 学习 fft 的 matlab 实现; (3) 验证 DFT 的相关性质。 2. 思考题 (1) 若 xn sin n 8 sin n......

    ,N-1 N k0 (3-5) FFT 为离散傅里叶变换 DFT 的快速算法,对...

    2 了解用 FFT 进行频谱分析可能出现的分析误差及其原因; 二 实验原理 1、用 DFT 对非周期序列进行谱分析 单位圆上的 Z 变换就就是序列的傅里叶变换,即 X (......

    DFT 与 FFT 计算速度比较分析 用 MATLAB 实现 DFT 及 FFT 对任意长度的序列进行傅里叶变换 DFT 与 FFT 的运算时间比较 利用 Matlab 或者 C 语言设计 DFT 和......

    电子技术研发ElectronicsR&D 电一 子一 技一 术~ 按时问抽取的基2FFT算法分析及MATLAB实现张登奇李宏民李丹 (湖南理工学院信息与通信工程学院) 摘要:DFT是一种......

    实验目的 (1) 学习信号 DFT 变换的 matlab 实现; (2) 学习 fft 的 matlab 实现; (3) 验证 DFT 的相关性质。 2. 思考题(1) 若 xn sin n 8 sin n ......

    [Tx_pilot_estimate_ifft;padding_zero]; Tx_pilot_estimate_dft=fft(Tx_pilot_estimate_ifft_padding_zero); %---DFT估计的线性插值——— int_len=pilot_In......

    16=fft(x2n,16); %计算 x2n 的 16 点 DFT X3k8=fft(x3n,8); %计算 x3n 的 8 点 DFT X3k16=fft(x3n,16); %计算 x3n 的 16 点 DFT %幅......

    基 4FFT 原理及 MATLAB 实现一.时域抽取法基 4FFT 基本原理: 有限长序列错误!未找到引用源。的 N 点 DFT 为: 错误!未找到引用源。 k=0,1,2…,N-1 设......

    matlab 实现DFT FFT 12页 免费 DFT变换的MATLAB实验 10页 2下载券 Matlab实现DFT和FFT 3页 免费 基于Matlab的长序列快速... 4页 免费 matlab dtft ......

    实验三用FFT对信号进行频谱分析报告及MATLAB程序_数学_自然科学_专业资料。实用标准文案 实验三 用 FFT 对信号进行频谱分析 一 实验目的 1 能够熟练掌握快速离散傅......

    按时间抽取的基2FFT算法分析与MATLAB实现_教学计划_教学研究_教育专区。.. 按...(n)和 x2(n),再分别进行 DFT 运算,求出与之对应的 X1(k)和 X2(k),......

    ? y= fft(x, N)采用N点FFT。 ? ? 2. 用DFT计算线性卷积的MATLAB实现 ? 函数ifft用于快速计算向量或矩阵的离散傅里叶 逆变换,与函数fft的调用规则基本相同......

    fft(x8n,32); N=32; f=2/N*(0:N-1); subplot(2,2,2);stem(f,abs(X8k32),'.'); %绘制 8 点 DFT 的幅频特性图 title('(6b) 32 点 DFT......

    DFT 与 FFT 计算速度比较分析 用 MATLAB 实现 DFT 及 FFT 对任意长度的序列进行傅里叶变换 DFT 与 FFT 的运算时间比较 利用 Matlab 或者 C 语言设计 DFT 和......

    实验三用FFT对信号进行频谱分析及MATLAB程序文件_数学_自然科学_专业资料。. . 实验三 用 FFT 对信号进行频谱分析 一 实验目的 1 能够熟练掌握快速离散傅立叶......

    其本质仍然是 DFT MATLAB 中实现 FFT 的计算 Y = fft(x) % x 为一个序列 (向量),存放采集信号的数据 Y = fft(x,n) % x 的定义同上,n 定义计算......

    更多相关内容
  • matlab实现DFT相关示例

    2013-11-21 21:12:58
    用快速卷积法计算两个有限长度序列的线性卷积
  • 1.MATLAB实现DFT

    千次阅读 2021-10-27 10:12:58
    编写由定义式实现DFT和由矩阵形式实现DFT,以及线性卷积和周期卷积的实现. 文章目录题目重述问题分析以及求解思路程序代码问题1代码问题3代码 题目重述 1.编写由定义式实现DFT和由矩阵形式实现DFT。 ...

    编写由定义式实现的DFT和由矩阵形式实现的DFT,以及线性卷积和周期卷积的实现.

    题目重述

    1.编写由定义式实现的DFT和由矩阵形式实现的DFT。

    在这里插入图片描述

    问题分析以及求解思路

    待完善(请耐心等待)

    程序代码

    问题1代码

    x=rand(1,5);
    N=length(x);
    xk=zeros(1,N);
    n=0:1:N-1;
    k=0:1:N-1;
    xk=x*exp(-1i*(n'*k)*2*pi/N)
    subplot(211)
    stem([1:N],abs(xk))
    title('定义法求DFT');
    ylabel('X(k)');
    xlabel('k');
    x=x';
    w=dftmtx(N);
    X=w*x
    subplot(212)
    stem([1:N],abs(X))
    title('矩阵法求DFT');
    ylabel('X(k)');
    xlabel('k');
    
    

    问题3代码

    x=rand(1,5);
    h=rand(1,4);
    L=length(x);
    M=length(h);
    N=M+L-1;
    x_new=zeros(1,N);
    h_new=zeros(1,N);
    dftx_new=zeros(1,N);
    dfth_new=zeros(1,N);
     for i=1:1:L
         x_new(i)=x_new(i)+x(i);%补零
     end
     
     for j=1:1:M
         h_new(j)=h_new(j)+h(j);
     end
     subplot(221)
     stem([1:L],x);
     title('原x(n)序列');
     ylabel('x(n)');
     xlabel('n');
     subplot(222)
     stem([1:M],h);
     title('原h(n)序列');
     ylabel('h(n)');
     xlabel('n');
     y=conv(x,h);
     subplot(223)
     stem(1:1:length(y),y)
     title('线性卷积');
     ylabel('y(n)');
     xlabel('n');
     n=0:1:7;
     k=0:1:7;
     
     dftx_new=x_new*exp(-1i*(n'*k)*2*pi/N);
     dfth_new=h_new*exp(-1i*(n'*k)*2*pi/N);
     Y=dftx_new.*dfth_new;
     zz=Y*exp(1i*2*pi/length(Y)*(n'*k))/length(Y);
     subplot(224)
     stem([1:N],abs(zz)) 
     title('周期卷积');
     ylabel('y(n)');
     xlabel('n');
    
    
    展开全文
  • Matlab实现DFT

    万次阅读 多人点赞 2018-01-10 14:17:31
    掌握DFT的概念和用法(DFT实质:有限长序列M傅里叶变换的有限点N的离散采样) % 在频域分析信号分两种: % (1).对确定性信号进行傅里叶变换,分析频谱信息。 % (2).随机信号的傅里叶信号不存在,转向研究它...

    原文链接

    前言:
    摘自:
    http://zhidao.baidu.com/link?url=lB3CS6qxlLIy7EuC8-X0MGNcFndC4ntrfXHdzdk5Wo_oJuRut8iHXoaOTEwA4BRBUeXpuibFuNd5Vp1hKsnsE_KrY8ALSESgHYpJHCPNKbO

      MATLAB 傅里叶变换:
      傅立叶变换的分类:
    傅立叶级数:将周期性连续函数变换为离散频率点上的函数
    傅立叶变换:将连续函数变换为连续频率的函数
    离散时间傅立叶变换:将离散函数变换为连续频率的函数
    离散傅立叶变换:将有限长离散函数变换为离散频率点上的函数
    其中FFT是离散傅立叶变换的快速计算方法,适用于离散信号,并且注意变换后的点数与信号的采样点数一致。尽管可以将信号补0,但补0不能提高频域的分辨率。matlab中提供了函数fft做一维的FFT。

      时域谱和频域谱是相互对应;时域的信号长度,决定频域的采样间隔,它们成导数关系;
      时域中信号有N点,每点间隔dt,所以时域信号长度为N*dt;那么频谱每点的间隔F就是1/(N*dt)。(注:这里的采样间隔F=1/(N*dt)=Ws/N称为频谱分辨率,表示对x(n)在一个频谱周期内的N点等间隔采样
      傅立叶变换结果和原来信号有相同的点数,所以m=N,又第一点一定对应0频率,所以频域信号的很坐标就是(0:m-1)/(N*dt),这句就是根据这个很坐标和频谱c,画出频谱plot((0:m-1)/(N*dt),c),所以在频谱图上,可以根据峰值的位置的横坐标读出对应的频率。
      

    clear all;
    N=256;dt=0.02;
    n=0:N-1;t=n*dt;
    x=sin(2*pi*t);
    m=N;
    a=zeros(1,m);b=zeros(1,m);
    for k=0:m-1
        for ii=0:N-1
            a(k+1)=a(k+1)+2/N*x(ii+1)*cos(2*pi*k*ii/N);
            b(k+1)=b(k+1)+2/N*x(ii+1)*sin(2*pi*k*ii/N);
        end
    c(k+1)=sqrt(a(k+1)^2+b(k+1)^2);
    end
    subplot(211);plot(t,x);title('原始信号'),xlabel('时间/t');
    f=(0:m-1)/(N*dt);
    subplot(212);plot(f,c);hold on
    title('Fourier');xlabel('频率/HZ');ylabel('振幅');
    ind=find(c==max(c),1,'first');%寻找最大值的位置
    %%%%%%% ind = find(X, k) 或ind = find(X, k, 'first')
    %   返回第一个非零元素k的索引值(顺序)。
    %   k必须是一个正数,但是它可以是任何数字数值类型。
    
    x0=f(ind); %根据位置得到横坐标(频率)
    y0=c(ind); %根据位置得到纵坐标(幅度)
    plot(x0,y0,'ro');hold off
    
    %%%%%%% hold on 和hold off,是相对使用的.通常是一个图上画两个曲线进行比较。
    %   前者的意思是,你在当前图的轴(坐标系)中画了一幅图,再画另一幅图时,原来的图还在,与新图共存,都看得到
    %   后者表达的是,你在当前图的轴(坐标系)中画了一幅图,此时,状态是hold off,则再画另一幅图时,原来的图就看不到了,在轴上绘制的是新图,原图被替换了
    
    text(x0+1,y0-0.1,num2str(x0,'频率=%f'));
    
    %   text(x,y,'string')在图形中指定的位置(x,y)上显示字符串string
    
       
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    这里写图片描述


    栗子1:给x(n)绘图

    global n;
    n=-5:5;
    x=sin(pi*n/5);
    subplot(3,2,1);         %suplot定义fingure图形排列
    %subplot(m,n,p)表示图排成m行,n列,p指的是你把曲线画到fingure中哪个图上,通常之后再加上plot(n,x);
    stem(n,x,'.');          %将数据序列x从n值(即坐标(n,x)按照茎状形式画出并以'.'终止。
    line([-5,6],[0,0]);     %line([起点横坐标,终点横坐标],[起点纵坐标,终点纵坐标]);
    %表示画出从(-5,0)到(6,0)的一条直线,而不是(-5,6)到(0,0).
    axis([-5,6,-1.2,1.2]);
    %axis([xmin xmax ymin ymax])来标注输出的图线的最大值与最小值,用来显示坐标范围。
    %常与axis on/off来显示/关闭坐标轴上的标记,单位等
    xlable('n');ylable('x(n)');
       
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    栗子2和栗子3分别对应书本P95和P98


    栗子2:对待测信号xa(t)=(1+cos(2*pi*100*t)).*cos(2*pi*600*t)进行谱分析,若用fs=3kHz频率抽样,抽样点数为512

    clear;
    clc;
    fs=3000;
    N=512;
    n=0:N-1;t=n/fs;
    x=(1+cos(2*pi*100*t)).*cos(2*pi*600*t);
    
    y=fft(x,N);
    mag=abs(y);
    f=n*fs/N;   %频率序列
    subplot(2,1,1);plot(f,mag);
    xlabel('频率/Hz');ylabel('振幅/X(k)');title('N=512,fs=3000HZ');grid on;
    
    subplot(2,1,2);plot(1:N/2); %会出Nyquest频率之前随频率变化的振幅
    xlabel('频率/Hz');ylabel('振幅/X(k)');title('Nyquest 图幅值');grid on;
    %   grid on开启网格线
    
       
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    可知频率响应在f=500,600,700处突出,可断定该信号有三个f等于上的主要分量。

    这里写图片描述

    以下摘自:
    http://wenku.baidu.com/link?url=x1hi17BxtAD_EskUAmK7wR5ppIypVFw7EW39YhN7jSZJnmP5o9Q485y9aJkl3brXX9wWIqWVRf-N5xy9MYcT4xJmi-CK0UhhYn6z22DeLW_


    栗子3

    %1.掌握DFT的概念和用法(DFT实质:有限长序列M傅里叶变换的有限点N的离散采样)
    % 在频域分析信号分两种:
    % (1).对确定性信号进行傅里叶变换,分析频谱信息。
    % (2).随机信号的傅里叶信号不存在,转向研究它的功率谱。
    % 功率谱是定义为时域信号傅氏变换模平方然后除以时间长度。是随机过程的统计平均概念,所表现的是单位频带内信号功率随频率的变换情况。
    %2.利用DFT进行信号检测和谱分析

    实验内容:

    1.利用DFT计算信号功率谱。

    t=0:0.001:6;
    x=sin(2*pi*50*t)+sin(2*pi*120*t)+randn(1,length(t));
    %   A = randn(m,n) 或 A = randn([m n]):返回一个m*n的随机项矩阵。
    %   size(A):获取数组A的行数和列数
    %   length(A):获取数组长度(即行数或列数中的较大值)
    Y=fft(x,512);
    P=Y.*conj(Y)/512;
    %   '.*'运算符用于矩阵间对应元素的相乘,或数与数之间,数与矩阵之间的相乘。
    %注:a*b表示矩阵a与矩阵b进行矩阵相乘。
    %   a.*b表示矩阵a中的元素与矩阵b中的元素按照相同位置进行相乘,得到的结果作为新矩阵中相同位置的元素。
    %   conj(A):返回A的共轭值
    f=1000*(0:255)/512;
    plot(f,P(1:256))
       
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    这里写图片描述

    2.进行信号检测。分析信号频谱对应的数字频率和模拟频率之间的关系。模拟信号x(t)=2*sin(4*pi*t)+5*cos(8*pi*t),以t=0.01n(0<=n<=N-1)进行采样,求N点DFT的幅度值.

    subplot(2,2,1)
    N=45;n=0:N-1;t=0.01*n;
    q=n*2*pi/N;
    x=2*sin(4*pi*t)+5*cos(8*pi*t);
    y=fft(x,N);
    plot(q,abs(y));title('DFT N=45')
    
    subplot(2,2,2)
    N=50;n=0:N-1;t=0.01*n; q=n*2*pi/N;
    x=2*sin(4*pi*t)+5*cos(8*pi*t);
    y=fft(x,N);
    plot(q,abs(y));title('DFT N=50')
    
    subplot(2,2,3)
    N=55;n=0:N-1;t=0.01*n;
    q=n*2*pi/N;
    x=2*sin(4*pi*t)+5*cos(8*pi*t);
    y=fft(x,N);
    plot(q,abs(y));title('DFT N=55')
    
    subplot(2,2,4)
    N=60;n=0:N-1;t=0.01*n;
    q=n*2*pi/N;
    x=2*sin(4*pi*t)+5*cos(8*pi*t);
    y=fft(x,N);
    plot(q,abs(y));title('DFT N=60')
    
    %%%%%%%%%%%%注:X(k)为x(n)的DFT(x(ejw))在区间[0,2pi]上的N点等间隔采样
       
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    这里写图片描述

    3.对2,进一步增加截取长度和DFT点数,如N加大到256,观察信号频谱的变化,分析产生这一变化的原因。

    N=256;n=0:N-1;t=0.01*n;
    q=n*2*pi/N;
    x=2*sin(4*pi*t)+5*cos(8*pi*t);
    y=fft(x,N);
    plot(q,abs(y));title('DFT N=256')
       
    • 1
    • 2
    • 3
    • 4
    • 5

    这里写图片描述

    分析原因:采样频率f=100Hz,采样间隔T=0.01s,取样点数N数值越大时,则谱分辨率F=f/N越小,即分辨率越高。如当采样点数为N=256,即可区分两个频率不同的信号。

    4.对3,加入噪声
    取N=64,并在信号中加入噪声randn。

    subplot(2,2,1);
    f=100;
    N=64;
    n=0:N-1;t=n/f;
    q=n*2*pi/N;
    x=2*sin(4*pi*t)+5*cos(8*pi*t);
    y=fft(x,N);
    plot(q,abs(y));title('DFT N=64');
    
    subplot(2,2,2);
    x=2*sin(4*pi*t)+5*cos(8*pi*t)+0.8*randn(1,N);
    y=fft(x,N);
    plot(q,abs(y));title('DFT N=64(with 0.8 noise)');
    
    subplot(2,2,3);
    x=2*sin(4*pi*t)+5*cos(8*pi*t)+4*randn(1,N);
    y=fft(x,N);
    plot(q,abs(y));title('DFT N=64(with 4 noise)');
    
    subplot(2,2,4);
    x=2*sin(4*pi*t)+5*cos(8*pi*t)+16*randn(1,N);
    y=fft(x,N);
    plot(q,abs(y));title('DFT N=64(with 16 noise)');
    
       
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    这里写图片描述

    可以看出,加大噪声并比较,可以看出噪声较小时,不影响信号检测,当噪声较大时,就看不出院信号的频率成分了。


    加注:对上面进行DFT(横坐标是2*pi*n/N)和FFT(横坐标是fs*n/N)横坐标不同的解释。
    摘自:
    http://wenku.baidu.com/link?url=3DSg4R-sLHNJWIJh5n5QdNPaSzLOEA2VlnHcXYAj_NHFlzKvEP87sX9XA33CLQUtt4akNZrA9MHCcxXoqbemvUshcx4rMiw0LnX0V5ElKnm

    DFT归一化的圆周频率为2*pi*n/N实际上是2*pi*F(F=f/fs),得后来的实际物理频率是fs*n/N。这也正是下文所介绍的从s域到z域的变换。
    角频率(模拟频率)对应的是s平面,圆周频率对应的是z平面。
    当模拟频率在s平面的虚轴上从0变到fs 时,数字频率在z平面单位圆上从0变到2 pi。这正是n/N然后一个乘以fs另一个乘以2*pi的原因。
    当模拟频率在s平面的虚轴上从2fs变到4fs时,数字频率在z平面单位圆上仍然从0变到2 pi。因此后面的再研究就没有意义。

    展开全文
  • MATLAB实现DFT-matlab程序.txt 如题。希望能够抛砖引玉。
  • dft2d函数为对灰度图进行离散傅里叶变换和反变换 filter2d_freq为对灰度图进行频率域滤波 修改Runner函数中的图片路径然后运行即可
  • title('DFT N=60') %%%%%%%%%%%%注:X(k)为x(n)的DFT(x(ejw))在区间[0,2pi]上的N点等间隔采样1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 3.对2,进一步增加截取长度和DFT点数,如...

    前言:

    摘自:

    http://zhidao.baidu.com/link?url=lB3CS6qxlLIy7EuC8-X0MGNcFndC4ntrfXHdzdk5Wo_oJuRut8iHXoaOTEwA4BRBUeXpuibFuNd5Vp1hKsnsE_KrY8ALSESgHYpJHCPNKbO

    MATLAB 傅里叶变换:

    傅立叶变换的分类:

    傅立叶级数:将周期性连续函数变换为离散频率点上的函数

    傅立叶变换:将连续函数变换为连续频率的函数

    离散时间傅立叶变换:将离散函数变换为连续频率的函数

    离散傅立叶变换:将有限长离散函数变换为离散频率点上的函数

    其中FFT是离散傅立叶变换的快速计算方法,适用于离散信号,并且注意变换后的点数与信号的采样点数一致。尽管可以将信号补0,但补0不能提高频域的分辨率。matlab中提供了函数fft做一维的FFT。

    时域谱和频域谱是相互对应;时域的信号长度,决定频域的采样间隔,它们成导数关系;

    时域中信号有N点,每点间隔dt,所以时域信号长度为N*dt;那么频谱每点的间隔F就是1/(N*dt)。(注:这里的采样间隔F=1/(N*dt)=Ws/N称为频谱分辨率,表示对x(n)在一个频谱周期内的N点等间隔采样)

    傅立叶变换结果和原来信号有相同的点数,所以m=N,又第一点一定对应0频率,所以频域信号的很坐标就是(0:m-1)/(N*dt),这句就是根据这个很坐标和频谱c,画出频谱plot((0:m-1)/(N*dt),c),所以在频谱图上,可以根据峰值的位置的横坐标读出对应的频率。

    clear all;

    N=256;dt=0.02;

    n=0:N-1;t=n*dt;

    x=sin(2*pi*t);

    m=N;

    a=zeros(1,m);b=zeros(1,m);

    for k=0:m-1

    for ii=0:N-1

    a(k+1)=a(k+1)+2/N*x(ii+1)*cos(2*pi*k*ii/N);

    b(k+1)=b(k+1)+2/N*x(ii+1)*sin(2*pi*k*ii/N);

    end

    c(k+1)=sqrt(a(k+1)^2+b(k+1)^2);

    end

    subplot(211);plot(t,x);title('原始信号'),xlabel('时间/t');

    f=(0:m-1)/(N*dt);

    subplot(212);plot(f,c);hold on

    title('Fourier');xlabel('频率/HZ');ylabel('振幅');

    ind=find(c==max(c),1,'first');%寻找最大值的位置

    %%%%%%% ind = find(X, k) 或ind = find(X, k, 'first')

    % 返回第一个非零元素k的索引值(顺序)。

    % k必须是一个正数,但是它可以是任何数字数值类型。

    x0=f(ind); %根据位置得到横坐标(频率)

    y0=c(ind); %根据位置得到纵坐标(幅度)

    plot(x0,y0,'ro');hold off

    %%%%%%% hold on 和hold off,是相对使用的.通常是一个图上画两个曲线进行比较。

    % 前者的意思是,你在当前图的轴(坐标系)中画了一幅图,再画另一幅图时,原来的图还在,与新图共存,都看得到

    % 后者表达的是,你在当前图的轴(坐标系)中画了一幅图,此时,状态是hold off,则再画另一幅图时,原来的图就看不到了,在轴上绘制的是新图,原图被替换了

    text(x0+1,y0-0.1,num2str(x0,'频率=%f'));

    % text(x,y,'string')在图形中指定的位置(x,y)上显示字符串string1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    4d1ec9eaad58abf98e59dd34fe8a4f52.png

    栗子1:给x(n)绘图

    global n;

    n=-5:5;

    x=sin(pi*n/5);

    subplot(3,2,1); %suplot定义fingure图形排列

    %subplot(m,n,p)表示图排成m行,n列,p指的是你把曲线画到fingure中哪个图上,通常之后再加上plot(n,x);

    stem(n,x,'.'); %将数据序列x从n值(即坐标(n,x)按照茎状形式画出并以'.'终止。

    line([-5,6],[0,0]); %line([起点横坐标,终点横坐标],[起点纵坐标,终点纵坐标]);

    %表示画出从(-5,0)到(6,0)的一条直线,而不是(-5,6)到(0,0).

    axis([-5,6,-1.2,1.2]);

    %axis([xmin xmax ymin ymax])来标注输出的图线的最大值与最小值,用来显示坐标范围。

    %常与axis on/off来显示/关闭坐标轴上的标记,单位等

    xlable('n');ylable('x(n)');1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    栗子2和栗子3分别对应书本P95和P98

    栗子2:对待测信号xa(t)=(1+cos(2*pi*100*t)).*cos(2*pi*600*t)进行谱分析,若用fs=3kHz频率抽样,抽样点数为512

    clear;

    clc;

    fs=3000;

    N=512;

    n=0:N-1;t=n/fs;

    x=(1+cos(2*pi*100*t)).*cos(2*pi*600*t);

    y=fft(x,N);

    mag=abs(y);

    f=n*fs/N; %频率序列

    subplot(2,1,1);plot(f,mag);

    xlabel('频率/Hz');ylabel('振幅/X(k)');title('N=512,fs=3000HZ');grid on;

    subplot(2,1,2);plot(1:N/2); %会出Nyquest频率之前随频率变化的振幅

    xlabel('频率/Hz');ylabel('振幅/X(k)');title('Nyquest 图幅值');grid on;

    % grid on开启网格线1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    可知频率响应在f=500,600,700处突出,可断定该信号有三个f等于上的主要分量。

    975e29b8b0a88ec17c79dc67c7a4f91a.png

    以下摘自:

    http://wenku.baidu.com/link?url=x1hi17BxtAD_EskUAmK7wR5ppIypVFw7EW39YhN7jSZJnmP5o9Q485y9aJkl3brXX9wWIqWVRf-N5xy9MYcT4xJmi-CK0UhhYn6z22DeLW_

    栗子3

    %1.掌握DFT的概念和用法(DFT实质:有限长序列M傅里叶变换的有限点N的离散采样)

    % 在频域分析信号分两种:

    % (1).对确定性信号进行傅里叶变换,分析频谱信息。

    % (2).随机信号的傅里叶信号不存在,转向研究它的功率谱。

    % 功率谱是定义为时域信号傅氏变换模平方然后除以时间长度。是随机过程的统计平均概念,所表现的是单位频带内信号功率随频率的变换情况。

    %2.利用DFT进行信号检测和谱分析

    实验内容:

    1.利用DFT计算信号功率谱。

    t=0:0.001:6;

    x=sin(2*pi*50*t)+sin(2*pi*120*t)+randn(1,length(t));

    % A = randn(m,n) 或 A = randn([m n]):返回一个m*n的随机项矩阵。

    % size(A):获取数组A的行数和列数

    % length(A):获取数组长度(即行数或列数中的较大值)

    Y=fft(x,512);

    P=Y.*conj(Y)/512;

    % '.*'运算符用于矩阵间对应元素的相乘,或数与数之间,数与矩阵之间的相乘。

    %注:a*b表示矩阵a与矩阵b进行矩阵相乘。

    % a.*b表示矩阵a中的元素与矩阵b中的元素按照相同位置进行相乘,得到的结果作为新矩阵中相同位置的元素。

    % conj(A):返回A的共轭值

    f=1000*(0:255)/512;

    plot(f,P(1:256))1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    0354351c1f37ecfe86e1b4f795509562.png

    2.进行信号检测。分析信号频谱对应的数字频率和模拟频率之间的关系。模拟信号x(t)=2*sin(4*pi*t)+5*cos(8*pi*t),以t=0.01n(0<=n<=N-1)进行采样,求N点DFT的幅度值.

    subplot(2,2,1)

    N=45;n=0:N-1;t=0.01*n;

    q=n*2*pi/N;

    x=2*sin(4*pi*t)+5*cos(8*pi*t);

    y=fft(x,N);

    plot(q,abs(y));title('DFT N=45')

    subplot(2,2,2)

    N=50;n=0:N-1;t=0.01*n; q=n*2*pi/N;

    x=2*sin(4*pi*t)+5*cos(8*pi*t);

    y=fft(x,N);

    plot(q,abs(y));title('DFT N=50')

    subplot(2,2,3)

    N=55;n=0:N-1;t=0.01*n;

    q=n*2*pi/N;

    x=2*sin(4*pi*t)+5*cos(8*pi*t);

    y=fft(x,N);

    plot(q,abs(y));title('DFT N=55')

    subplot(2,2,4)

    N=60;n=0:N-1;t=0.01*n;

    q=n*2*pi/N;

    x=2*sin(4*pi*t)+5*cos(8*pi*t);

    y=fft(x,N);

    plot(q,abs(y));title('DFT N=60')

    %%%%%%%%%%%%注:X(k)为x(n)的DFT(x(ejw))在区间[0,2pi]上的N点等间隔采样1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    2ad80d6559232a017856b2191704ebf6.png

    3.对2,进一步增加截取长度和DFT点数,如N加大到256,观察信号频谱的变化,分析产生这一变化的原因。

    N=256;n=0:N-1;t=0.01*n;

    q=n*2*pi/N;

    x=2*sin(4*pi*t)+5*cos(8*pi*t);

    y=fft(x,N);

    plot(q,abs(y));title('DFT N=256')1

    2

    3

    4

    5

    2f689e8deeff7aac04fce07f1325b1e1.png

    分析原因:采样频率f=100Hz,采样间隔T=0.01s,取样点数N数值越大时,则谱分辨率F=f/N越小,即分辨率越高。如当采样点数为N=256,即可区分两个频率不同的信号。

    4.对3,加入噪声

    取N=64,并在信号中加入噪声randn。

    subplot(2,2,1);

    f=100;

    N=64;

    n=0:N-1;t=n/f;

    q=n*2*pi/N;

    x=2*sin(4*pi*t)+5*cos(8*pi*t);

    y=fft(x,N);

    plot(q,abs(y));title('DFT N=64');

    subplot(2,2,2);

    x=2*sin(4*pi*t)+5*cos(8*pi*t)+0.8*randn(1,N);

    y=fft(x,N);

    plot(q,abs(y));title('DFT N=64(with 0.8 noise)');

    subplot(2,2,3);

    x=2*sin(4*pi*t)+5*cos(8*pi*t)+4*randn(1,N);

    y=fft(x,N);

    plot(q,abs(y));title('DFT N=64(with 4 noise)');

    subplot(2,2,4);

    x=2*sin(4*pi*t)+5*cos(8*pi*t)+16*randn(1,N);

    y=fft(x,N);

    plot(q,abs(y));title('DFT N=64(with 16 noise)');1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    f4532d166b73c4299bd9047ead358323.png

    可以看出,加大噪声并比较,可以看出噪声较小时,不影响信号检测,当噪声较大时,就看不出院信号的频率成分了。

    加注:对上面进行DFT(横坐标是2*pi*n/N)和FFT(横坐标是fs*n/N)横坐标不同的解释。

    摘自:

    http://wenku.baidu.com/link?url=3DSg4R-sLHNJWIJh5n5QdNPaSzLOEA2VlnHcXYAj_NHFlzKvEP87sX9XA33CLQUtt4akNZrA9MHCcxXoqbemvUshcx4rMiw0LnX0V5ElKnm

    DFT归一化的圆周频率为2*pi*n/N实际上是2*pi*F(F=f/fs),得后来的实际物理频率是fs*n/N。这也正是下文所介绍的从s域到z域的变换。

    角频率(模拟频率)对应的是s平面,圆周频率对应的是z平面。

    当模拟频率在s平面的虚轴上从0变到fs 时,数字频率在z平面单位圆上从0变到2 pi。这正是n/N然后一个乘以fs另一个乘以2*pi的原因。

    当模拟频率在s平面的虚轴上从2fs变到4fs时,数字频率在z平面单位圆上仍然从0变到2 pi。因此后面的再研究就没有意义。

    展开全文
  • matlab实现DFT FFT.doc

    2021-04-20 03:37:49
    PAGE \* MERGEFORMAT 26用matlab实现DFT FFT目录TOC \o "1-3" \h \z \u HYPERLINK \l "_Toc294282722" 实验目的 PAGEREF _Toc294282722 \h 2 HYPERLINK \l "_Toc294282723" 实验内容 PAGEREF _Toc294282723 \h 2 ...
  • 该文件包括用于 DFT 和 IDFT 的 matlab 代码
  • 话题:怎么样MATLAB实现DFT公式???回答:function Xk=dft(xn,N)n=[0:1:N-1];k=[0:1:N-1];WN=exp(-j*2*pi/N);nk=n'*k;WNnk=WN.^nk;Xk=xn*WNnk参考回答:如果是要使用dft的功能,直接调fft就可以了,Matlab中的fft...
  • matlab编写DFT函数

    2018-10-31 15:58:18
    使用matlab做任意长度的DFT,绘制时域频域图像,对比。更改N为时域信号长度,L为做DFT点数。N,则补零。N,L可更改参数。
  • DFTmatlab实现

    千次阅读 2021-04-24 12:31:06
    %DFTMATLAB实现%xn: input length_limited sequence%N: length of sequence%XK: DFT coefficients for xnfunction[XK]=dft(xn,N)n=[0:N-1]k=[0:N-1]wnk=exp(-j*2*pi/N).^(n’*k);XK=xn*wnk%在序列两点之间插入r-1...
  • OFDM中LS和DFT信道估计算法matlab程序实现及比较
  • 利用MATLAB实现DFT的计算07级电信(2)班 刘坤洋 24实验一 利用MATLAB实现信号DFT的计算一、实验目的:1、熟悉利用MATLAB计算信号DFT的方法2、掌握利用MATLAB实现DFT计算线性卷积的方法二、实验设备:电脑、matlab...
  • 求序列的N点DFT %计算矩形序列的4、8、16点DFT N1=4;N2=8;N3=16; k1=0:N1-1; k2=0:N2-1; k3=0:N3-1; n=0:N1-1; w=2*pi*(0:2047)/2048; Xw=(1-exp(-j*4*w))./(1-exp(-j*w)); xn=[(n>=0)&(n<4)]; X1K=dft(xn...
  • matlab代码DFT与DCT变换

    2015-05-31 23:49:30
    可以运行,有说明 有对图像DFT与DCT变换的对比与说明
  • 实验报告 实验题目 DFT及其性质的MATLAB实现 姓名崔金浩 院别电气工程学院 专业电子信息 班级 2 0 1 4级 三 班 指导教师 许 春 和 时间 2016 年 11 月 07 日 电气工程学院 实验六 DFT及其性质的MATLAB实现 一实验...
  • 07 级电信( 2)班 刘坤洋 24 实验一 利用MATLAB实现信号DFT的计算 一 实验目的 1 熟悉利用MATLA计算信号DFT的方法 2 掌握利用MATLA实现由DFT计算线性卷积的方法 二 实验设备 电脑 matlab 软件 三 实验内容 1 练习用 ...
  • %用二重循环实现DFT:function xk=dt_0(xn); %define a functionN=length(xn); %caculate the length of the variableWN=exp(-j.*.*pi./N);xk=zeros(,N); %define a non-zero 一维矩阵sum=zeros(,N); ...
  • 利用DFT及DCT矩阵手动实现图像的DFT和DCT变换
  • matlab 自己构造DFT函数

    千次阅读 2021-10-02 20:25:47
    function sw = dft(st) % DFT - Discrete Fourier Transform M = length(st); N = M; WN = exp(2*pi*j/N); % Main loop for n=0:N-1 temp = 0; for m=0:M-1 mn = m'*n; WNmn = WN.^mn; temp = temp + st(m+1)...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,133
精华内容 1,653
关键字:

matlab实现dft

matlab 订阅