MATLAB的离散傅里叶变换的仿真

合集下载

实验用MATLAB计算傅里叶变换

实验用MATLAB计算傅里叶变换

实验二 用MATLAB 计算傅立叶变换(2课时)一、实验目的1、掌握用MA TLAB 计算DTFT 及系统频率响应的方法。

2、掌握用MA TLAB 计算DFT 和IDFT 的方法。

3、掌握用DFT 计算圆周卷积和线性卷积的方法。

二、实验设备计算机一台,装有MATLAB 软件。

三、实验原理和基本操作1.用MA TLAB 计算DTFT对于序列x (n ),其离散时间傅立叶变换(DTFT )定义为:∑∞-∞=-=n n j e n x j X ωω)()( (1)序列的傅立叶变换(DTFT )在频域是连续的,并且以ω=2π为周期。

因此只需要知道jw X(e )的一个周期,即ω=[0,2π],或[-π,π]。

就可以分析序列的频谱。

用MA TLAB 计算DTFT ,必须在-π≤ω≤π范围内,把ω用很密的、长度很长的向量来近似,该向量中各个值可用下式表示: w=k*dw=k*K π2 (2) 其中:d ω=Kπ2 称为频率分辨率。

它表示把数字频率的范围2π均分成K 份后,每一份的大小,k 是表示频率序数的整数向量,简称为频序向量,它的取值可以有几种方法:通常在DTFT 中,频率取-π≤ω<л的范围,当K 为偶数时,取 k 12,,1,0,1,,12,2--+--=K K K 如果K 为奇数,则取 k 5.02,,1,0,1,,5.02--+-=K K 可以为奇偶两种情况综合出一个共同的确定频序向量k 的公式; k=12K -⎢⎥-⎢⎥⎣⎦ :12K -⎢⎥⎢⎥⎣⎦(3) 上式中⎢⎥⎣⎦表示向下取整。

在MA TLAB 中的向下取整函数为floor ,floor (x )的作用是把x 向下(向-∞方向)取整,所以与(3)式等价的MATLAB 语句为 k ))5.02(:)5.02((-+-=K K floor (4) 给定了输入序列(包括序列x 及其位置向量n ),又设定了频率分辨率d ω及频序向量k ,则DTFT 的计算式(1)可以用一个向量与矩阵相乘的运算来实现。

[转载]MATLAB中傅里叶fft函数使用(仿真程序和图形结果)

[转载]MATLAB中傅里叶fft函数使用(仿真程序和图形结果)

[转载]MATLAB中傅⾥叶fft函数使⽤(仿真程序和图形结
果)
原⽂地址:MATLAB中傅⾥叶fft函数使⽤(仿真程序和图形结果)作者:西电⼤宝Chuck
MATLAB中的傅⾥叶变换时是⾮常常⽤的,研究信号处理时不可避免,尤其在频域。

这是⼀个例⼦,使⽤MATLAB时对于信号的采样频率选择很重要,⾸先要满⾜奈奎斯特采样定理,
然后最好选择4倍以上的奶奎斯特采样频率作为fs,这样绘制出的图形和结果才能⽐较精确直观。

N=512;fs=1200;%采样点数和采样频率
n=0:N-1;t=n/fs;%时间序列
y=sin(2*pi*50*t)+sin(2*pi*120*t);%定义⼀个含有50hz和120hz两种频率的信号
Y=fft(y,N);%快速傅⾥叶变换
f=n*fs/N;%频率序列
Y=abs(Y);%求模
plot(f,Y);%绘制信号频域图形
仿真结果:课件两个频率在50和120hz处
推荐⼀⾸歌,我很喜欢 small things,是不是很舒服西电⼤宝。

数字信号处理实验matlab版离散傅里叶级数(DFS)

数字信号处理实验matlab版离散傅里叶级数(DFS)

数字信号处理实验matlab版离散傅⾥叶级数(DFS)实验11 离散傅⾥叶级数(DFS)(完美格式版,本⼈⾃⼰完成,所有语句正确,不排除极个别错误,特别适⽤于⼭⼤,勿⽤冰点等⼯具下载,否则下载之后的word格式会让很多部分格式错误,谢谢)XXXX学号姓名处XXXX⼀、实验⽬的1、加深对离散周期序列傅⾥叶级数(DFS)基本概念的理解。

2、掌握⽤MA TLAB语⾔求解周期序列傅⾥叶级数变换和逆变换的⽅法。

3、观察离散周期序列的重复周期数对频谱特性的影响。

4、了解离散序列的周期卷积及其线性卷积的区别。

⼆、实验内容1、周期序列的离散傅⾥叶级数。

2、周期序列的傅⾥叶级数变换和逆变换。

3、离散傅⾥叶变换和逆变换的通⽤⼦程序。

4、周期重复次数对序列频谱的影响。

5、周期序列的卷积和。

三、实验环境MA TLAB7.0四、实验原理⽤matlab进⾏程序设计,利⽤matlab绘图⼗分⽅便,它既可以绘制各种图形,包括⼆维图形和三位图形,还可以对图像进⾏装饰和控制。

1、周期序列的离散傅⾥叶级数(1)连续性周期信号的傅⾥叶级数对应的第k次谐波分量的系数为⽆穷多。

⽽周期为N 的周期序列,其离散傅⾥叶级数谐波分量的系数只有N个是独⽴的。

(2)周期序列的频谱也是⼀个以N为周期的周期序列。

2、周期序列的傅⾥叶级数变换和逆变换例11-1已知⼀个周期性矩形序列的脉冲宽度占整个周期的1/4,⼀个周期的采样点数为16点,显⽰3个周期的信号序列波形。

要求:(1)⽤傅⾥叶级数求信号的幅度频谱和相位频谱。

(2)求傅⾥叶级数逆变换的图形,与原信号图形进⾏⽐较。

解MA TLAB程序如下:N=16;xn=[ones(1,N/4),zeros(1,3*N/4)];xn=[xn,xn,xn];n=0:3*N-1;k=0:3*N-1;Xk=xn*exp(-j*2*pi/N).^(n'*k); %离散傅⾥叶级数变换 x=(Xk*exp(j*2*pi/N).^(n'*k))/N; %离散傅⾥叶级数逆变换subplot(2,2,1),stem(n,xn);title('x(n)');axis([-1,3*N,1.1*min(xn),1.1*max(xn)]); subplot(2,2,2),stem(n,abs(x)); %显⽰逆变换结果 title('IDFS|X(k)|');axis([-1,3*N,1.1*min(x),1.1*max(x)]); subplot(2,2,3),stem(k,abs(Xk)); %显⽰序列的幅度谱 title('|X(k)|');axis([-1,3*N,1.1*min(abs(Xk)),1.1*max(abs(Xk))]); subplot(2,2,4),stem(k,angle(Xk)); %显⽰序列的相位谱 title('arg|X(k)|');axis([-1,3*N,1.1*min(angle(Xk)), 1.1*max(angle(Xk))]);运⾏结果如图11-1所⽰。

matlab-离散信号傅里叶变换

matlab-离散信号傅里叶变换

1.请用MATLAB编写程序,实现任意两个有限长度序列的卷积和。

要求用图形显示两个序列及卷积结果。

解:y(n)=∑x(i)h(n-i)假设x(n)={1,2,3,4,5}; h(n)={3,6,7,2,1,6}; y(n)=x(n)*h(n)验证:y[n]=[1,12,28,46,65,72,58,32,29,30]【程序】N=5M=6L=N+M-1x=[1,2,3,4,5]h=[3,6,7,2,1,6]y=conv(x,h)nx=0:N-1nh=0:M-1ny=0:L-1subplot(131);stem(nx,x,'*b');xlabel('n');ylabel('x(n)');grid onsubplot(132);stem(nh,h,'*b');xlabel('n');ylabel('h(h)');grid onsubplot(133);stem(ny,y,'*r');xlabel('n');ylabel('y(h)');grid on【运行结果】2.已知两个序列x[n]=cos(n*pi/2), y[n]=e j*pi*n/4x[n],请编写程序绘制X(e jw)和Y(e jw)和幅度和相角,说明它们的频移关系。

–提示:用abs函数求幅度,用angle求相角。

【程序】n=0:15;x=cos(n*pi/2);y=exp(j*pi*n/4).*x;X=fft(x);Y=fft(y);magX=abs(X);angX=angle(X);magY=abs(Y);angY=angle(Y);subplot(221);stem(n,magX,'*r');xlabel('频率');ylabel('幅度');grid on;subplot(222);stem(n,angX,'*b');xlabel('频率');ylabel('相位');grid on;subplot(223);stem(n,magY,'*r');xlabel('频率');ylabel('幅度');grid on;subplot(224);stem(n,angY,'*b');xlabel('频率');ylabel('相位');grid on;【运行结果】【遇到的问题】只有当n=15时幅度值才相等,n取其他值,幅度值有差异。

matlab实现傅里叶变换与反变换、离散余弦变换与反变换

matlab实现傅里叶变换与反变换、离散余弦变换与反变换

matlab实现傅里叶变换与反变换、离散余弦变换与反变换首先,我们需要了解傅里叶变换和离散余弦变换的原理。

傅里叶变换是一种将时域信号转换为频域信号的方法,它可以将任意信号分解为一系列正弦和余弦信号的叠加。

离散余弦变换则是一种将离散信号转换为一组离散余弦信号的方法。

接下来,我们可以使用matlab中的fft函数来实现傅里叶变换和反变换。

具体步骤如下:
1. 定义一个信号向量x,可以使用matlab中的sin、cos、randn 等函数生成。

2. 使用fft函数对信号进行傅里叶变换,得到频域信号向量X。

3. 使用ifft函数对频域信号向量X进行反变换,得到原始信号向量x1。

4. 使用plot函数将原始信号向量x和反变换后的信号向量x1绘制在同一张图上,进行对比。

接下来,我们可以使用matlab中的dct函数来实现离散余弦变换和反变换。

具体步骤如下:
1. 定义一个长度为N的信号向量x,可以使用matlab中的sin、cos、randn等函数生成。

2. 使用dct函数对信号进行离散余弦变换,得到频域信号向量X。

3. 使用idct函数对频域信号向量X进行反变换,得到原始信号向量x1。

4. 使用plot函数将原始信号向量x和反变换后的信号向量x1绘制在同一张图上,进行对比。

通过上述步骤,我们可以使用matlab轻松实现傅里叶变换和离散余弦变换。

这些技术在信号处理、图像处理、音频处理等领域中得到广泛应用,掌握这些技术将有助于我们更好地理解和应用相关领域的算法。

用matlab实现离散傅里叶变换

用matlab实现离散傅里叶变换

用matlab实现离散傅里叶变换
摘要:
1.离散傅里叶变换的概述
2.MATLAB 实现离散傅里叶变换的方法
3.离散傅里叶变换的应用实例
4.注意事项和局限性
正文:
一、离散傅里叶变换的概述
离散傅里叶变换(Discrete Fourier Transform,DFT)是一种在离散域中实现的傅里叶变换,它可以将一个离散信号从时域转换到频域。

DFT 在工程、科学和数学等领域有着广泛的应用,例如信号处理、图像处理、音频处理等。

二、MATLAB 实现离散傅里叶变换的方法
MATLAB 提供了fft 函数来实现离散傅里叶变换,该函数的用法如下:```matlab
X = fft(x);
```
其中,x 是输入的离散信号,X 是输出的离散傅里叶变换结果。

fft 函数的运行时间与输入信号的长度成正比,因此对于较大的信号,计算时间可能会较长。

三、离散傅里叶变换的应用实例
1.信号处理:在通信系统中,信号往往受到噪声的影响,通过离散傅里叶
变换可以将信号从时域转换到频域,以便分析和处理。

2.图像处理:离散傅里叶变换可以用于图像的频谱分析,从而实现图像的滤波、增强和压缩等操作。

3.音频处理:离散傅里叶变换可以用于音频信号的谱分析,从而实现音频信号的滤波、降噪和音质增强等操作。

四、注意事项和局限性
1.当使用fft 函数时,需要注意输入信号的长度应为2 的整数次幂,否则会导致结果错误。

2.在进行离散傅里叶变换时,需要根据实际应用场景选择合适的窗函数,以避免频谱泄漏和频谱混叠等问题。

3.离散傅里叶变换是一种近似方法,当信号长度较小时,结果可能存在误差。

有关傅里叶变换的MATLAB仿真

有关傅里叶变换的MATLAB仿真

有关傅里叶变换的MATLAB仿真Homework 1:1) Determine the DFT of sequence x(n)=R4(n) with N=4, N=8 and N=16 by MATLAB, and plot the figures;程序如下:function[Xk] = DFT(xn,N)k = [0:1:N-1];n = [0:1:N-1];Wn = exp(-j*2*pi/N);kn = k'*n;Wn_kn = Wn.^kn;Xk = xn*Wn_kn;clearxn1=[1 1 1 1];xn2=[1 1 1 1 0 0 0 0];xn3=[1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0];N1=length(xn1);N2=length(xn2);N3=length(xn3);XK1=DFT(xn1,N1); magX1=abs(XK1);XK2=DFT(xn2,N2); magX2=abs(XK2);XK3=DFT(xn3,N3); magX3=abs(XK3)subplot(3,1,1);L1=0:1:N1-1;stem(L1,magX1); axis([0 N1 0 5]);subplot(3,1,2);L2=0:1:N2-1;stem(L2,magX2); axis([0 N2 0 5]);subplot(3,1,3);L3=0:1:N3-1;stem(L3,magX3);axis([0 N3 0 5]);最终方针波形如下:2) Determine the FT of sequence x(n)=R4(n) by MATLAB, and plot the figure;程序如下:function Ke=FT(xn,N)n=0:1:N-1;w=0:0.01*pi:2*pi;Wn=exp(-j*n'*w);Ke=xn*Wn;endclear;xn=[1 1 1 1];w=0:0.01*pi:2*pi;N=length(xn);Ke=FT(xn,N);Ke1=abs(Ke);plot(w,Ke1);axis([0 2*pi 0 5]);最终仿真波形如下:3) Compare figures and give the relationship between DFT and FT;程序如下:(调用函数上边已经求得,这里不再重复)clearxn1=[1 1 1 1];xn2=[1 1 1 1 0 0 0 0];xn3=[1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0];N1=length(xn1);N2=length(xn2);N3=length(xn3);XK1=DFT(xn1,N1);magX1=abs(XK1);XK2=DFT(xn2,N2);magX2=abs(XK2);XK3=DFT(xn3,N3);magX3=abs(XK3);subplot(4,1,1);L1=0:1:N1-1;stem(L1,magX1);axis([0 N1 0 5]);xlabel('N=4');subplot(4,1,2);L2=0:1:N2-1; stem(L2,magX2); axis([0 N2 0 5]); xlabel('N=8');subplot(4,1,3);L3=0:1:N3-1; stem(L3,magX3); axis([0 N3 0 5]); xlabel('N=16');subplot(4,1,4);xn=[1 1 1 1];w=0:0.01*pi:2*pi; N=length(xn);Ke=FT(xn,N);Ke1=abs(Ke); plot(w,Ke1);axis([0 2*pi 0 5]); xlabel('FT');Homework 2:1) Computing the 24-points DFTs of the two sequences that x1(n)= cos(nπ/6) and x2(n)= cos(nπ/4) using a single 24-point DFT by Matlab;2) Plot the figure of x1(n), x2(n), |X1(k)| and |X2(k)|;3) Analysis the value of |X1(k)| and |X2(k)|;4) Applying IDFT to X1(k) and X2(k) to obtain x1N(n) and x2N(n);程序如下:function[Xk] = DFT(xn,N)k = [0:1:N-1];n = [0:1:N-1];Wn = exp(-j*2*pi/N);kn = k'*n;Wn_kn = Wn.^kn;Xk = xn*Wn_kn;function[xn] =IDFT(Xk,N) k = [0:1:N-1];n = [0:1:N-1];Wn = exp(-j*2*pi/N);kn = k'*n;Wn_kn = Wn.^(-kn);xn = (Xk*Wn_kn)/N;clearN=24;n=0:23;xn1=cos(n*pi/6);xn2=cos(n*pi/4);xn=xn1+j*xn2;XK=DFT(xn,N);XKN=conj(XK);for k=2:NXKN(k)=conj(XK(N-k+2)); endXK1=(XK+XKN)/2XK2=(XK-XKN)/(2*j)x1n=IDFT(XK1,N);x2n=IDFT(XK2,N);subplot(2,2,1)stem(n,xn1);subplot(2,2,2)stem(n,xn2);subplot(2,2,3)stem(n,x1n);axis([0 30 -1 1]);subplot(2,2,4)stem(n,x2n);axis([0 30 -1 1]);最终仿真波形如下图:5) Compare x1(n) and x1N(n);Compare x2(n) and x2N(n);这里,x1(n)是程序中的xn1,x2(n)是程序中的xn2;x1N(n)是程序中的x1n,x1N(n)是程序中的x2n,他们的比较如上图所示。

