利用MATLAB实现信号DFT的计算
- 格式:doc
- 大小:81.00 KB
- 文档页数:5
DSP MATLAB上机实验一班级:学号:姓名:函数代码:function xn()format longq=0.9+0.3*i;wn=exp(-2*pi*i/32);xn=q.^[0:31]xk1=(1-q^32)./(1-q*wn.^[0:31]) %利用公式计算XK的理论值xk2=fft(xn,32) %运用基二基2时间抽选的FFT算法计算Xkdiff=xk1-xk2 %两者的差运行xn()即得结果结果为:xn =Columns 1 through 21.000000000000000 0.900000000000000 + 0.300000000000000i Columns 3 through 40.720000000000000 + 0.540000000000000i 0.486000000000000 + 0.702000000000000i Columns 5 through 60.226800000000000 + 0.777600000000000i -0.029160000000000 + 0.767880000000000i Columns 7 through 8-0.256608000000000 + 0.682344000000000i -0.435650400000000 + 0.537127200000000i Columns 9 through 10-0.553223520000000 + 0.352719360000000i -0.603716976000000 + 0.151480368000000i Columns 11 through 12-0.588789388800000 - 0.044782761600000i -0.516475621440000 - 0.216941302080000i Columns 13 through 14-0.399745668672000 - 0.350189858304000i -0.254714144313600 - 0.435094573075200i Columns 15 through 16-0.098714357959680 - 0.467999359061760i 0.051556885554816 - 0.450813730543488i Columns 17 through 180.181645316162381 - 0.390265291822695i 0.280560372092951 - 0.296745167791711i Columns 19 through 200.341527885221169 - 0.182902539384655i 0.362245858514449 - 0.062153919879838i Columns 21 through 220.344667448626955 + 0.052735229662480i 0.294380134865516 + 0.150861941284319i Columns 23 through 240.219683538993669 + 0.224089787615542i 0.130488248809639 + 0.267585870552088i Columns 25 through 260.037163662763049 + 0.279973758139771i -0.050544830955187 + 0.263125481154709i Columns 27 through 28-0.124427992206081 + 0.221649483752682i -0.178480038111278 + 0.162156137715589i Columns 29 through 30-0.209278875614827 + 0.092396512510647i -0.216069941806538 + 0.020373198575134i Columns 31 through 32-0.200574907198425 - 0.046485103824341i -0.166571885331280 - 0.102009065601434i xk1 =Columns 1 through 20.693972803195698 + 3.499715655993840i 2.792267857648369 + 8.050455721438597i Columns 3 through 49.402964607913189 - 9.135013555028673i 1.866445467462052 - 3.833832762635439i Columns 5 through 61.131822689478846 -2.234157347130941i 0.904793922868299 - 1.534629307882413i Columns 7 through 80.799557206779214 - 1.139609357830753i 0.739605630813150 - 0.882314367550644i Columns 9 through 100.700861643199240 - 0.698565363198060i 0.673575789604202 - 0.558478478082158i Columns 11 through 120.653109437428513 - 0.446244996656357i 0.636991253015040 - 0.352689135211701i Columns 13 through 140.623788380776217 - 0.272085968296931i 0.612612873742441 - 0.200641851238978i Columns 15 through 160.602883340189454 - 0.135703205872800i 0.594200434347139 - 0.075313670713158i Columns 17 through 180.586277479436723 - 0.017949220626496i 0.578899608820263 + 0.037651723475093i Columns 19 through 200.571898466305671 + 0.092606953506914i 0.565135772013173 + 0.147983310049841i Columns 21 through 220.558492135768929 + 0.204880771267792i 0.551859131244066 + 0.264522208758452i Columns 23 through 240.545133643745847 + 0.328364940349017i 0.538214362209129 + 0.398257131749283i Columns 25 through 260.531001527230573 + 0.476677768575531i 0.523403723684219 + 0.567132338629562i Columns 27 through 280.515362483773298 + 0.674849986673143i 0.506925762334513 + 0.808101482252638i Columns 29 through 300.498467012317214 + 0.980906313951879i 0.491389377970933 + 1.219207441587793i Columns 31 through 320.490732201059483 + 1.577081955159802i 0.517353973624932 + 2.188832884536347i xk2 =Columns 1 through 20.693972803195698 + 3.499715655993839i 2.792267857648366 + 8.050455721438597i Columns 3 through 49.402964607913182 - 9.135013555028694i 1.866445467462051 - 3.833832762635439iColumns 5 through 61.131822689478844 -2.234157347130942i 0.904793922868298 - 1.534629307882413i Columns 7 through 80.799557206779213 - 1.139609357830754i 0.739605630813149 - 0.882314367550644i Columns 9 through 100.700861643199240 - 0.698565363198060i 0.673575789604202 - 0.558478478082158i Columns 11 through 120.653109437428513 - 0.446244996656356i 0.636991253015040 - 0.352689135211701i Columns 13 through 140.623788380776217 - 0.272085968296931i 0.612612873742441 - 0.200641851238978i Columns 15 through 160.602883340189454 - 0.135703205872799i 0.594200434347139 - 0.075313670713158i Columns 17 through 180.586277479436723 - 0.017949220626496i 0.578899608820263 + 0.037651723475093i Columns 19 through 200.571898466305671 + 0.092606953506913i 0.565135772013173 + 0.147983310049840i Columns 21 through 220.558492135768929 + 0.204880771267792i 0.551859131244066 + 0.264522208758452i Columns 23 through 240.545133643745847 + 0.328364940349016i 0.538214362209129 + 0.398257131749282i Columns 25 through 260.531001527230572 + 0.476677768575531i 0.523403723684219 + 0.567132338629563iColumns 27 through 280.515362483773297 + 0.674849986673143i 0.506925762334512 + 0.808101482252638i Columns 29 through 300.498467012317213 + 0.980906313951878i 0.491389377970932 + 1.219207441587794i Columns 31 through 320.490732201059480 + 1.577081955159802i 0.517353973624928 + 2.188832884536347i diff =1.0e-013 *Columns 1 through 20.001110223024625 + 0.004440892098501i 0.031086244689504Columns 3 through 40.071054273576010 + 0.213162*********i 0.013322676295502 + 0.008881784197001i Columns 5 through 60.015543122344752 + 0.004440892098501i 0.004440892098501 + 0.006661338147751i Columns 7 through 80.008881784197001 + 0.002220446049250i 0.003330669073875 - 0.001110223024625i Columns 9 through 100.006661338147751 - 0.001110223024625i 0.006661338147751 - 0.003330669073875i Columns 11 through 120.001110223024625 - 0.009992007221626i 0.002220446049250 + 0.003330669073875i Columns 13 through 14-0.002220446049250 + 0.000555111512313i 0.003330669073875 + 0.000832667268469i Columns 15 through 160.006661338147751 - 0.006938893903907i 0.002220446049250 + 0.000693889390391i Columns 17 through 180.002220446049250 - 0.000173472347598i -0.001110223024625 - 0.004302114220422i Columns 19 through 200.001110223024625 + 0.010963452368173i -0.001110223024625 + 0.006383782391595i Columns 21 through 220.001110223024625 + 0.002775557561563i 0 + 0.000555111512313i Columns 23 through 240.001110223024625 + 0.006106226635438i 0.004440892098501 + 0.003330669073875i Columns 25 through 260.004440892098501 0.001110223024625 - 0.003330669073875i Columns 27 through 280.012212453270877 - 0.002220446049250i 0.006661338147751 - 0.004440892098501i Columns 29 through 300.009992007221626 + 0.002220446049250i 0.011102230246252 - 0.006661338147751i Columns 31 through 320.028310687127941 0.035527136788005 - 0.008881784197001i 由上面结果可知,由基2时间抽选的FFT算法所得到的DFT结果与利用公式法所得的理论值稍有偏差,但误差较小,从结果可以看出大概在小数点第15位才开始出现误差,故而用计算机FFT处理数据在精度上是可以接受的。
已知序列xn=[1,1,1,1],试用MATLAB编写程序,计算该序列的离散付里叶变换及逆离散付里叶变换。
(1)MATLAB程序:function xk=dft(xn,N) %dftn=[0:1:N-1];k=n;WN=exp(-j*2*pi/N); %旋转因子nk=n'*k;WNnk=WN.^nk;xk=xn*WNnk;function xn=idft(xk,N) %idftn=[0:1:N-1];k=n;WN=exp(-j*2*pi/N);nk=n'*k;WNnk=WN.^(-nk);xn=xk*WNnk/N;xn=[1,1,1,1]; %计算dftN=4;xk=dft(xn,N)'xk=[4,0,0,0]; %计算idftN=4;xn=idft(xk,N)'仿真结果:DFT:(2)MATLAB程序:xn=[1,1,1,1];N=length(xn);n=0:N-1;k=0:N-1;Xk=xn*exp(-j*2*pi/N).^(n'*k); %计算DFTx=(Xk*exp(j*2*pi/N).^(n'*k))/N; %计算IDFTsubplot(1,2,2);stem(k,abs(Xk));title('|X(k)|'); %画图axis([-1,N,1.1*min(abs(Xk)),1.1*max(abs(Xk))]); %加坐标subplot(1,2,1);stem(n,xn);title('x(n)');axis([-1,N,1.1*min(xn),1.1*max(xn)]);仿真结果:图3-1 序列x(n)及其DFT变换(3)MATLAB程序:xn=[1,1,1,1];N=length(xn);n=0:N-1;subplot(2,2,1);stem(n,xn);title('x(n)');k=0:N-1;Xk=fft(xn,N); %计算Xksubplot(2,1,2);stem(k,abs(Xk));title('Xk=DFT(xn)');xn1=ifft(Xk,N); %计算xnsubplot(2,2,2);stem(n,xn1);title('x(n)=IDFT(Xk)');仿真结果:图3-2 序列的正逆离散傅里叶变换取一个周期的正弦信号,作8点采样,求它的连续频谱。
基于Matlab的DFT及FFT频谱分析基于Matlab的DFT及FFT频谱分析一、引言频谱分析是信号处理中的重要任务之一,它可以揭示信号的频率特性和能量分布。
离散傅里叶变换(DFT)及快速傅里叶变换(FFT)是常用的频谱分析工具,广泛应用于许多领域。
本文将介绍通过Matlab进行DFT及FFT频谱分析的方法和步骤,并以实例详细说明。
二、DFT及FFT原理DFT是一种将时域信号转换为频域信号的离散变换方法。
它将信号分解成若干个正弦和余弦函数的叠加,得到频率和幅度信息。
FFT是一种高效的计算DFT的算法,它利用信号的对称性和周期性,将计算复杂度从O(N^2)降低到O(NlogN)。
FFT通过将信号分解成不同长度的子序列,递归地进行计算,最终得到频谱信息。
三、Matlab中的DFT及FFT函数在Matlab中,DFT及FFT可以通过内置函数进行计算。
其中,DFT使用函数fft,FFT使用函数fftshift。
fft函数可直接计算信号的频谱,fftshift函数对频谱进行频移操作,将低频移到频谱中心。
四、Matlab中DFT及FFT频谱分析步骤1. 读取信号数据首先,将待分析的信号数据读入到Matlab中。
可以使用内置函数load读取文本文件中的数据,或通过自定义函数生成模拟信号数据。
2. 时域分析通过plot函数将信号数据在时域进行绘制,以观察信号的波形。
可以设置合适的坐标轴范围和标签,使图像更加清晰。
3. 信号预处理针对不同的信号特点,可以进行预处理操作,例如去除直流分量、滤波等。
这些操作可提高信号的频谱分析效果。
4. 计算DFT/FFT使用fft函数计算信号数据的DFT/FFT,并得到频谱。
将信号数据作为输入参数,设置采样频率和点数,计算得到频谱数据。
5. 频域分析通过plot函数将频谱数据在频域进行绘制,观察信号的频率特性。
可以设置合适的坐标轴范围和标签,使图像更加清晰。
6. 结果解读根据频谱图像,分析信号的频率成分、幅度分布和峰值位置。
DFT 基于Matlab 的实现一、实验目的1.掌握DFT 函数的用法。
2. 利用DFT 进行信号检测及谱分析。
3.了解信号截取长度对谱分析的影响。
二、实验内容1.利用DFT 计算信号功率谱。
实验程序:t=0:0.001:0.6;x=sin(2*pi*50*t)+sin(2*pi*120*t)+randn(1,length(t));Y=dft(x,512);P=Y.*conj(Y)/512;f=1000*(0:255)/512;plot(f,P(1:256))2. 进行信号检测。
分析信号频谱所对应频率轴的数字频率和频率之间的关系。
模拟信号)8cos(5)4sin(*2)(t t t x ππ+=,以n t 01.0= 10-≤≤N n 进行取样,求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=dft(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=dft(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=dft(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=dft(x,N);plot(q,abs(y));title('DFT N=60')3. 对2,进一步增加截取长度和DFT点数,如N加大到256,观察信号频谱的变化,分析产生这一变化的原因。
matlab中实现dft算法代码
在MATLAB中实现DFT(离散傅里叶变换)算法的代码如下:
```matlab
function X = myDFT(x)
N = length(x); % 输入信号的长度
X = zeros(1, N); % 存储DFT结果的数组
for k = 0:N-1
for n = 0:N-1
X(k+1) = X(k+1) + x(n+1) * exp(-1i*2*pi*k*n/N);
end
end
end
```
在这段代码中,`x`是输入信号的数组,`N`是输入信号的长度,`X`是用于存储DFT结果的数组。
通过双重循环计算每个频率点的复数值,然后将其存储在数组`X`中。
最后,函数返回计算得到的DFT结果数组`X`。
要使用这个函数进行DFT计算,可以按照以下步骤:
```matlab
x = [1, 2, 3, 4]; % 输入信号
X = myDFT(x); % 调用自定义的DFT函数进行计算
disp(X); % 显示DFT结果
```
在这个例子中,输入信号`x`是一个包含了[1, 2, 3, 4]的数组。
然后,通过调用`myDFT`函数计算DFT结果,并将结果存储在`X`中。
最后,通过使用`disp`函数来显示计算得到的DFT结果`X`。
需要注意的是,这只是一个简单的DFT算法实现代码,可能没有考虑到性能优化和其他复杂情况。
在实际应用中,可以使用MATLAB内置的`fft`函数来进行更高效和准确的DFT计算。
数字信号处理实验报告 实验二 FFT 算法的MATLAB 实现(一)实验目的:理解离散傅立叶变换时信号分析与处理的一种重要变换,特别是FFT 在数字信号处理中的高效率应用。
(二)实验原理:1、有限长序列x(n)的DFT 的概念和公式:⎪⎪⎩⎪⎪⎨⎧-≤≤=-≤≤=∑∑-=--=101010)(1)(10)()(N k kn N N n kn N N n W k x N n x N k W n x k x)/2(N j N eW π-=2、FFT 算法调用格式是 X= fft(x) 或 X=fft(x,N)对前者,若x 的长度是2的整数次幂,则按该长度实现x 的快速变换,否则,实现的是慢速的非2的整数次幂的变换;对后者,N 应为2的整数次幂,若x 的长度小于N ,则补零,若超过N ,则舍弃N 以后的数据。
Ifft 的调用格式与之相同。
(三)实验内容1、题一:若x(n)=cos(n*pi/6)是一个N=12的有限序列,利用MATLAB 计算它的DFT 并画出图形。
源程序: clc; N=12; n=0:N-1; k=0:N-1;xn=cos(n*pi/6); W=exp(-j*2*pi/N); kn=n'*kXk=xn*(W.^kn) stem(n,Xk); xlabel('k'); ylabel('Xk'); grid on ;也可用FFT 算法直接得出结果,程序如下: clc; N=12; n=0:N-1;xn=cos(n*pi/6);Xk=fft(xn,N); stem(n,Xk); xlabel('k'); ylabel('Xk'); grid on ;实验结果:24681012kX k分析实验结果:用DFT 和用FFT 对序列进行运算,最后得到的结果相同。
但用快速傅立叶变换的运算速度可以快很多。
2、题二:一被噪声污染的信号,很难看出它所包含的频率分量,如一个由50Hz 和120Hz 正弦信号构成的信号,受均值随机噪声的干扰,数据采样率为1000Hz ,通过FFT 来分析其信号频率成分,用MA TLAB 实现。
用matlab实现DFT FFT目录实验目的 (2)实验内容 (2)1.用MATLAB实现DFT (2)2.用MATLAB实现FFT,分析有限离散序列的FFT (3)3.通过分别计算时间,得出DFT与FFT的算法差异 (7)实验原理 (8)1. 离散傅里叶变换的快速算法FFT (8)2. FFT提高运算速度的原理 (9)3. 理论分析DFT与FFT算法差异 (11)实验步骤 (12)实验结果 (13)实验分析 (27)实验结论 (33)实验体会 (33)实验目的1.通过研究DFT,FFT性质,用语言实现DFT, FFT。
不使用MATLAB现有的FFT函数,自己编写具体算法。
2.掌握FFT基2时间抽选法,理解其提高减少乘法运算次数提高运算速度的原理。
3.设计实验,得出DFT和FFT算法差异的证明,如复杂度等(精度、不同长度的序列等)。
实验内容1. 用MATLAB实现DFTN点序列x(n) 的DFT为:DFT的矩阵为:根据DFT公式与矩阵展开,通过MATLAB实现DFT:2.用Matlab实现FFT编程思想及程序框图:●原位计算因为DIT-FFT与DIF-FFT的算法类似,这里我们以DIT-FFT为例。
N=2M点的FFT共进行M级运算,且每一级都由N/2个蝶形运算组成,后一级的节点数据由前一级同处一条水平线位置的节点数据产生,所以我们同样可以将后一级的节点数据储存到前一级的节点中,这样的方法叫做原位计算,它大大节省了内存资源,降低了成本,简化了运算。
●序列的倒序无论是进行DIT-FFT还是DIF-FFT都需要进行倒序,包括输入倒序与输出倒序,以一定的方式将数组进行重新排列。
倒序的方法:首先由于N=2M,我们就可以用M位二进制数来表示节点的顺序,并且按照奇偶时域抽取。
然后,如图1所示,第一次按最低位n0的0、1值分解为奇偶组,第二次按次低位n1的0、1值分解为奇偶组,以此类推。
最后,所得二进制数所对应的十进制数即为序列倒序后产生的序列。
matlabfft算法详解
MATLAB中的FFT(快速傅里叶变换)算法是一种用于计算离散傅里叶变换的高效算法。
它是一种将离散信号从时间域转换到频率域的方法,广泛应用于信号处理、通信系统、图像处理等领域。
首先,让我们来看一下MATLAB中FFT算法的原理。
FFT算法实际上是Cooley-Tukey算法的一种变体,它利用了傅里叶变换的对称性质,将一个长度为N的离散信号的DFT(离散傅里叶变换)计算复杂度从O(N^2)降低到O(NlogN)。
这种算法通过将信号分解为奇偶部分,并利用旋转因子进行递归计算,从而实现了快速的傅里叶变换。
在MATLAB中,可以使用fft函数来计算离散信号的FFT。
该函数的基本语法是Y = fft(X),其中X是输入的离散信号,Y是计算得到的频率域表示。
用户还可以通过指定N来计算N点FFT,或者通过指定Fs来计算以Hz为单位的频率。
除了基本的FFT计算外,MATLAB还提供了一些附加的函数和工具,例如ifft函数用于计算逆FFT、fftshift函数用于频谱移位、fftfilt函数用于频域滤波等等。
这些工具使得在MATLAB中进行频
域分析和处理变得更加方便和灵活。
总的来说,MATLAB中的FFT算法是一种高效的离散傅里叶变换算法,通过利用对称性质和递归计算实现了快速的频域转换。
它在信号处理和通信系统等领域有着广泛的应用,并且在MATLAB中提供了丰富的函数和工具来支持频域分析和处理。
希望这个回答能够全面地解释了MATLAB中的FFT算法。
数字信号处理实验报告(四)一、实验题目:离散信号的DTFT 和DFT二、实验目的:加深对离散信号的DTFT 和DFT 的及其相互关系的理解。
三、实验原理:序列x[n] 的DTFT 定义:N 点序列x[n] 的DFT 定义:在MATLAB 中,对形式为的DTFT可以用函数H=Freqz(num,den,w)计算;可以用函数U=fft(u,N)和u=ifft(U,N)计算N 点序列的DFT 正、反变换。
四、实验内容:分别计算16 点序列的16 点和32点DFT,绘出幅度谱图形,并绘出该序列的DTFT 图形五、实验要求:讨论DTFT 和DFT 之间的相互关系。
说明实验产生的现象的原因。
六、实验数据:>> N1=16;N2=32;n=0:N1-1;k=0:N2-1;xn=cos(3*pi*n/16)+cos(11*pi*n/16)X1=fft(xn,N1);X2=fft(xn,N2);subplot(2,1,1);stem(n,abs(X1),'.');title('16点的DFT')subplot(2,1,2);stem(k,abs(X2),'.');title('32点的DFT')16点的DFT05101532点的DFTw=[0:1:500]*pi/500;freqz(xn,1 ,w)00.10.20.30.40.50.60.70.80.91-200-100100200Normalized Frequency (⨯π rad/sample)P h a s e (d e g r e e s )00.10.20.30.40.50.60.70.80.91-40-2020Normalized Frequency (⨯π rad/sample)M a g n i t u d e (d B )。
离散傅里叶变换(Discrete Fourier Transform,DFT)是一种常用的信号处理工具,用于分析信号的频谱和频率成分。
在MATLAB中,可以使用内置函数来快速实现离散傅里叶变换,并且可以通过公式来理解其原理和实现过程。
一、离散傅里叶变换的定义离散傅里叶变换是将离散的时间序列信号转化为离散的频谱序列,其定义如下:给定长度为N的离散信号x(n),其离散傅里叶变换X(k)的计算公式为:X(k) = Σ x(n) * exp(-j*2πnk/N),n = 0, 1, ..., N-1其中,k表示频率序列的索引,取值范围为0到N-1。
exp(-j*2πnk/N)是复数指数形式的旋转因子,n表示时间序列的索引。
二、MATLAB中的离散傅里叶变换函数在MATLAB中,可以使用fft函数来快速计算离散傅里叶变换。
其函数原型为:Y = fft(X)其中,X为输入的离散信号,Y为离散傅里叶变换的结果。
如果需要计算反变换,则可以使用ifft函数。
三、MATLAB代码实现离散傅里叶变换下面是使用MATLAB实现离散傅里叶变换的示例代码:```matlab生成长度为N的离散信号N = 100;x = rand(1, N);计算离散傅里叶变换X = fft(x);绘制频谱图f = (0:N-1) * (1/N); 频率序列plot(f, abs(X));xlabel('频率');ylabel('幅度');title('离散傅里叶变换频谱图');```以上代码首先生成了长度为N的随机离散信号x,然后使用fft函数计算了其离散傅里叶变换结果X,并绘制了频谱图。
四、离散傅里叶变换的性质和应用离散傅里叶变换具有线性、周期性、卷积和相关性等性质,可以广泛应用于信号处理、通信、图像处理、音频处理等领域。
通过分析离散信号的频谱和频率成分,可以实现信号的滤波、频谱分析、频率提取等功能。
07级电信(2)班 刘坤洋 24
实验一 利用MATLAB 实现信号DFT 的计算
一、实验目的:
1、熟悉利用MATLAB 计算信号DFT 的方法
2、掌握利用MATLAB 实现由DFT 计算线性卷积的方法
二、实验设备:电脑、matlab 软件
三、实验内容:
1、练习用matlab 中提供的内部函数用于计算DFT
(1) fft(x),fft(x,N),ifft(x),ifft(x,N)的含义及用法
(2) 在进行DFT 时选取合适的时域样本点数N
请举例,并编程实现
题目:
源程序: >> N=30; %数据的长度
>>L=512; %DFT 的点数
>>f1=100; f2=120;
>>fs=600; %抽样频率
>>T=1/fs; %抽样间隔
>>ws=2*pi*fs;
>>t=(0:N-1)*T;
>>f=cos(4*pi*f1*t)+cos(4*pi*f2*t);
>>F=fftshift(fft(f,L));
>>w=(-ws/2+(0:L-1)*ws/L)/(2*pi);
>>hd=plot(w,abs(F));
>>ylabel('幅度谱')
>> xlabel('频率/Hz')
的频谱
分析利用)π4cos()π4cos()(DFT 21t f t f t x +=Hz 600,Hz 120,Hz 10021===s f f f
>> title('my picture')
结果图
:
(3) 在对信号进行DFT 时选择hamming 窗增加频率分辨率
请举例,并编程实现
题目:
源程序:>> N=50; %数据的长度
>>L=512; %DFT 的点数
>>f1=100;f2=150;
>>fs=600; %抽样频率
>>T=1/fs; %抽样间隔
>>ws=2*pi*fs;
>>t=(0:N-1)*T;
>>f=cos(4*pi*f1*t)+0、15*cos(4*pi*f2*t);
的频谱分析利用)π4cos(15.0)π4cos()(DFT 21t f t f t x +=Hz 600,Hz 150,Hz 10021===s f f f
>>wh=(hamming(N))';
>>f=f 、*wh;
>>F=fftshift(fft(f,L));
>>w=(-ws/2+(0:L-1)*ws/L)/(2*pi); >>plot(w,abs(F));
>>ylabel('幅度谱')
>> xlabel('频率/Hz')
>> title('my picture')
>> legend('N=50')
结果图
:
2、增加DFT 点数M 以显示更多频谱细节
请举例,并编程实现
题目: 利用MATLAB 计算16点序列x [k ]的512点DFT 。
源程序:>> N = 32;
>> k = 0:N-1;
4 ,32 ),/ π4cos(][===r N N rk k x
>> L = 0:511;
>> x = cos(4*pi*k*4、/N);
>> X = fft(x);plot(k/N,abs(X),'o');
>> hold on
>> XE = fft(x,512);plot(L/512,abs(XE)) ;
>> legend('N=32')
结果图:
3、利用MATLAB实现由DFT计算线性卷积
请举例,并编程实现
题目:利用MA TLAB由DFT计算x[k]* h[k]。
x[k]={1, 2, 1, 1}, h[k]={2, 2, 1, 1} 源程序:% 利用DFT计算线性卷积
>> x = [1 2 1 1];
>>h = [2 2 1 1];
>> % 确定卷积结果的长度
>>L = length(x)+length(h)-1;
% 计算序列的L点DFT
>>XE = fft(x,L);
>、HE = fft(h,L);
>> % 由IDFT计算卷积结果
>>y1 = ifft(XE、*HE);
>> %绘制卷积结果及误差图
>> k=0:L-1;
>> subplot(1,2,1);
>> stem(k,real(y1));axis([0 6 0 7]);
>> title('Result of linear Convolution');
>> xlabel('Time index k');ylabel('Amplitude'); >> y2=conv(x,h);error=y1-y2;
>> subplot(1,2,2);stem(k,abs(error));
>> xlabel('Time index k');ylabel('Amplitude'); >> title('Error Magnitude');
结果图:。