编程日志1_MATLAB离散信号频谱分析1

与大家分享一下本人在学习数字信号处理课程中实验部分遇到的编程题

目录

前言

一、题目

二、实现代码

1.根据题目设置参数

2.截取不同长度的序列并作不同点数的DFT

3.使用绘图函数

1)画一张图 

2)重复上述步骤画多张图 

4.绘图结果 

5.分析 

总结


前言

随着各种电子技术及计算机技术的飞速发展和各种超大规模集成电路的广泛使用,数字信号处理(DSP,Digital Signal Processing)得到了飞跃式的发展,成为通信、计算机、雷达、声呐、电声、电视、测控、生物医学工程等众多学科和邻域的重要理论基础。信号处理技术研究如何对信号进行分析、变换、综合、估计和识别处理,已达到提取信号的有用分量、抑制或消除不需要的干扰分量、估计信号的特征参数和识别信号的种类等目的。

一、题目

已知信号x(n)=a1cos(2πf1n/Fs)+a2cos(2πf2n/Fs) (0<=n<=M-1),其中a1=1,a2=2,f1=20.1kHz,f2=21.5kHz,Fs=100kHz,试通过矩形窗进行截断,并利用Matlab做出DFT谱图,观察信号长度M和DFT点数N对频谱分辨率的影响。

二、实现代码

1.根据题目设置参数

代码如下(示例):

clear all;
close all;
n=0:249;
f1=20.1*1e3;f2=21.5*1e3;Fs=100*1e3;%1e3=1*10^3
x=cos(2*pi*f1*n/Fs)+2*cos(2*pi*f2*n/Fs);

2.截取不同长度的序列并作不同点数的DFT

DFT一般用函数fft(x,N)表示,代码如下(示例):

x1=x(1:70);X11=fft(x1,70);X12=fft(x1,512);X13=fft(x1,2048);
x2=x(1:90);X21=fft(x2,90);X22=fft(x2,512);X23=fft(x2,2048);
x3=x(1:250);X31=fft(x3,250);X32=fft(x3,512);X33=fft(x3,2048);

3.使用绘图函数

1)画一张图 

 代码如下(示例):

subplot(331);plot((0:length(X11)/2-1)*Fs/length(X11),20*log10(abs(X11(1:length(X11)/2))));
xlabel('f');ylabel('|X11(k)|/db');title('M=70,N=70');

2)重复上述步骤画多张图 

subplot(332);plot((0:length(X12)/2-1)*Fs/length(X12),20*log10(abs(X12(1:length(X12)/2))));
xlabel('f');ylabel('|X12(k)|/db');title('M=70,N=512');
subplot(333);plot((0:length(X13)/2-1)*Fs/length(X13),20*log10(abs(X13(1:length(X13)/2))));
xlabel('f');ylabel('|X13(k)|/db');title('M=70,N=2048');
subplot(334);plot((0:length(X21)/2-1)*Fs/length(X21),20*log10(abs(X21(1:length(X21)/2))));
xlabel('f');ylabel('|X21(k)|/db');title('M=90,N=90');
subplot(335);plot((0:length(X22)/2-1)*Fs/length(X22),20*log10(abs(X22(1:length(X22)/2))));
xlabel('f');ylabel('|X22(k)|/db');title('M=90,N=512');
subplot(336);plot((0:length(X23)/2-1)*Fs/length(X23),20*log10(abs(X23(1:length(X23)/2))));
xlabel('f');ylabel('|X23(k)|/db');title('M=90,N=2048');
subplot(337);plot((0:length(X31)/2-1)*Fs/length(X31),20*log10(abs(X31(1:length(X31)/2))));
xlabel('f');ylabel('|X31(k)|/db');title('M=250,N=250');
subplot(338);plot((0:length(X32)/2-1)*Fs/length(X32),20*log10(abs(X32(1:length(X32)/2))));
xlabel('f');ylabel('|X32(k)|/db');title('M=250,N=512');
subplot(339);plot((0:length(X33)/2-1)*Fs/length(X33),20*log10(abs(X33(1:length(X33)/2))));
xlabel('f');ylabel('|X33(k)|/db');title('M=250,N=2048'); 

4.绘图结果 

5.分析 

理论上要想能从频谱上分辨出相邻频率差值为△f的两频率,需要让M的取值大于Fs/△f=71.4。当M不变时增大N,可以对频率采样更密集,不会错过关键点,能减小栅栏现象对分辨频谱的影响;当N不变时增大M,由主瓣宽度=4π/M可知,M越大主瓣越窄,在频谱图上更容易与其他频点分开。 

总结

以上就是今天要讲的内容,本文简单介绍MATLAB谱分析的基本方法,而MATLAB中还有许多函数和工具来处理数字信号.

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值