学习笔记之——基于matlab的数字通信系统(2)之离散信号的傅里叶分析

关于连续信号的傅里叶分析,可以参考博文《学习笔记之——基于matlab的数字通信系统(1)&连续信号的傅里叶分析

 

目录

离散时间信号的傅里叶变换(DTFT)

连续时间信号的抽样——抽样定理

离散傅里叶级数(DFS)——离散的周期序列的傅里叶级数

离散傅里叶变换(DFT)

快速傅里叶变换FFT

代码

参考文献


 

离散时间信号的傅里叶变换(DTFT)

先给出课本的解析

对于DTFT有如下特点:

1、是离散的,所以变换需要求和而不是积分。

2、是w的连续函数;且是w的周期函数,周期为2pi

3、可以看作将在频域展开为傅里叶级数,傅里叶

DTFT的重要性质:

 

连续时间信号的抽样——抽样定理

实际种,信号的抽样是通过A/D芯片来实现将连续信号变成数字信号。通过抽样,将连续信号的x(t)变为数字信号x(nTs),将x(t)的傅里叶变换变为

抽样函数为,其对应的傅里叶变换为

对于信号采样,有公式:

根据时域卷积定理,有:

经运算后有:

将连续信号抽样变为离散信号,对应的离散信号的频谱将变成周期的。而变成周期的方法就是进行频谱的周期延拓。如下图所示:

进而得出抽样定理:

离散傅里叶级数(DFS)——离散的周期序列的傅里叶级数

 

离散傅里叶变换(DFT)

在计算机上实现频谱分析及其他方面的处理工作时,对信号的要求是:在时域和频域上都应该是离散的。在四种傅里叶变换种,只有DFS在时域和频域上都说离散的,但是却都是无限长的

对于DFS有

在DFS种,n和k仍取无穷长,但实际上并没有必要,因为他们都是以N点(采样点)为周期的。故此有:

显然,DFT并不是一种新的傅里叶变换,它实际上是来自于DFS,只不过它仅仅在时域和频域各取一个周期而已。

 

快速傅里叶变换FFT

 

代码

DTFT

N=8;                         %原离散信号有8点
n=[0:1:N-1]                  %原信号是1行8列的矩阵
syms t;
xn=0.5.^n;f=0.5.^t                   %构建原始信号,为指数信号
subplot(311);
ezplot(f);
title('原始信号(指数信号)');

subplot(312)
stem(n,xn);
title('原始信号(离散化),');

w=[-800:1:800]*4*pi/800;     %频域共-800----+800 的长度(本应是无穷,高频分量很少,故省去)    
X=xn*exp(-j*(n'*w));         %求dtft变换,采用原始定义的方法,对复指数分量求和而得

subplot(313);
plot(w/pi,abs(X));
title('DTFT变换')

clear all
%%%%%%%%%%%%%%%%
n1=-15:15;
h1=exp(-abs(0.1*n1));
subplot(2,2,1);stem(n1,h1);title('h1');
%%%%%%%%%%%%%%%%%%%%%%%
n2=0:20;
h2(n2+1)=1;
subplot(2,2,2);stem(n2,h2);title('h2');

w=-4:0.001:4;%产生要计算的w的范围
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Hjw1=h1*(exp(-j*pi).^(n1'*w));
subplot(2,2,3);plot(w,abs(Hjw1))
title('H1');xlabel('pi弧度(w)');ylabel('振幅')
%%%%%%%%%%%%%%%%%%%%%%%%%%%
Hjw2=h2*(exp(-j*pi).^(n2'*w));
subplot(2,2,4);plot(w,abs(Hjw2));
title('H2');xlabel('pi弧度(w)');ylabel('振幅')

%%%%%%%非周期离散信号的DTFT是——周期性,且连续的

验证卷积定理

clear all
n=0:30;
h=sinc(0.2*n);
subplot(3,3,1);stem(n,h);title('系统的时域响应')
x=2*sin(0.2*pi*n)+3*cos(0.4*pi*n);
subplot(3,3,2);stem(n,x);title('系统的输入')
%%%%%%%%%%%%%%%%%%%DTFT
w=-1:0.001:1;%%%要计算的频率的范围
Hjw=h*(exp(-j*pi).^(n'*w));
subplot(3,3,4);plot(w,abs(Hjw))
title('系统的频域响应');xlabel('pi弧度(w)');ylabel('振幅')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Xjw=x*(exp(-j*pi).^(n'*w));
subplot(3,3,5);plot(w,abs(Xjw));
title('系统的输入的频域');xlabel('pi弧度(w)');ylabel('振幅')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Yjw=Xjw.*Hjw;
%%%%%%%%%%%%%%%%%
subplot(3,3,6);plot(w,abs(Yjw));
title('系统的输出的频域');xlabel('pi弧度(w)');ylabel('振幅')


n1=0:2*length(n)-2;%%%%%%%%计算IDTFT
dw=0.001*pi;%%%%%%%%%%分段求和来实现积分
y=(dw*Yjw*(exp(j*pi).^(w'*n1)))/(2*pi);
subplot(3,3,7);stem(abs(y));title('通过IDTFT计算出的输出序列Y');

y1=conv(x,h);
subplot(3,3,9);stem(abs(y1));title('通过时域卷积计算出的输出序列Y1')



DFT变换

clear all
n=0:30;%%%%%%%%n的范围
x=sin(0.2*n).*exp(-0.1*n);
subplot(2,1,1);stem(n,x);title('序列x')
k=0:30;
N=31;
Wnk=exp(-j*2*pi/N).^(n'*k);%%%%%%DFT定义
X=x*Wnk;
subplot(2,1,2);stem(-15:15,[abs(X(17:end)) abs(X(1:16))])%%%%%%%%对坐标进行了对称排列
title('X的DFT')

上面的都是直接采用原始的定义公式。在matlab中有FFT函数。

DFT的循环卷积

clear all
%%%%%%产生两个信号序列
h=[6 3 4 2 1 -2];
x=[3 2 6 7 -1 -3];

h1=fliplr(h);%%%%%%%%对序列进行翻转
H=toeplitz(h,[h(1) h1(1:5)]);%%%%%%%%%%%生成循环矩阵
y=H*x';%%%%%%%计算循环卷积序列
%%%%%%%%%%%%FFT
H=fft(h);
X=fft(x);
Y=H.*X;
y1=ifft(Y);

subplot(2,1,1);stem(y);title('直接计算')
subplot(2,1,2);stem(y1);title('DFT计算')

clear all
n1=0:20;
n2=0:10;
h=sinc(0.2*n1);
x=exp(-0.2*n2);
y=conv(x,h);

h1=[h zeros(1,length(x)-1)];
x1=[x zeros(1,length(h)-1)];
H1=fft(h1);
X1=fft(x1);
Y1=H1.*X1;
y1=ifft(Y1);

subplot(2,1,1);stem(y);title('直接计算')
subplot(2,1,2);stem(y1);title('DFT计算')

参考文献

https://www.cnblogs.com/cezorzhao/archive/2013/03/24/2978686.html(用matlab对信号进行傅里叶变换)

 

  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值