利用卷积定理进行信道估计 + 深入探究 DFT 与 matlab 中的 fft 用法

1 背景

最近尝试用时域卷积定理来进行信道估计

假设 TX信号为 s(t),信道脉冲响应(CIR)为 h(t),那么RX信号 y(t) = s(t) * h(t)
根据时域卷积定理,时域卷积的傅里叶变换,等于各自傅里叶变换的乘积
因此,在已知 s(t) 和 y(t) 的前提下, 可以通过 Y(f) / S(f) 来获得 H(f),然后再进行傅里叶逆变换,就可以得到 h(t)

用matlab来完成以上过程时,会有一个疑问
假设 s(t)的长度为 m, h(t)的长度为n, 那么卷积之后 y(t)的长度为 m+n-1
在matlab中,使用 fft 函数来进行离散傅里叶变换,使用 ifft 函数来进行傅里叶反变换。因为傅里叶变换是不改变序列长度的,所以如果按原序列长度进行 n 点 FFT变换,最后S(f)长度为m, Y(f)长度为m+n-1,两个不一样长度的序列要如何进行除法操作呢?

为了解决长度问题,需要对短的那一个序列进行补零操作,在matlab中使用 fft(X, n),X就是准备进行FFT的时域序列,n代表进行n点傅里叶变换,如果n大于X的长度,那么X就在末尾补零,如果n小于X的长度,那么就将X截断。
那么我们只需要通过

fft(s(t), m-n-1)

就可以弥补长度差距,做个小实验,确实如此
在这里插入图片描述
在这里插入图片描述

2 DFT & FFT 公式级别解析

2.1 DFT / IDFT

在这里为了方便实验,定义一个序列 st = [1, 2, ,3 ,4]

首先来看 DFT 的公式
请添加图片描述
请添加图片描述
验证一下

st = [1, 2, 3, 4];
fft(st)

在这里插入图片描述
从上述计算中可以总结出两点:

  1. 时域序列经过DFT后的第一个点 X[0] 等于原时域 x[n] 的累加
  2. X[K] 的每一个值实际上都是 x[n] 所有值的线性组合,且系数都是基于算子W,本质是原时域序列的加权求和

搞懂了DFT,接下来再来看 IDFT公式

在这里插入图片描述
验证一下

st = [1, 2, 3, 4];
sf = fft(st)
st2 = ifft(sf)

在这里插入图片描述
至此,通过一个简单的例子,证明了 DFT 与 IDFT 的正确性,以及matlab中 fft 和 ifft 这两个函数的可靠性

2.2 FFT

FFT通过蝶形算法来进行计算

蝶形算法的本质是将DFT点数不停对半拆分,然后利用计算机并行计算

一般数字信号处理的教科书上都会介绍蝶形算法

用 DIT-FFT流图计算st的过程如下所示:
请添加图片描述
在 matlab中,一般会使用 fftshift 来搭配 fft 使用

fftshift的作用是将 sf 左右交换,比如 sf = [1, 2, 3, 4],那么交换后 sf = [3, 4, 1, 2];如果 sf = [1, 2, ,3, 4, 5],那么交换后 sf = [4, 5, 1, 2, 3]

我们将 sf[0] 这个位置成为零频,fftshift的作用就是将零频移到频谱中心,为什么这么做?我目前的理解就是为了方便观察。
作了 fft 之后的序列除了零频处外是左右共轭对称的,且左边的虚部一般为正,右边虚部一般为负。
举个例子,假设 st = [1, 2, ,3 ,4, 5],其fft结果为 sf = [15.0000 + 0.0000i, -2.5000 + 3.4410i, -2.5000 + 0.8123i , -2.5000 - 0.8123i, -2.5000 - 3.4410i], 其频谱为
在这里插入图片描述
使用了 fftshift之后,其频谱为:
在这里插入图片描述

3 利用卷积定理进行信道估计

在第一章中,阐述了此方法的原理,那么真的有用吗,做个实验验证一下

v = [2.55, 7.38,     4.9,     9.9, 8.64, 8.9123, 5, 6, 7];
h = [1.2,  0.0008, 1.234];
u = conv(v, h);

maxLen = max([length(v), length(u)]); % 补零,统一长度
vf = fft(v, maxLen);
uf = fft(u, maxLen);
hf = uf ./ vf;
est_h_rough = real(fftshift(ifft(hf)));
disp(['est_h_rough: ', num2str(est_h_rough)]);
est_h = est_h_rough(floor(length(est_h_rough) / 2 + 1):end);
disp(['est_h: ', num2str(est_h)]);

