北京理工大学数字信号处理1DFT
数字信号处理课程教学大纲1
数字信号处理课程教学大纲课程名称:数字信号处理英文名称:Digital Signal Processing课程编号:11学时数:48其中实验(实训)学时数:6课外学时数:学分数:3.0适用专业:电气工程及其自动化、自动化一、课程的性质和任务数字信号处理是电气工程及其自动化、冶金工程(自动化方向)和自动化专业的选修课。
通过对该课的学习使学生掌握数字信号处理的基本理论,包括时域离散信号和系统的描述方法,序列的傅里叶变换(FT)、Z变换、离散傅里叶变换(DFT),以及用它们对时域离散信号和系统进行频域分析。
掌握数字滤波器的基本理论和设计方法,了解数字信号处理的技术实现。
二、课程教学内容的基本要求、重点和难点(一)基本要求:1、数字信号处理课程的基本内容、应用领域和在学习及应用中的思想方法(了解)。
2、抽样定理的内容和推导(理解)。
3、傅里叶变换基础(理解)。
4、离散时间信号与系统的基本概念以及信号通过离散时间系统的表示(掌握)。
5、常用的基本序列(掌握)。
6、系统的稳定性和因果性以及离散时间信号和系统的频域表示(掌握)。
7、Z变换及Z反变换的计算方法(熟练掌握)。
8、离散傅里叶级数和离散傅里叶变换方法(熟练掌握),离散傅里叶变换的性质(掌握)、离散傅里叶变换与Z变换的关系(理解),圆周卷积应用于线性卷积的问题(理解)。
9、快速傅立叶变换算法的推导过程(理解),离散傅里叶变换和快速傅立叶变换算法的计算量,蝶形算法(熟练掌握)。
10、数字滤波器的结构(理解)。
11、模拟巴特沃思、切比雪夫等数字滤波器的设计(掌握)。
12、 FIR滤波器的特性,窗函数设计方法(掌握)。
(二)重点内容:1、离散时间信号和系统的频域表示及抽样定理,系统的稳定性和因果性的定义, z变换z 反变换的计算方法,离散系统的表示。
2、各种傅立叶变换的形式,周期序列的离散傅里叶级数、离散傅里叶变换的形式和性质。
3、按时间抽取的FFT算法和按频率抽取的FFT算法。
《数字信号处理》王世一版北京理工大学出版社部分习题答案【khdaw_lxywyl】[1]
w.
ww
我们希望找到如下一个取样 于单位圆上 10 个等间隔点的 X ( z ) 的取样。
的周期性序列 . 试用
后
N −1
答
∑
n =0
% (n)W kn = % (n)W kn / 2 + x ∑x 2N N
n =0
N −1
2 N −1 n= N
% (n)W kn / 2 ∑x N
N −1
N −1
= (1 + e
− jkπ
% (n)W kn / 2 )∑ x N
n =0
N −1
⎛k⎞ = (1 + e − jkπ ) X 1 ⎜ ⎟ ⎝2⎠
后
(b) 求这个系统的单位取样响应。 (c) 读者会发现它是一个不稳定系统,求满足上述差分方程的一个稳定(但非因果)系统的单位取样响应。 解:
由于 H ( z ) 的收敛域不包括单位圆,所以这是个不稳定系统 c)若要使系统稳定,则其收敛域应包括单位圆,则选 H ( z ) 的收敛域为 0.62 <
kh da w. co m
n =0
1 ⎛ ⎞ H D (e jω ) = c ⎜ − aT −2 aT ⎟ ⎝ 1 − 2e cos ω + e ⎠
答
1− e
(a) 试求模拟滤波器的频率响应,并会出其振幅特性略图
kh da w. co m
1 a + jΩ
e j 3ω − e − j 4ω 1− e jω
案 网
c
− aT − jω
w.
课
QZ = a −2 − 2a −1 cos ω + 1 = 1/ a a 2 − 2a cos ω + 1
数字信号处理 第二章 DFT
~ N=16:x (4) x((4))16 x((12 16))16 x(12)
例2:
x (n ) x (n ) 0
~ 1 X (k ) k 0 N ~ X (r )
e
j
15
周期序列的傅里叶级数表示:
正变换:
2 N 1 N 1 j nk ~ ~(n) ~(n)e N ~(n)W nk X (k ) DFS x x x N n 0 n 0
反变换:
~ ~(n) IDFS X (k ) 1 x N
j
2 kN N
k mN , m为整数 其他k
W
n 0
N 1
( m k ) n N
1W 1W
( k m ) N N ( k m ) N
1 e
j
1 e
N m k rN 0 mk
此外,复指数序列还有如下性质:
0 WN 1, W N 2 N r 1 1, WN WN r
ek (n)
ek (n) 是以N为周期的周期序列,所以基序
列 {e }(k=0,…,N-1) 只有N个是独立 的,可以用这N个基序列将 ~ ( n) 展开。 x
j 2 nk N
12
复指数序列 ek (n) e
周期性:
j
2 nk N
W
nk N
的性质:
无论对k还是n,复指数序列都具备周期性。
时间函数 连续和非周期 连续和周期(T0) 离散(Ts)和非周期 离散(Ts)和周期(T0) 非周期和连续 非周期和离散(Ω 0=2π /T0) 周期(Ω s=2π /Ts)和连续 周期(Ω s=2π /Ts)和离散(Ω 0=2π /T0) 频率函数
北京理工大学医学技术学院生物医学工程(专硕)专业2024年考研攻略
一、报考情况分析1.招生目录招生年份:2023年招生专业:085409 生物医学工程研究方向:00 不区分研究方向拟招生人数:4考试科目:101思想政治理论204英语二302数学二802 信号理论基础复试要求及相关说明:笔试科目:生物医学工程相关科目综合(选择题、专业英语翻译)。
面试内容:外语口语听力测试;综合能力以及视不同本科专业背景,在生物医学工程学科范围内进行有侧重的知识测试。
2.复试分数线2023年085409 生物医学工程(专硕)复试分数线总分为300分;二、考试大纲及参考书目802 信号理论基础1.考试内容信号理论基础主要考查考生对基本内容的理解和掌握程度,以及灵活应用知识的能力。
试卷命题对大纲内容有覆盖性和广泛性,应掌握的基本内容为::①信号、系统的基本概念:信号描述及波形运算,基本典型信号。
系统模型、互联及主要特性;②LTI系统的时域分析:卷积积分、卷积和、卷积性质与计算。
零输入/零状态响应和全响应; 利用经典解法求解系统。
③确定信号的频谱分析:周期信号的傅立叶级数。
非周期信号的傅立叶变换及其性质,典型信号的傅立叶变换及其频谱表示。
抽样定理;④LTI系统的频域分析:系统频率响应,系统的傅立叶分析法。
无失真传输条件,理想滤波器;⑤LTI系统的复频域分析:拉氏变换,Z变换。
典型信号的变换对。
用单边拉氏变换和单边Z变换求解微分/差分方程。
系统函数。
系统方框图;⑥离散傅立叶变换(DFT):DFT定义、性质与特点(隐含周期性)。
周期移位、反转,周期卷积(相关)及其与非周期卷积(相关)的联系;⑦快速傅立叶变换(FFT):基-2按时间/按频率抽取的FFT算法。
基-4按频率抽取及分裂基快速算法。
实序列的FFT;⑧数字滤波器(DF):DF的基本结构。
FIR DF的线性相位特性。
从模拟滤波器设计IIR DF。
用窗函数法和频率抽样法设计FIR DF。
2. 题型和分值基本题,共90分;综合题,共60分参考书目信号与系统北京理工大学出版社曾禹村等数字信号处理(第1-5章)北京理工大学出版社王世一三、新祥旭全科定制化流程1、整体流程:咨询课程—支付学费—签订协议—对接各科辅导老师(随报随学、全程辅导)—各科老师了解基础,制定计划—老师辅导—教务老师全程跟踪(1V1)。
DFT计算公式推导
DFT计算公式推导在数字信号处理中,离散傅里叶变换(DFT)是一种非常重要的技术,它可以将离散的时间域信号转换为频域信号,从而可以分析信号的频谱特性。
DFT的计算公式是信号处理中的基础,下面将通过推导的方式来介绍DFT的计算公式。
首先,我们来看一下DFT的定义。
对于长度为N的离散信号序列x(n),它的DFT变换X(k)定义为:\[X(k) = \sum_{n=0}^{N-1}x(n)e^{-j2\pi kn/N}, \quad k=0,1,...,N-1. \]其中,e是自然对数的底,j是虚数单位。
上述公式可以理解为将信号x(n)乘以一个复指数信号e^{-j2\pi kn/N},然后对整个信号进行求和,得到DFT变换X(k)。
接下来,我们将通过推导的方式来得到DFT的计算公式。
首先,我们可以将复指数信号e^{-j2\pi kn/N}进行展开,得到:\[e^{-j2\pi kn/N} = \cos(2\pi kn/N) j\sin(2\pi kn/N). \]将上述展开式代入DFT的定义公式中,得到:\[X(k) = \sum_{n=0}^{N-1}x(n)(\cos(2\pi kn/N) j\sin(2\pi kn/N)). \]接下来,我们可以将信号x(n)分为实部和虚部,即x(n) = a(n) + jb(n),其中a(n)和b(n)分别是x(n)的实部和虚部。
将上述分解代入DFT的定义公式中,得到:\[X(k) = \sum_{n=0}^{N-1}(a(n) + jb(n))(\cos(2\pi kn/N) j\sin(2\pi kn/N)). \]将上述公式展开并进行整理,可以得到:\[X(k) = \sum_{n=0}^{N-1}a(n)\cos(2\pi kn/N) + \sum_{n=0}^{N-1}b(n)\cos(2\pikn/N) j\left(\sum_{n=0}^{N-1}a(n)\sin(2\pi kn/N) \sum_{n=0}^{N-1}b(n)\sin(2\pikn/N)\right). \]上述公式可以进一步化简为两个独立的求和式,分别是实部和虚部的求和式,即:\[X(k) = \sum_{n=0}^{N-1}a(n)\cos(2\pi kn/N) + \sum_{n=0}^{N-1}b(n)\cos(2\pi kn/N) j\sum_{n=0}^{N-1}a(n)\sin(2\pi kn/N) + j\sum_{n=0}^{N-1}b(n)\sin(2\pi kn/N). \]接下来,我们可以利用欧拉公式来进一步化简上述公式。
数字信号处理经典习题(北理工826必备)(附答案)
数字信号处理经典习题(北理工826必备)(附答案)第一章数字信号处理概述简答题:1.在A/D变换之前和D/A变换之后都要让信号通过一个低通滤波器,它们分别起什么作用?答:在A/D变化之前让信号通过一个低通滤波器,是为了限制信号的最高频率,使其满足当采样频率一定时,采样频率应大于等于信号最高频率2倍的条件。
此滤波器亦称位“抗折叠”滤波器。
在D/A变换之后都要让信号通过一个低通滤波器,是为了滤除高频延拓谱,以便把抽样保持的阶梯形输出波平滑化,故友称之为“平滑”滤波器。
判断说明题:2.模拟信号也可以与数字信号一样在计算机上进行数字信号处理,自己要增加一道采样的工序就可以了。
()答:错。
需要增加采样和量化两道工序。
3.一个模拟信号处理系统总可以转换成功能相同的数字系统,然后基于数字信号处理理论,对信号进行等效的数字处理。
()答:受采样频率、有限字长效应的约束,与模拟信号处理系统完全等效的数字系统未必一定能找到。
因此数字信号处理系统的分析方法是先对抽样信号及系统进行分析,再考虑幅度量化及实现过程中有限字长所造成的影响。
故离散时间信号和系统理论是数字信号处理的理论基础。
第二章 离散时间信号与系统分析基础一、连续时间信号取样与取样定理 计算题:18c 因此 Hz Tf c c 6251612==Ω=π 由于最后一级的低通滤波器的截止频率为Tπ,因此对T 8π没有影响,故整个系统的截止频率由)(ωj eH 决定,是625Hz 。
(b )采用同样的方法求得kHz T 201=,整个系统的截止频率为Hz Tf c 1250161==二、离散时间信号与系统频域分析 计算题:1( 2(2))(*n x (共轭) 解:DTFT )(**])([)(*)(*ωωωj n n jn jn e X e n x en x n x -∞-∞=∞-∞=-===∑∑2.计算下列各信号的傅里叶变换。
(a )][2n u n- (b )]2[)41(+n u n(c )]24[n -δ (d )nn )21(解:(a )∑∑-∞=--∞-∞==-=2][2)(n nj n nj n ne en u X ωωωωnj e 11)1(==∞( ((X =3 (1))(*n x - (2))](Re[n x (3) )(n nx解: (1))(*])([)(*)(*jw n n jw n jwne X en x en x=-=-∑∑∞-∞=--∞-∞=-(2)∑∑∞-∞=-*-*∞-∞=-+=+=n jw jw jwn n jwne X e X e n xn x en x )]()([21)]()([21)](Re[(3)dw e dX j e n x dw d j dw e n dx j en nx jw n jwnn jwn n jwn)()()(1)(==-=∑∑∑∞-∞=-∞-∞=-∞-∞=- 4.序列)(n x 的傅里叶变换为)(jwe X ,求下列各序列的傅里叶变换。
dft计算介绍
dft计算介绍
DFT(离散傅里叶变换)是一种在数字信号处理中常用的数学工具,用于将时域信号转换为频域信号。
以下是DFT的计算步骤:
数据准备:首先,需要准备一个时域信号。
这个信号可以是任何形式,比如声音、图像等。
确定信号长度:DFT计算需要知道信号的长度。
如果信号长度不是2的整数次幂,可以使用填充零的方法使其长度为2的整数次幂。
计算DFT:DFT的计算公式是X[k] = ∑[n=0 to N-1] x[n] * W[kn] 其中x[n] 是时域信号,X[k] 是频域信号,W[kn] 是虚数单位圆上的复数。
结果解释:DFT计算的结果是一个复数数组,每个复数的实部和虚部分别对应于一个频率分量的幅度和相位。
频谱分析:通过对DFT的结果进行分析,可以得到信号的频谱特性。
例如,可以分析信号的频率成分、频率范围等。
逆DFT计算:如果需要将频域信号还原为时域信号,可以进行逆DFT计算,即IDFT = 1/N ∑[k=0 to N-1] X[k] * W[-k*n]。
数字信号处理实验DFT
数字信号处理实验(第七章DFT)一、实验内容利用DFT对信号(如由多个正弦信号组成的信号)进行频谱分析,并研究不同数据长度,补零,加窗等对频率分辨率的影响。
二、实验工具MATLAB2012b软件三、实验涉及知识1.加窗:通常情况下,信号都是无限长的。
而在运用计算机进行模拟时,这是无法操作的。
所以实际情况下,要把观测的信号限制在一定长的时间之内。
为了从无限长的信号中得到有限长的数据,在时域乘一个窗函数,将信号截短,叫做加窗。
2.补零:为了增加频域抽样点数N,在不改变时域数据的情况下,在时域数据末端加一些零值点,叫做补零。
3.频率分辨率:指对两个最近的频谱峰值能够分辨的能力。
四、实验设计思路实验要求是利用DFT进行频谱分析,并研究不同数据长度,补零,加窗等对频率分辨率的影响。
我们利用DFT计算频谱的目的在于,针对计算机只能计算有限个离散的点的取值这一特点,实现计算机对连续时间信号的频谱的模拟。
所以我们比较关心的是模拟频谱和原信号频谱的拟合程度,我们希望拟合程度越高越好。
这就需要增加频率分辨率,因为频率分辨率越高,根据公式,说明相同采样频率下,采样的长度就越长,也就是频谱采样的点数就越多,我们可以看到的模拟频谱图像就越清晰,这样与原信号的拟合程度就越好。
根据实验要求,我将实验定为五部分,用4个m文件分别研究不同数据长度,补零,加窗,采样频率对频率分辨率的影响。
在程序设计中,出现的一个问题是,如何计算DFT后的频域函数的值。
课堂用的参考书上曾经给出一个将DFT转换为矩阵运算的方法,查阅相关参考书后,我发现在MATLAB信号处理工具箱中自带了一个dftmtx的函数,这个函数的功能是可以计算出旋转因子,计算出旋转因子后再将时域函数也转换成矩阵的形式进行DFT就可以了。
这里说明一下,由于dftmtx这个函数默认取值间隔为1,所以在没有特意设定采样频率的值得情况下,我们将采样频率默认为 1 。
实验设计中,为了更好的理解频率分辨率的概念,我不仅采用了绘图的形式,还直接计算了频率的分辨率,从而更直观的得到频率分辨率的具体数值。
北京理工大学 数字信号处理 实验报告 程序
数字信号处理实验报告1.深入掌握应用DFT分析信号的频谱的理论方法,针对该问题进行一次全面综合练习,完成一个完整的信号分析软件实现方法和流程,这种全面完整的综合练习可以帮助学生深入理解和消化基本理论,锻炼学生独立解决问题的能力,培养学生的创新意识,为今后的科研和工作打下良好的实践基础。
2.综合利用数字信号处理的理论知识完成数字滤波器的设计与实现,完成一个完整的数字滤波器设计软件的实现方法和流程。
这种全面完整的综合练习可以帮助学生深入理解和消化基本理论,锻炼学生独立解决问题的能力,培养学生的创新意识,为今后的科研和工作打下良好的实践基础。
二、实验设备与环境计算机、MATLAB软件环境三、实验内容1.基于Matlab GUI的离散傅里叶变换分析2.基于Matlab GUI的数字滤波器分析设计1.基于Matlab GUI的离散傅里叶变换分析信号: t=1:100;x=2*sin(t/25*2*pi)+5*sin(t/5*2*pi);说明:输入信号从Matlab Command Windows中生成,通过变量名导入本软件,并可输出DFT变换后的结果,默认名为DFT_输入变量名。
2.基于Matlab GUI的数字滤波器分析设计IIR 低通:(巴特沃兹)IIR高通:(切比雪夫I)IIR带通:(切比雪夫II)IIR带阻:(椭圆滤波器)FIR低通:(矩形窗)FIR高通:(汉宁窗)FIR带通:(布莱克曼窗)FIR带阻:(凯瑟窗)五、程序界面设计及程序源代码1.基于Matlab GUI的离散傅里叶变换分析界面设计:程序代码:function varargout =SignalDFTSoftware(varargin)% SIGNALDFTSOFTWARE MATLAB code for SignalDFTSoftware.fig% SIGNALDFTSOFTWARE, by itself, creates a new SIGNALDFTSOFTWARE or raises the existing% singleton*.%% H = SIGNALDFTSOFTWARE returns the handle to a new SIGNALDFTSOFTWARE or the handle to% the existing singleton*.%%SIGNALDFTSOFTWARE('CALLBACK',hObject,even tData,handles,...) calls the local% function named CALLBACK in SIGNALDFTSOFTWARE.M with the given input arguments.%%SIGNALDFTSOFTWARE('Property','Value',...) creates a new SIGNALDFTSOFTWARE or raises the% existing singleton*. Starting from the left, property value pairs are% applied to the GUI before SignalDFTSoftware_OpeningFcn gets called.An% unrecognized property name or invalid value makes property application% stop. All inputs are passed to SignalDFTSoftware_OpeningFcn via varargin. %% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one% instance to run (singleton)".%% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help SignalDFTSoftware% Last Modified by GUIDE v2.5 26-Nov-2011 12:55:11% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct('gui_Name',mfilename, ...'gui_Singleton', gui_Singleton, ...'gui_OpeningFcn',@SignalDFTSoftware_OpeningFcn, ...'gui_OutputFcn',@SignalDFTSoftware_OutputFcn, ...'gui_LayoutFcn', [] , ...'gui_Callback', []);if nargin&&ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1}); endif nargout[varargout{1:nargout}] =gui_mainfcn(gui_State, varargin{:});elsegui_mainfcn(gui_State, varargin{:});end% End initialization code - DO NOT EDIT% --- Executes just before SignalDFTSoftware is made visible.function SignalDFTSoftware_OpeningFcn(hObjec t, eventdata, handles, varargin)% This function has no output args, see OutputFcn.% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% varargin command line arguments to SignalDFTSoftware (see VARARGIN)% Choose default command line output for SignalDFTSoftwarehandles.output = hObject;% Update handles structure guidata(hObject, handles);% UIWAIT makes SignalDFTSoftware wait for user response (see UIRESUME)% uiwait(handles.figure1);% --- Outputs from this function are returned to the command line.function varargout =SignalDFTSoftware_OutputFcn(hObject, eventdata, handles)% varargout cell array for returning output args (see VARARGOUT);% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% Get default command line output from handles structurevarargout{1} = handles.output;% --- If Enable == 'on', executes on mouse press in 5 pixel border.% --- Otherwise, executes on mouse press in 5 pixel border or over random.function random_ButtonDownFcn(hObject, eventdata, handles)% hObject handle to random (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% --- Executes on button press in random. function random_Callback(hObject, eventdata, handles)% hObject handle to random (see GCBO)% eventdata reserved - to be defined in a future version of MATLABglobal x;global x_flag;x=rand(1,50)*20-10;x_flag=1;if(x_flag)plot(handles.TD,0:(length(x)-1),x);end% --- Executes on button press in Delete.function Delete_Callback(hObject, eventdata, handles)% hObject handle to Delete (see GCBO)% eventdata reserved - to be defined in a future version of MATLABglobal x;global X;global x_flag;global X_flag;x=0;X=0;x_flag=0;X_flag=0;plot(handles.TD,0,0);plot(handles.FD,0,0);% --- If Enable == 'on', executes on mouse press in 5 pixel border.% --- Otherwise, executes on mouse press in 5 pixel border or over Delete.function Delete_ButtonDownFcn(hObject, eventdata, handles)% hObject handle to Delete (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% --- If Enable == 'on', executes on mouse press in 5 pixel border.% --- Otherwise, executes on mouse press in 5 pixel border or over Analyse.function Analyse_ButtonDownFcn(hObject, eventdata, handles)% hObject handle to Analyse (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% --- Executes on button press in Analyse. function Analyse_Callback(hObject, eventdata, handles)% hObject handle to Analyse (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB global x;global X;global x_flag;global X_flag;if(x_flag)X=fft(x);X_flag=1;endif(X_flag)stem(handles.FD,linspace(0,2*pi,length(X)),abs( X));xlim(handles.FD,[0,2*pi])end% --- Executes on button press in Export. function Export_Callback(hObject, eventdata, handles)% hObject handle to Export (see GCBO)% eventdata reserved - to be defined in a future version of MATLABglobal X;global X_flag;if(X_flag)assignin('base',get(handles.edit4,'String'),X); end% --- Executes during object creation, after setting all properties.function text1_CreateFcn(hObject, eventdata, handles)% hObject handle to text1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns calledglobal x_flag;global X_flag;global x;global X;x_flag=0;X_flag=0;x=0;X=0;function name_Callback(hObject, eventdata, handles)% hObject handle to name (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% Hints: get(hObject,'String') returns contents of name as text% str2double(get(hObject,'String')) returns contents of name as a double% --- Executes during object creation, after setting all properties.function name_CreateFcn(hObject, eventdata, handles)if ispc&&isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end% --- Executes on button press in import. function import_Callback(hObject, eventdata, handles)global x;global x_flag;global signal_name;signal_name=get(,'String');x='empty';set(,'String','Notexist,Retry!');x=evalin('base',signal_name);set(,'String','Succeed');x_flag=1;if(x_flag)plot(handles.TD,0:(length(x)-1),x);endset(handles.edit4,'String',strcat('DFT_',signal_na me));function edit4_Callback(hObject, eventdata, handles)function edit4_CreateFcn(hObject, eventdata, handles)if ispc&&isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); endglobal signal_name;2.基于Matlab GUI的数字滤波器分析设计界面设计:程序设计:function varargout = filter(varargin)%EDIT By Yu Yizhe%V1.0%2011/11/20%all right reserve% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct('gui_Name', mfilename, ...'gui_Singleton', gui_Singleton, ...'gui_OpeningFcn', @filter_OpeningFcn, ...'gui_OutputFcn', @filter_OutputFcn, ...'gui_LayoutFcn', [], ...'gui_Callback', []);if nargin&&ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1}); endif nargout[varargout{1:nargout}] =gui_mainfcn(gui_State, varargin{:});elsegui_mainfcn(gui_State, varargin{:});end% End initialization code - DO NOT EDIT% --- Executes just before filter is made visible. function filter_OpeningFcn(hObject, eventdata, handles, varargin)% This function has no output args, see OutputFcn.% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% varargin unrecognizedPropertyName/PropertyValue pairs from the% command line (see VARARGIN)% Choose default command line output for filter handles.output = hObject;% Update handles structureguidata(hObject, handles);% UIWAIT makes filter wait for user response (see UIRESUME)% uiwait(handles.figure1);% --- Outputs from this function are returned tothe command line.function varargout = filter_OutputFcn(hObject, eventdata, handles)% varargout cell array for returning output args (see VARARGOUT);% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% Get default command line output from handles structurevarargout{1} = handles.output;function text1_CreateFcn(hObject, eventdata, handles)global ch1;global ch2;global ch31;global ch32;ch1=1;ch2=1;ch31=1;ch32=1;function IIRtype_Callback(hObject, eventdata, handles)global ch1;global ch2;global ch31;global ch32;ch31=get(hObject,'Value');function IIRtype_CreateFcn(hObject, eventdata, handles)if ispc&&isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction e11_Callback(hObject, eventdata, handles)function e11_CreateFcn(hObject, eventdata, handles)if ispc&&isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); endfunction e12_Callback(hObject, eventdata, handles)function e12_CreateFcn(hObject, eventdata, handles)if ispc&&isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); endfunction e21_Callback(hObject, eventdata, handles)function e21_CreateFcn(hObject, eventdata, handles)if ispc&&isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); endfunction e22_Callback(hObject, eventdata, handles)function e22_CreateFcn(hObject, eventdata, handles)if ispc&&isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); endfunction e31_Callback(hObject, eventdata, handles)function e31_CreateFcn(hObject, eventdata, handles)if ispc&&isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); endfunction e32_Callback(hObject, eventdata, handles)function e32_CreateFcn(hObject, eventdata, handles)if ispc&&isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); endfunction e41_Callback(hObject, eventdata, handles)function e41_CreateFcn(hObject, eventdata, handles)if ispc&&isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); endfunction e42_Callback(hObject, eventdata, handles)function e42_CreateFcn(hObject, eventdata, handles)if ispc&&isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); endfunction generate_Callback(hObject, eventdata, handles)global ch1;global ch2;global ch31;global ch32;global typech;global w1p;global w1s;global w2p;global w2s;global rp;global rs;if ch1==1typech=ch1*100+ch2*10+ch31;elseif ch2==2typech=ch1*100+ch2*10+ch32;endw1p=str2num(get(handles.e11,'String'));w1s=str2num(get(handles.e12,'String'));w2p=str2num(get(handles.e21,'String'));w2s=str2num(get(handles.e22,'String'));rp=str2num(get(handles.e41,'String'));rs=str2num(get(handles.e42,'String')); Generate(handles);function FIRtype_Callback(hObject, eventdata, handles)global ch1;global ch2;global ch31;global ch32;ch32=get(hObject,'Value');function FIRtype_CreateFcn(hObject, eventdata, handles)if ispc&&isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); endfunction poptype_Callback(hObject, eventdata, handles)global ch1;global ch2;global ch31;global ch32;ch2=get(hObject,'Value');reprint(handles);function poptype_CreateFcn(hObject, eventdata, handles)if ispc&&isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); endfunction iirchoose_ButtonDownFcn(hObject, eventdata, handles)function firchoose_Callback(hObject, eventdata, handles)global ch1;global ch2;global ch31;global ch32;if(get(handles.firchoose,'Value')==0)set(handles.iirchoose,'Value',1);set(handles.FIRtype,'Visible','off');set(handles.IIRtype,'Visible','on');ch1=1;endif(get(handles.firchoose,'Value')==1)set(handles.iirchoose,'Value',0);set(handles.FIRtype,'Visible','on');set(handles.IIRtype,'Visible','off');ch1=2;endreprint(handles);function firchoose_ButtonDownFcn(hObject, eventdata, handles)function iirchoose_Callback(hObject, eventdata, handles)global ch1;global ch2;global ch31;global ch32;if(get(handles.iirchoose,'Value')==0)set(handles.firchoose,'Value',1);set(handles.FIRtype,'Visible','on');set(handles.IIRtype,'Visible','off');ch1=2;endif(get(handles.iirchoose,'Value')==1)set(handles.firchoose,'Value',0);set(handles.FIRtype,'Visible','off');set(handles.IIRtype,'Visible','on');ch1=1;endreprint(handles);function reprint(handles)global ch1;global ch2;global ch31;global ch32;temp=ch1*10+ch2;tempswitch tempcase {11,12}set(handles.add1,'Visible','off');set(handles.add2,'Visible','off');set(handles.e21,'Visible','off');set(handles.e22,'Visible','off');set(handles.pr,'Visible','on'); case{13,14}set(handles.add1,'Visible','on');set(handles.add2,'Visible','on');set(handles.e21,'Visible','on');set(handles.e22,'Visible','on');set(handles.pr,'Visible','on'); case{21,22},set(handles.add1,'Visible','off');set(handles.add2,'Visible','off');set(handles.e21,'Visible','off');set(handles.e22,'Visible','off');case{23,24},set(handles.add1,'Visible','on');set(handles.add2,'Visible','on');set(handles.e21,'Visible','on');set(handles.e22,'Visible','on');otherwisefprintf('switch error\n');endfunction Generate(handles)global ch1;global ch2;global ch31;global ch32;global typech;global w1p;global w1s;global w2p;global w2s;global rp;global rs;N=0;Wn=0;Wp=0;Wst=0;Rp=0;As=0;ftype='a';b=0;a=0;switch ch2case 1,ftype='low';case 2,ftype='high';case 3,ftype='bandpass';case 4,ftype='stop';endswitch ch2case {1,2}Wp=w1p;Wst=w1s;Rp=rp;As=rs;case {3,4}Wp=[w2p w1p];Wst=[w2s w1s];Rp=rp;As=rs;endswitch ch1 %IIR case 1,switch ch31case 1,[N,Wn]=buttord(Wp,Wst,Rp,As);[b,a]=butter(N,Wn,ftype); case 2,[N,Wn]=cheb1ord(Wp,Wst,Rp,As);[b,a]=cheby1(N,Rp,Wn,ftype);case 3,[N,Wn]=cheb2ord(Wp,Wst,Rp,As);[b,a]=cheby2(N,As,Wn,ftype); case 4,[N,Wn]=ellipord(Wp,Wst,Rp,As);[b,a]=ellip(N,Rp,As,Wn,ftype);endprint4(a,b,handles);case 2 %FIR tranbw=0;N=0;hw=0;Wn=(Wp+Wst)/2;switch ch32case 1, %Rectangular tranbw=1.8;N=ceil(tranbw/abs(w1s-w1p))+1;hw=boxcar(N);case 2, %Hanning tranbw=6.2;N=ceil(tranbw/abs(w1s-w1p))+1;hw=hanning(N);case 3, %Hamming tranbw=6.6;N=ceil(tranbw/abs(w1s-w1p))+1;hw=hamming(N);case 4, %Blackman tranbw=11;N=ceil(tranbw/abs(w1s-w1p))+1;hw=blackman(N);case 5, %KaiserN=(rs-7.95)/2.285/abs(w1s-w1p)+1;N=ceil(N);if (rs>=50)BTA=0.1102*(rs-8.7); elseif(rs>21)BTA=0.5842*(rs-21)^0.4+0.07886*(rs-21);elseBTA=0.5;endhw=kaiser(N,BTA);endh=fir1(N-1,Wn,ftype,hw');print4(h,N,handles);endfunction print4(a,b,handles)global ch1;if(ch1==1) %IIRw=[0:500]*pi/500;axes(handles.axes1);H=freqz(b,a,w);plot(handles.axes1,w/pi,abs(H)); xlabel('\Omega(\pi)');ylabel('|H(j\Omega)|');%axis ([0,0.5,0,1]);axes(handles.axes2);plot(handles.axes2,w/pi,20*log10((abs(H))/max(a bs(H))));xlabel('\Omega(\pi)');ylabel('|H(j\Omega)|,dB');% axis([0,0.5,-30,0]);axes(handles.axes3);plot(handles.axes3,w/pi,angle(H)/pi); xlabel('\Omega(\pi)');ylabel('Phase of H(j\Omega)(\pi)');%axis([0,0.5,-1,1]);t=0:30;axes(handles.axes4);h=impulse(b,a,t);stem(handles.axes4,t,h);xlabel('n');ylabel('Impulse Response');elseif(ch1==2) %FI RN=b;h=a;[H,w]=freqz(h,1);axes(handles.axes1);plot(handles.axes1,w/pi,abs(H)); xlabel('\Omega(\pi)');ylabel('|H(j\Omega)|');%axis ([0,0.5,0,1]);axes(handles.axes2);plot(handles.axes2,w/pi,20*log10((abs(H))/max(a bs(H))));xlabel('\Omega(\pi)');ylabel('|H(j\Omega)|,dB');% axis([0,0.5,-30,0]);axes(handles.axes3);plot(handles.axes3,w/pi,angle(H)/pi); xlabel('\Omega(\pi)');ylabel('Phase ofH(j\Omega)(\pi)');%axis([0,0.5,-1,1]);t=0:N-1;axes(handles.axes4);stem(handles.axes4,t,h);xlabel('n');ylabel('Impulse Response');end六、实验总结这次的数字信号处理实验非常有意义,让我学会了用计算机进行数字信号处理,计算各种参数,绘制出信号的波形,频谱。
北理工数字信号处理实验一
实验一基2-FFT算法实现
实验目的
1、掌握基2-FFT的原理及具体实现方法。
2、编程实现基2-FFT算法。
3、加深理解FFT算法的特点。
实验设备与环境
计算机、MATLAB软件环境
实验原理
FFT是一种DFT的高效算法,称为快速傅立叶变换(fast Fourier transform)。
FFT算法可分为按时间抽取算法和按频率抽取算法,先简要介绍FFT的基本原理。
从DFT运算开始,说明FFT的基本原理。
FFT算法基本上可以分为两大类,即按时间抽取法和按频率抽取法。
实验内容
1.编程实现序列长度N=8的按时间抽取的基2-FFT算法。
给定一个8点序列,采用编写的
程序计算其DFT,并与MATLAB中的fft函数计算的结果相比较,以验证结果的正确性。
结果如下:
验证如下:
2.编程实现序列长度为N=8的按频率抽取的基2-FFT算法。
给定一个8点序列,采用编写
的程序计算其DFT,并与MATLAB中fft函数计算的结果相比较,以验证结果的正确性。
心得与体会
通过本次实验,我加深了对课堂上所学的FFT运算的理解,掌握了如何用matlab实现基2-FFT 算法。
过程中在编程上有一些不熟练,经过老师同学的帮助,最终得以完成。
程佩青《数字信号处理教程》(第4版)(名校考研真题详解 离散傅里叶变换(DFT))
2 / 18
圣才电子书
十万种考研考证电子书、题库视频学习平
台
对上式进行 DFT 变换有:
即:
,得证。
5.考虑如图 3-1 所示的线性非移(时)变 LSI 系统的互联
图 3-1
(1)试用
和
表示整个系统的频率响应;
12.已知有限长序列{g[n]}、{h[n]},其中{g[n]}={3,2,4},{h[n]}
={2,-4,0,1}。试求:
(1)线性卷积
;
(2)循环卷积
;
(3)基于 DFT 变换的方法求循环卷积
。[北京大学 2005 研]
解:(1)根据已知 g[n]={3,2,4},h[n]={2,-4,0,1},其线性卷积为:
若
,其中
、
分别是 x(n)和 h(n)的 5 点 DFT,
对 Y(k)作 IDFT,得到序列 y(n),求 y(n)。[华东理工大学 2005 研]
(2)根据频率和周期的关系得:
, 又因为 DFT 的分辨率达到 1Hz 时:
所以采样数据为:
由上可知此应该采集 4000 个点的数据。 7.计算有限长时间序列:
4 / 18
圣才电子书
均 N 点 DFT 的值
,
十万种考研考证电子书、题库视频学习平 台
。[北京理工大学 2006 研]
即: 帕塞瓦尔(Parseval)定理的物理意义表示信号时域和频域能量是守恒的。
2.设 DFT[x(n)]=X(k),求证: DFT[X(k)]~Nx(N-n)。 [华南理工大学 2007 研]
证明:由已知对 DFT[x(n)]求反变换得 x(n)为:
数字信号处理技术中DFT和FFT介绍
6.5 DFT与FFT
1、离散傅立叶变换 离散傅里叶变换(Discrete Fourier Transform)一 词是为适应计算机作傅里叶变换运算而引出的一 个专用名词。
x(t)
截断、周期延拓
xT(t)
周期信号xT(t)的傅里叶变换:
第六章、数字信号处理技术 对周期信号xT(t)采样,得离散序列xT(n),将
6.5 DFT与FFT
连续傅立叶变换编程计算实验:
6.5 DFT与FFT 采样信号频谱是一个连续频谱,不可能计算 出所有频率点值,设频率取样间隔为:
Δf = fs / N
频率取样点为{0,Δf,2Δf,3Δf,....},有:
该公式就是离散傅立叶计算公式(DFT)
6.5 DFT与FFT
2、快速傅立叶变换
FFT栅栏效应
从克服栅栏效应误差角度看,能量泄漏是有利的。
6.5 DFT与FFT 通过加窗控制能量泄漏,减小栅栏效应误差: 加矩形窗
加汉宁窗
快速傅立叶变换(FFT)是离散傅立叶变换的一种 有效的算法,通过选择和重新排列中间结果,减小 运算量。
展开各点的DFT计算公式:
XR(1)=x(0).cos(2pi*0*1/N)+x(1).cos(2pi*1*1/N)+x(2).cos(2pi*2*1/N)…..
XR(2)=x(0).cos(2pi*0*2/N)+x(1).cos(2pi*1*2/N)+x(2).cos(2pi*2*2 /N)…..
积分转为集合:
展开,得连续傅立叶变换计算公式:
用计算机编程很容易计算出指定频率点值:
6.5 DFT与FFT
VBScript 样例
数字信号处理实验五用DFT(FFT)对信号进行频谱分析
开课学院及实验室:电子楼3172018年 4月 29 日3()x n :用14()()x n R n =以8为周期进行周期性延拓形成地周期序列.(1> 分别以变换区间N =8,16,32,对14()()x n R n =进行DFT(FFT>,画出相应地幅频特性曲线;(2> 分别以变换区间N =4,8,16,对x 2(n >分别进行DFT(FFT>,画出相应地幅频特性曲线; (3> 对x 3(n >进行频谱分析,并选择变换区间,画出幅频特性曲线.<二)连续信号 1. 实验信号:1()()x t R t τ=选择 1.5ms τ=,式中()R t τ地波形以及幅度特性如图7.1所示.2()sin(2/8)x t ft ππ=+式中频率f 自己选择.3()cos8cos16cos 20x t t t t πππ=++2. 分别对三种模拟信号选择采样频率和采样点数.对1()x t ()R t τ=,选择采样频率4s f kHz =,8kHz ,16kHz ,采样点数用τ.s f 计算.对2()sin(2/8)x t ft ππ=+,周期1/T f =,频率f 自己选择,采样频率4s f f =,观测时间0.5p T T =,T ,2T ,采样点数用p s T f 计算.图5.1 R(t>地波形及其幅度特性对3()cos8cos16cos 20x t t t t πππ=++,选择采用频率64s f Hz =,采样点数为16,32,64. 3. 分别对它们转换成序列,按顺序用123(),(),()x n x n x n 表示.4. 分别对它们进行FFT.如果采样点数不满足2地整数幂,可以通过序列尾部加0满足.5. 计算幅度特性并进行打印.五、实验过程原始记录<数据、图表、计算等)(一> 离散信号%14()()x n R n = n=0:1:10。
数字信号处理--实验五-用DFT(FFT)对信号进行频谱分析
学生实验报告开课学院及实验室:电子楼3172013年4月29日、实验目的学习DFT 的基本性质及对时域离散信号进行频谱分析的方法,进一步加深对频域概念和数字频率的理解,掌握 MATLAB 函数中FFT 函数的应用。
二、实验原理离散傅里叶变换(DFT)对有限长时域离散信号的频谱进行等间隔采样,频域函数被离散化了, 便于信号的计算机处理。
设x(n)是一个长度为 M 的有限长序列,x(n)的N 点傅立叶变换:X(k)N 1j 三 knDFT[x(n)]N x(n)e N0 k N 1n 0其中WNe.2 jN,它的反变换定义为:1X(n)NkN 1nkX(k)W N0 令z W N k,X(zz WN k则有:N 1x( n)Wj kn 0可以得到,X(k)X(Z)Z WN kZ W N*是Z 平面单位圆上幅角为2kN 的点,就是将单位圆进行N 等分以后第 K 个点。
所以, X(K)是Z 变换在单位圆上的等距采样,或者说是序列傅立叶变换的等距采样。
时域采样在满足Nyquist 定理时,就不会发生频谱混叠。
DFT 是对序列傅立叶变换的等距采样,因此可以用于序列的频谱分析。
如果用FFT 对模拟信号进行谱分析,首先要把模拟信号转换成数字信号,转换时要求知道模拟 信号的最高截至频率,以便选择满足采样定理的采样频率。
般选择采样频率是模拟信号中最高频率的3~4倍。
另外要选择对模拟信号的观测时间,如果采样频率和观测时间确定,则采样点数也确定 了。
这里观测时间和对模拟信号进行谱分析的分辨率有关,最小的观测时间和分辨率成倒数关系。
最小的采样点数用教材相关公式确定。
要求选择的采样点数和观测时间大于它的最小值。
如果要进行谱分析的模拟信号是周期信号,最好选择观测时间是信号周期的整数倍。
如果不知道■ 厂1*1IE向i1A I1f Ii i 0r 1 疋0Jfb-4W0 70000图5.1 R(t)的波形及其幅度特性xn=[on es(1,4),zeros(1,7)];%输入时域序列向量 xn=R4( n)%计算xn 的8点DFTXk16=fft(x n,16);%计算xn 的16点DFTXk32=fft(x n,32); %计算xn 的32点DFTk=0:7;wk=2*k/8;对 x 3(t) cos8 t cos16 t cos20 t ,选择采用频率 f s 64Hz ,采样点数为 16 , 32 , 64。
理解DFT如何逼近FT的实例教学法
理解DFT如何逼近FT的实例教学法徐友根;彭开南;郑一鸣【摘要】本文结合一个离散傅里叶变换DFT计算实例,分析了DFT与连续时间傅里叶变换FT之间的联系,以较为直观的方式阐述了由FT到DFT的演变过程,以及该过程关键环节对最终结果的影响,主要包括谱泄漏,折叠效应,栅栏效应以及谱折移等.教学实践表明,通过该实例讲述DFT对FT的逼近问题,能有效加深学生对DFT 的认识和理解.【期刊名称】《电气电子教学学报》【年(卷),期】2017(039)005【总页数】3页(P76-77,111)【关键词】数字信号处理;傅里叶变换;离散傅里叶变换【作者】徐友根;彭开南;郑一鸣【作者单位】北京理工大学信息与电子学院,北京 100081;北京理工大学信息与电子学院,北京 100081;北京理工大学信息与电子学院,北京 100081【正文语种】中文【中图分类】TN913离散傅里叶变换DFT作为有限长序列的一种频域表示法,在理论上有着重要的作用。
由于其存在快速计算方法—快速傅里叶变换FFT,因而在数字信号处理中也有着重要的作用。
现有数字信号处理教材在引入DFT概念时,一般从连续非周期信号的傅立叶变换FT出发,将信号时域采样,从而FT转化为离散时间傅里叶变换DTFT。
然后将信号的频谱采样,得到离散傅立叶级数DFS的公式。
再将时域和频域上各取一个主值区间就形成了DFT。
这一过程中存在四种变化需要注意,也即截断效应(谱泄漏),折叠效应,栅栏效应以及谱折移[1,2]。
根据笔者的教学体会,很多学生虽然应用DFT公式计算相当熟练,但对DFT概念的来龙去脉未必清楚,对上述四种变化引出的误差也缺乏直观认识。
本文通过DFT计算实例,对由FT到DFT的演变过程作了简单而系统的阐述,将其引入到教学中,讲授DFT对FT的逼近问题能加深学生对DFT概念的理解和掌握。
图1所示为DFT逼近FT的详细过程。
考虑下述DFT计算实例:对模拟信号xa(t)=-0.5+cos2(200πt)以一定的采样率进行采样,得到一个 256点数字序列,记作x(n),其中n=0~255。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
北京理工大学数字信号处理1-DFT
————————————————————————————————作者: ————————————————————————————————日期:
数字信号处理
第三章离散傅里叶变换DFT
班级:05941401
姓名:张xx
学号:112014xxxx
一、实验要求
利用DFT对信号(如由多个正弦信号组成的信号)进行频谱分析,并研究不同数据长度,补零,加窗等对频率分辨率的影响。
二、名词解释
1.补零:在时域信号末端加一些零值点,以增加频域采样点数。
2.加窗:计算机不能对无限长的信号进行测量和运算,需要从信号中截取一个时间片段,然后用截取的信号时间片段进行周期延拓处理,得到虚拟的无限长的信号,然后就可以对信号进行傅里叶变换、相关分析等数学处理。
3.频率分辨率:指将两个相邻谱峰分开的能力。
三、实验内容及步骤
1.不同数据长度对频率分辨率的影响
(1)实验方法:
由于Matlab中没有dtf函数,所以新建一个m文件,根据已知DFT公式,定义一个dft函数。
然后设定采样长度分别为N=10和N=50,对同一个信号进行采样,并用matlab 绘制其时域序列图、幅频特性曲线、频域序列图。
比较两者的最小频率间隔,从而比较频率分辨率。
(2)Matlab代码
①
N=10;
n=0:1:N-1;
xn=sin(5*2*pi*n/30)+cos(3*2*pi*n/30);
Xk=dft(xn,N);
subplot(3,1,1)
stem(n,xn,'filled');
title('xn');
xlabel('n');
axis([0,10,-2.5,2.5]);
w=2*pi*(0:1:2047)/2048;
Xw=xn*exp(-j*n'*w);
subplot(3,1,2);
plot(w/pi,abs(Xw));
title('X(ejw)');
xlabel('w');
axis([0,1,0,10]);
subplot(3,1,3)
k1=0:1:9;w1=2*pi/10*k1;
stem(w1/pi,abs(Xk),'filled');
title('Xk');
xlabel('pi');
axis([0,1,0,10]);
②
N=50;
n=0:1:N-1;
xn=sin(5*2*pi*n/30)+cos(3*2*pi*n/30); Xk=dft(xn,N);
subplot(3,1,1)
stem(n,xn,'filled');
title('xn');
xlabel('n');
axis([0,10,-2.5,2.5]);
w=2*pi*(0:1:2047)/2048;
Xw=xn*exp(-j*n'*w);
subplot(3,1,2);
plot(w/pi,abs(Xw));
title('X(ejw)');
xlabel('w');
axis([0,1,0,30]);
subplot(3,1,3)
k1=0:1:49;w1=2*pi/50*k1;
stem(w1/pi,abs(Xk),'filled'); title('Xk');
xlabel('pi');
axis([0,1,0,30]);
(3)实验结果
N=10
N=50
(4)结论与分析
结论:数据长度越长,频率分辨率越高。
分析:根据公式,其中N为采样点数,为采样频率,为采
样间隔。
因此,T为数据长度,最小频率间隔与数据长度成反比;最小频率间隔越小,频率分辨率越高。
2.补零对频率分辨率的影响
(1)实验方法:
对上一实验中的相同信号进行补零至100位,仍然取N=10,模拟出其时域序列图、幅频特性曲线、频域序列图。
(2)Matlab程序:
N=10;
n=0:N-1;
xn=sin(5*2*pi*n/30)+cos(3*2*pi*n/30);
N1=100; n1=0:N1-1;
x1=[xn(1:10) zeros(1,90)];
subplot(3,1,1)
stem(n1,x1,'filled');
title('x1');
xlabel('n');
axis([0,20,-2.5,2.5]);
w=2*pi*(0:2047)/2048;
X1=x1*exp(-j*n1'*w);
subplot(3,1,2);
plot(w/pi,abs(X1));
title('X(ejw)');
xlabel('w');
axis([0,1,0,10]);
subplot(3,1,3)
Xk=dft(x1,N1);
k1=0:1:49;
w1=2*pi/100*k1;
stem(w1/pi,abs(Xk(1:1:50)),'filled');title('Xk');
xlabel('pi');
axis([0,1,0,10]);
(3)实验结果:
(4)结论与分析
补零对频率分辨率没有影响。
因为补零是在信号时域上进行的活动,信号的有效长度没有改变,所以频谱也没有变化,因而不能提高频率分辨率。
3.加窗对频率分辨率的影响
(1)实验方法:
设定采样长度N=50,对同一信号进行采样,采用加窗的方法对时域图像进行采样,模拟出时域序列图、幅频特性曲线和频域序列图。
这里要注意的是我们采用加窗的方法时,设定信号的长度为400,然后对长度为400的信号进行截短加窗,这时只有加窗处我们是对信号采样的,即得到的信号是有效的,其余位置信号都为0。
(2)Matlab代码:
N=50;
n=0:N-1;
xn=sin(5*2*pi*n/30)+cos(3*2*pi*n/30);
N2=400;n2=1:400;
x1=(sin(n2*5*2*pi/30)+cos(n2*3*2*pi/30)).*(heaviside(n2)-h eaviside(n2-N+1));
subplot(3,1,1)
stem(n2,x1,'filled');
title('x1');
xlabel('n');
axis([0,10,-2.5,2.5]);
w=2*pi*(0:2047)/2048;
X1=x1*exp(-j*n2'*w);
subplot(3,1,2);
plot(w/pi,abs(X1));
title('X(ejw)');
xlabel('w');
axis([0,1,0,30]);
subplot(3,1,3)
Xk=dft(x1,N2);
k1=0:1:399;
w1=2*pi/400*k1;
stem(w1/pi,abs(Xk),'filled'); title('Xk');
xlabel('pi');
axis([0,1,0,30]);
(3)实验结果:
(4)结论与分析:
通过比较上面的图形和实验1中的N=50的频域图像,可以看出频谱有轻微的失真。
这是因为加窗是在时域上对原信号乘一个窗函数,相当于频域上两者卷积。
导致了一定程度的谱线展宽,因而发生了频谱泄露,同时降低了频率分辨率。