matlab做dft后绘图,Matlab实现DFT,2024年最新物联网嵌入式开发技术功底不够如何去面试

65 阅读6分钟

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

以下摘自:

wenku.baidu.com/link?url=x1…_

栗子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

img img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取