卷积.循环卷积与OFDM

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

卷积、线性卷积、循环卷积与OFDM 中的循环前缀CP

摘要:本文主要讲述了卷积的定义及如何理解卷积,用离散样值近似计算连续卷积的方法,用循环卷积计算线性卷积的方法,用线性卷积计算循环卷积的方法,以及后者在OFDM 中的应用(循环前缀CP ),并给出了相关的Matlab 代码和实例进行验证和说明。目的是为了建立起连续信号处理与离散信号处理之间的联系。与本人在百度文库中的连续时间傅立叶变换与离散时间傅里叶变换之间的关系、从DTFT 到DFT ,计算频谱,并由频谱反求时间样点,为三部曲。

1. 连续信号卷积的定义及实质

众所周知,当信号x(t)通过具有单位冲击响应为h(t)的因果LTI 系统时,其输出信号y(t)是前二者之间的线性卷积:

()()()()0

()()*()T t t T

y t x t h t h x t d x h t d t t t t t t -==

-=

-蝌 (1)

其中假设单位冲击响应在[0 T]之外的值都是0。 从数学上来看,要得到第二个积分公式中的h(t-τ),需先把h(τ)先以τ=0的轴进行时域翻转,然后再向右移动t 个单位。

h(τ)

h(-τ )

图1.从上到下依次为h(τ), h(-τ), h(1-τ), x(τ), h(1-τ)* x(τ)

在上面这个图形例子中,取t=1,故公共区间为[0,1]这个区间,故卷积积分的区间也是这个公共区间,即

()()1

0(1)y x h t d t t t =

-

ò (2)

上面图中的卷积结果将是一个分段函数。

上面的例子中,由于h(t)是连续的,故其与x(t)卷积的意义并不直观。下面我们令

h()()0.2(t 0.1)0.1(0.2)t t t d d d =+---

(3) 这是一个典型的多径时延信道的抽头延迟线(TDL )模型的单位冲击响应。由于

()()()()()000*x t t t x t t d x t t d t d t t ¥

¥

-=

--=-ò- (4)

所以x(t)通过(3)式表示的信道h(t)后得到:

()()()()()

()()()

**()0.2(t 0.1)0.1(0.2)0.20.10.10.2y t x t h t x t t t x t x t x t d d d ==+---=+---

(5)

h(1-τ )

x(τ )

移位对齐后相乘并积分(t=1)

是各个信号延迟加权后的版本。

这其实揭露了信号卷积的本质:当信号x(t)通过LTI 系统h(t)时,信号x(t)的不同延迟版本x(t-τ)分别被系统单位冲击响应在该延迟上的取值h(τ) 进行加权,把所有这样的加权延迟信号进行求和,即得到二者的卷积(当h(t)为连续系统时,求和变为取积分)。这就是公式(1)第一个积分的含义。而这只不过是(5)的抽头延迟线模型的连续化的结果而已。所以,卷积就是信号的各个加权延迟版本的和(对连续系统来说则是积分)。从LTI 系统的定义来讲(公式(1)第二个积分),则卷积是单位冲击响应函数的各个加权延迟版本之和(连续系统是积分)。

2. 用离散抽样来近似计算连续信号的卷积

下面我们来进行离散化。从公式(1)出发,假设抽样间隔为Ts, T=NTs ,d τ=Ts, 假设信号x(t)和系统h(t)的各抽样值都保持一个抽样周期,则可把积分换作求和:

()()(n Ts)(t)*()t nTs k

y x h t Ts h kTs x nTs kTs ===-å (6)

简单记作:

()()(n)(n)*()k

y x h n Ts h k x n k ==-å

(7)

也就是说,如果我们要计算信号x(t)与系统h(t)的卷积,而手里只有二者的抽样值时,可以用公式(7)来进行近似计算。这里,抽样间隔Ts 要非常小,结果才足够准确(比抽样定理要求的高)。

下面是一个matlab 的例程,用来说明这一点: 例1. 用离散样值计算信号卷积的matlab 实例。 %实际信号卷积的例子

%注意结果乘以了dt (抽样间隔或曰样本周期)才是真正的连续卷积值 %conv 的结果并不是信号真正意义上的卷积

%如果不乘以dt ,conv 的结果会随着离散时间点数而变化

dt=0.001; t=0:dt:2;

x=zeros(size(t)); N1=length(x); h=zeros(size(t)); N2=length(h);

%信号赋值

x(find(t<1)) = ones(size(find(t<1)));

h(find(t<1)) = t(find(t<1));

h(find(t>=1))=ones(size(find(t>=1))); h(find(t>=2)) =zeros(size(find(t>=2)));

%离散卷积

y = conv(x,h); L = length(y);

figure;

subplot(311);plot(t,x); axis([0 3 0,1.2]); xlabel('t');title('x(t)'); subplot(312);plot(t,h); axis([0 3 0,1.2]); xlabel('t');title('h(t)'); t1 = 0:dt:dt*(L-1) ; %t1=0:dt:(length(y)-1)*dt

subplot(313);plot(t1,dt*y);axis([0 3 0,1.6]);xlabel('t');title('x(t)*h(t)');

对应的输入信号x(t),冲击响应h(t)及系统输出(卷积)函数y(t)图形如下:

图2 x(t), h(t)及二者卷积

而在离散时间信号处理中,离散信号x(n)通过离散单位脉冲响应h(n)表示的LTI 系统时,其输出定义为:

()()()()(n)(n)*()h k

k

y x h n h k x n k x k n k ==

-=

-邋 (8)

跟公式(7)的差别就在于求和之后没有乘以Ts 。这是因为,在离散信号处理中,这个Ts 已经包含在脉冲响应函数h(n)中了。

这一点如何理解呢?根据就在离散傅立叶变化与连续傅里叶变换的关系。在用DFT 求连续信号FT 的样值的时候,以matlab 为例,进行fft 变换后取主值区间(-fs/2~fs/2)的值,然后要除以fs (fs 是抽样频率)才是连续信号的FT 的抽样值。由FT 的抽样值反求信号时,就需要乘以fs 才得到真正的信号值。

通常,滤波器都是以频域的形式给出(即h(t)的傅里叶变换的离散抽样)H(k),这时系统的输出有两种求法:①由H(k)求IDFT ,然后乘以fs ,得到h(n);再由x(n)卷积h(n)并乘以Ts(抽样间隔),得到y(n)即输出信号的抽样值。由于fs=1/Ts ,所以这里乘以fs 再乘以ts 相当于乘以1,故结果可以简化为:由H(k)求IDFT ,然后跟x(n)卷积。②由x(n)求DFT ,并除以fs ,得到x(t)的傅里叶变换的离散抽样X(k);然后对频域序列{X(k)H(k)}求IDFT 。

t x(t)

t h(t)

t

x(t)*h(t)

相关文档
最新文档