结果为
est_h_rough:
在这里插入图片描述
est_h:
在这里插入图片描述
est_h就是最终的信道估计结果
如果事先知道 h 的长度为3,那么提取前三个,就和原h一摸一样了
但是在真实信道中,我们往往不知道h有多长,那就把剩下的尾巴带着,反正并不影响使用

为什么这么巧,正好在这些位置就是原h的值?目前还不知道,但是按照第2章的方法来分析一定能从细节上搞懂,只是太耗时了,知道可以这么做就行。

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
信道估计是无线通信的重要问题之一,它可以用来估计无线信道的频率响应,以便于在接收端进行信号解码和检测。本文将介绍一种基于离散导频的DFT信道估计算法,同时提供MATLAB实现。 1. 离散导频信号 离散导频信号是一种特殊的调制方式,它通过在发送信号插入一些特定的导频符号来传输信息。在接收端,通过对接收到的导频符号进行解调和解码,可以估计出信道的频率响应。 离散导频信号的生成方式非常简单,只需要在发送信号插入一些特定的导频符号即可。导频符号的数量和位置可以根据具体的应用需求进行设计,一般情况下,导频符号的数量应该足够多,以保证信道估计的精度。 2. DFT信道估计算法 离散导频信号可以用来估计信道的频率响应,其一种常用的方法是DFT信道估计算法。该算法的基本思想是,将接收到的信号与发送信号的导频符号进行相关运算,然后通过DFT变换来得到信道的频率响应。 具体来说,设发送信号为$x(n)$,接收信号为$y(n)$,其$n$表示时刻。在发送信号,插入了$P$个导频符号,位置分别为$k_1,k_2,...,k_P$。接收信号可以表示为: $$y(n)=\sum_{k=0}^{N-1}h(k)x(n-k)+w(n)$$ 其,$h(k)$表示信道的频率响应,$w(n)$表示噪声。为了方便起见,我们假设噪声是白噪声,且均值为0,方差为$\sigma^2$。 在接收端,我们可以通过取出导频符号,得到以下方程组: $$y(k_1)=\sum_{k=0}^{N-1}h(k)x(k_1-k)+w(k_1)$$ $$y(k_2)=\sum_{k=0}^{N-1}h(k)x(k_2-k)+w(k_2)$$ $$\cdots$$ $$y(k_P)=\sum_{k=0}^{N-1}h(k)x(k_P-k)+w(k_P)$$ 将以上方程组表示成矩阵形式: $$\mathbf{Y}=\mathbf{HX}+\mathbf{W}$$ 其,$\mathbf{Y}$表示接收信号的导频符号矩阵,$\mathbf{X}$表示发送信号的导频符号矩阵,$\mathbf{H}$表示信道频率响应矩阵,$\mathbf{W}$表示噪声矩阵。我们可以通过求解上述方程组,得到信道的频率响应$\mathbf{H}$。 由于信道频率响应是一个复数向量,因此我们可以通过DFT变换来得到它的频域表示。具体来说,我们可以用以下公式来计算信道的频率响应: $$\hat{H}(f)=\frac{\sum_{k=0}^{P-1}y(k)e^{-j2\pi fk/N}}{\sum_{k=0}^{P-1}x(k)e^{-j2\pi fk/N}}$$ 其,$f$表示频率,$\hat{H}(f)$表示信道的频率响应估计值。 3. MATLAB实现 下面是基于离散导频的DFT信道估计算法的MATLAB实现。假设发送信号$x(n)$是一个长度为$N=1024$的随机序列,且插入了$P=16$个导频符号。信道的频率响应$h(k)$是一个长度为$L=64$的随机复数序列,且满足高斯分布。 ```matlab % 生成发送信号 N = 1024; x = randn(1, N); % 插入导频符号 P = 16; indices = randperm(N, P); x(indices) = 1 + 1i; % 生成信道频率响应 L = 64; h = (randn(1, L) + 1i*randn(1, L))/sqrt(2); % 生成接收信号 y = conv(x, h, 'same') + 0.1*(randn(1, N) + 1i*randn(1, N)); % 提取导频符号 y_pilot = y(indices); x_pilot = x(indices); % 计算信道频率响应 H = fft(y_pilot)./fft(x_pilot); % 绘制频率响应图像 f = linspace(0, 1, L); plot(f, abs(H)); xlabel('Normalized frequency'); ylabel('Magnitude'); title('Channel frequency response'); ``` 运行以上代码,就可以得到信道的频率响应估计值,并绘制出其频率响应图像。需要注意的是,由于噪声的影响,信道频率响应的估计值可能存在一定的误差,因此我们需要在实际应用进行误差分析和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值