实验3 离散序列的傅里叶变换的MATLAB实现

实验3 离散序列的傅里叶变换的MATLAB实现

信息工程学院实验报告课程名称:数字信号处理实验项目名称:实验3 离散序列的傅里叶变换的MATLAB 实现 实验时间:班级: 姓名: 学号:一、实 验 目 的:熟悉离散序列的傅里叶变换理论及其MATLAB 实现。

二、实 验 设 备 与 器 件MATLAB 2008软件三、实 验 内 容 与 结 果 分 析3.1 在0到 区间画出矩形序列10()R n 的离散时间傅里叶变换(含幅度和相位)。

指令语句如下:n=-10:10;x=[(n>=0)&(n<10)];k=-200:200;w=(pi/200)*k;X=x*(exp(-j*pi/200)).^(n'*k);magX=abs(X);angX=angle(X);subplot(2,1,1);plot(w,magX,'LineWidth',2);xlabel('Frequency');ylabel('|X|');grid on ;subplot(2,1,2);plot(w,angX,'LineWidth',2);xlabel('Frequency');ylabel('Angle');grid on ;执行结果如图3-1所示:Frequency |X |Frequency A n g l e图3-13.2 求序列x(n)=1,-2≤n ≤2的离散时间傅里叶变换(含幅度和相位)。

指令语句如下:n=-10:10;x=[(n>=-2)&(n<2)];k=-200:200;w=(pi/200)*k;X=x*(exp(-j*pi/200)).^(n'*k);magX=abs(X);angX=angle(X);subplot(2,1,1);plot(w,magX,'LineWidth',2);xlabel('Frequency');ylabel('|X|');grid on ;subplot(2,1,2);plot(w,angX,'LineWidth',2);xlabel('Frequency');ylabel('Angle');grid on ;执行结果如图3-2所示:-4-3-2-10123401234Frequency |X |-4-3-2-101234-4-224Frequency A n g l e图3-24.思考题4.1什么是共轭对称性?结合例2-1加以分析。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

应用MATLAB对信号进行频谱分析及滤波
设计目的
要求学生会用MATLAB语言进行编程,绘出所求波形,并且运用FFT求对连续信号进行分析。

一、设计要求
1、用Matlab产生正弦波,矩形波,并显示各自的时域波形图;
2、进行FFT变换,显示各自频谱图,其中采样率、频率、数据长度自选,要求注明;
3、绘制三种信号的均方根图谱;
4、用IFFT回复信号,并显示恢复的正弦信号时域波形图。

二、系统原理
用FFT对信号作频谱分析是学习数字信号处理的重要内容。

经常需要进行频谱分析的信号是模拟信号和时域离散信号。

频谱分辨率直接和FFT的变换区间N有关,因为FFT能够实现频率分辨率是2π/N。

x(n)是一个长度为M的有限长序列,则x(n)的N点离散傅立叶变换为:
N?1?2?kn)(nx j?W W NN e?0?n N X(k)=DFT[x(n)]=,k=0,1,...,N-1N?11?kn?)(WXk
N N0?n x(n) =IDFT[X(k)]= 逆变换:,k=0,1,...,N-1
但FFT是一种比DFT更加快速的一种算法,提高了DFT的运算速率,为数字信号处理技术应用于各种信号处理创造了条件,大大提高了数字信号处理技术的发展。

本实验就是采用FFT,IFFT对信号进行谱分析。

三、程序设计
fs=input('please input the fs:');%设定采样频率
N=input('please input the N:');%设定数据长度
t=0:0.001:1;
f=100;%设定正弦信号频率
%生成正弦信号
x=sin(2*pi*f*t);
figure(1);
subplot(211);
plot(t,x);%作正弦信号的时域波形
axis([0,0.1,-1,1]);
title('正弦信号时域波形');
z=square(50*t);
subplot(212)
plot(t,z)
axis([0,1,-2,2]);
title('方波信号时域波形');grid;
%进行FFT变换并做频谱图
y=fft(x,N);%进行fft变换
mag=abs(y);%求幅值
f=(0:M-1)*Fs/M;
横坐标频率的表达式为f=(0:N-1)*fs/N;%.
figure(2);
subplot(211);
plot(f,mag);%做频谱图
axis([0,1000,0,200]);
title('正弦信号幅频谱图');
y1=fft(z,N);%进行fft变换
mag=abs(y1);%求幅值
f=(0:N-1)*fs/N;%横坐标频率的表达式为f=(0:M-1)*Fs/M; subplot(212);
plot(f,mag);%做频谱图
axis([0,1000,0,200]);
title('方波信号幅频谱图');grid;
%求功率谱
sq=abs(y);
power=sq.^2;
figure(3)
subplot(211);
plot(f,power);
title('正弦信号功率谱');grid;
sq1=abs(y1);
power1=sq1.^2;
subplot(212);
plot(f,power1);
title('方波信号功率谱');grid;
%用IFFT恢复原始信号
xifft=ifft(y);
magx=real(xifft);
ti=[0:length(xifft)-1]/fs;
figure(4);
subplot(211);
plot(ti,magx);
axis([0,0.1,-1,1]);
title('通过IFFT转换的正弦信号波形');
zifft=ifft(y1);
magz=real(zifft);
ti1=[0:length(zifft)-1]/fs;
subplot(212);
plot(ti1,magz);
title('通过IFFT转换的方波信号波形');grid;
四、仿真结果及分析
由图可以看出正弦波周期T=0.01,采样点N=1024.程序为:
x=sin(2*pi*f*t);
figure(1);
subplot(211);
plot(t,x);%作正弦信号的时域波形
axis([0,0.1,-1,1]);
title('正弦信号时域波形');
z=square(50*t);
subplot(212)
plot(t,z)
axis([0,1,-2,2]);
title('方波信号时域波形');grid;
2、对正弦波、方波信号进行FFT变换程序:
y=fft(x,N);%进行fft变换
mag=abs(y);%求幅值
f=(0:N-1)*fs/N;%横坐标频率的表达式为f=(0:M-1)*Fs/M; figure(2);
subplot(211);
plot(f,mag);%做频谱图
axis([0,1000,0,200]);
title('正弦信号幅频谱图');
y1=fft(z,N);%进行fft变换
求幅值mag=abs(y1);%.
f=(0:N-1)*fs/N;%横坐标频率的表达式为f=(0:M-1)*Fs/M; subplot(212);
plot(f,mag);%做频谱图
axis([0,1000,0,200]);
title('方波信号幅频谱图');grid;
正弦信号、方波信号功率谱程序:
sq=abs(y);
power=sq.^2;
figure(3)
subplot(211);
plot(f,power);
title('正弦信号功率谱');grid;
sq1=abs(y1);
power1=sq1.^2;
subplot(212);
plot(f,power1);
');grid;
方波信号功率谱title('
对两个信号进行恢复程序:
xifft=ifft(y);
magx=real(xifft);
ti=[0:length(xifft)-1]/fs;
figure(4);
subplot(211);
plot(ti,magx);
axis([0,0.1,-1,1]);
title('通过IFFT转换的正弦信号波形');
zifft=ifft(y1);
magz=real(zifft);
ti1=[0:length(zifft)-1]/fs;
subplot(212);
plot(ti1,magz);
title('通过IFFT转换的方波信号波形');grid;
当采样频率小于2fc或N小于M时恢复信号就会出现失真,频谱会发生馄叠。

相关文档
最新文档