OFDM中LS和DFT信道估计算法matlab程序

合集下载

OFDM中基于导频的DFT的信道估计算法改进的研究

OFDM中基于导频的DFT的信道估计算法改进的研究

n ie ntecan lmp l so s ( R)b y n el gho te yl rf ( P ,whl en i ti eln t f Pi o p rse t os h e us r p ne CI i h n i ee e o dt n t fh cipe x C ) h e c c i i t os wi nt g o C n tu pesda eh e h h e h s s
t s ssmp igitr q a t f mp i t e o i. eb gn ig a dt ee do e e u n eo eo gn l aa r ic n me a n n S F a u l o l i p r d c f e inn n n f q e c f h r ia d t e so - h i y i c i It h h h t s t i a d
a1 s d o n l ssof h n l si to l o ih u i g ta ii n lDFT ta s o o i n w h n e si ai n i r p s d b s d o n o d l. e n a a y i a ne tma i n a g rt m sn r d to a Ba c e r n f r d ma n, e c a n le t to sp o o e a e n wi d we m m DCT ta s o i o dBy i to ucn e ii n tr s o d i t h e g h ofCP,t e i f e c ft e n ie c u d b urh r r mo e y t r s o d r f r W nd we . n r d i g a d c so h e h l n o t e l n t n m h n u n e o h o s o l e f t e e v d b h e h l l p o e sn . i l to e ul h w a e i r ve l o t m ss p ro rg n lag rt . r c s i g S mu ai n r s t s o t tt mp o d a g r h i u e i rt t o i i a l o i s h h i o he m h Ab ta t s c :OF r DM ;c a n 1 s i t n DCT h n e tma i e o

DFT-S-OFDM系统中自适应调制技术分析及仿真

DFT-S-OFDM系统中自适应调制技术分析及仿真

DFT-S-OFDM系统中自适应调制技术分析及仿真何紫燕,桑林北京邮电大学电信工程学院,北京 (100876)E-mail:heziyan1117@摘要: 本文在阐明DFT-S-OFDM自适应调制系统架构原理以及详细分析DFT-S OFDM系统中不同调制技术的适用场合及对系统性能影响的基础上,给出了一种基于SNR门限值的适用于DFT-S OFDM系统的自适应调制技术。

理论及仿真结果都表明,调度的引入总能带来性能的增益,而这个增益随着信道质量的不同而不同。

关键词:DFT-S OFDM;自适应调制;SNR门限;快速傅里叶变换1.引言为了满足未来移动通信对上行链路的要求,如支持可升级带宽,适中的PAPR/CM,保证上行传输的正交性等,3GPP LTE计划组建议首选单载波传输方案SC-FDMA。

而作为SC-FDMA实现方案之一,DFT-S OFDM技术与下行的OFDM方案具有类似的结构,于是上下行链路可以共用很多参数,因此,DFT-S OFDM将成为未来上行传输中最具发展前景的物理层技术。

2.DFT-S-OFDM系统介绍通用陆地无线接入(UTRA)演进的目标是构建出高速率、低时延、分组优化的无线接入系统。

演进的UTRA致力于建立一个上行速率达到50 MHz、下行速率达到100 MHz、频谱利用率为3G R6的3~4倍的高速率系统。

为达到上述目标,多址方案的选择应该考虑在复杂度合理的情况下,提供更高的数据速率和频谱利用率。

在上行链路中,由于终端功率和处理能力的限制,多址方案的设计更具挑战性,除了性能和复杂度,还需要考虑峰值平均功率比(PAPR)对功率效率的影响。

在3GPP LTE的标准化过程中,诺基亚、北电等公司提交了若干多址方案,如多载波(MC)-WCDMA,MC-TD-SCDMA,正交频分多址接入(OFDMA),交织频分复用(IFDMA)和基于傅立叶变换扩展的正交频分复用(DFT-S OFDM)。

OFDMA已成为下行链路的主流多址方案,并且是上行链路的热门候选方案。

OFDM中基于变换域DFT信道估计算法研究

OFDM中基于变换域DFT信道估计算法研究
总第 2 2 3期
舰 船 电 子 工 程
S hi p El e c t r o n i c En g i n e e r i n g
Vo 1 . 3 3 No . 1
5 7
பைடு நூலகம்
2 0 1 3年第 1 期
OF D M 中基 于变 换 域 D F T信 道 估 计 算 法研 究
DU Yo ng f e ng
( The P ub l i c S e c u r i t y Po l i c e I ns t i t u t e ,El e c t r o n i c Te c h n o l o g y De p a r t me n t ,N i n g b o 3 1 5 8 0 1 )
Ke y W or ds OF DM ,c h a n n e l e s t i ma t i o n,DFT ,no n - i n t e g e r - s a mpl e s p a c e Cl a s s Nu mb er TN9 ] 5
1 引 言
Abs t t ac t Ai me d a t t h e c o mb p i l o t — a s s i s t e d OFDM s y s t e ms .a n i mp r o v e d c h a n n e I e s t i ma t i o n me t h o d b a s e d o n t r a n s f o r l T l d o ma i n DFT i S pr o p o s e d . Th e e n e r g y l e a k a g e o f c h a nn e l i mpu l s e r e s p o n s e c a us e d b y n o n - i n t e ge r - s a mp l e s p a c e c a n b e d e c r e a s e d e f f e c t i v e l y b y p r o p e r l y c h o o— s i n g t h e z e r o — p a d d i n g p o s i t i o n .A t t h e s a me t i me ,n e g l e c t i n g t h o s e n o n s i g ni f i c a n t c h a n n e l t a p s c o nt a i ni ng mo r e n o i s e t h a n c h a nn e l p o we r e n — e r gy c a n r e d u c e t he n o i s e e f f e c t a n d l e a d t O s o me pe r f o r ma n c e i mp r o v e me n t ,e s p e c i a l l y f o r l o w S NR v a l u e s .S i mu l a t i o n r e s ul t s s h o w t h a t t he i mpr o ve d c h a n n e l e s t i ma t i o n me t h o d o ut p e r f o r ms c o n v e nt i o na l f r e q u e nc y — d o ma i n i n t e r p o l a t i o n me t ho d s a n d t h e o r i g i n a 1 z e r o — pa d d i n g me t h o d s a n d i s p r o mi s i ng f o r p r a c t i c a l a p p l i c a t i o n s .

matlab中实现dft算法代码

matlab中实现dft算法代码

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计算。

ofdm信道估计算法

ofdm信道估计算法

ofdm信道估计算法OFDM(Orthogonal Frequency Division Multiplexing)是目前广泛应用于无线通信系统中的一种调制技术。

在OFDM系统中,信道估计是一个非常重要的环节,它对于系统性能的影响非常大。

本文将介绍OFDM信道估计算法的原理和应用。

我们来了解一下OFDM技术。

OFDM技术将整个带宽划分成多个子载波,每个子载波之间是正交的,因此可以同时传输多个子载波上的数据。

这样可以提高频谱利用率和抗多径衰落能力,是一种非常适合无线通信的调制技术。

在OFDM系统中,信号经过多径传播后会受到时延和幅度失真等影响,因此需要进行信道估计来对信号进行校正。

信道估计的目标是估计出信道的频率响应,即每个子载波上的信道增益和相位。

OFDM信道估计算法主要分为基于导频的方法和基于非导频的方法。

基于导频的方法是在发送端插入已知的导频信号,接收端通过接收到的导频信号来估计信道。

这种方法的优点是估计精度较高,但需要占用一部分带宽来发送导频信号,降低了系统的数据传输速率。

常用的导频插入方法有均匀插入导频和不均匀插入导频两种。

基于非导频的方法是通过接收到的数据信号来估计信道。

这种方法不需要占用额外的带宽,提高了系统的数据传输速率。

常用的非导频方法有最小二乘法(LS)、最小均方误差法(MMSE)和最大似然法(ML)等。

最小二乘法是一种常用的OFDM信道估计算法,它通过最小化接收信号和估计信号之间的均方误差来估计信道。

最小二乘法估计的信道响应是线性的,适用于多径传播环境。

但是最小二乘法对于噪声的鲁棒性较差,当信噪比较低时容易出现误差。

最小均方误差法是在最小二乘法的基础上引入了噪声的统计特性,通过最小化接收信号和估计信号之间的均方误差来估计信道。

最小均方误差法的估计精度较高,但计算复杂度较大。

最大似然法是基于统计学原理的一种OFDM信道估计算法。

它通过最大化接收信号的似然函数来估计信道。

最大似然法的优点是可以利用接收信号的统计特性来提高估计精度,但计算复杂度较高。

如何使用MATLAB进行信道估计与调制解调

如何使用MATLAB进行信道估计与调制解调

如何使用MATLAB进行信道估计与调制解调使用MATLAB进行信道估计与调制解调信号通信技术是现代通信领域的基础。

在无线通信中,信道估计和调制解调是其中重要的环节。

本文将介绍如何使用MATLAB进行信道估计与调制解调,并探讨相关应用和研究领域。

一、信道估计在无线通信中,信道估计是指通过接收端对信号传输过程中发生的衰落、干扰等因素进行估计。

信道估计的目的是为了准确地获取信道信息,从而实现更可靠和高质量的通信。

在MATLAB中,可以使用多种方法进行信道估计。

其中一种常用的方法是基于导频序列的信道估计。

通过在传输过程中插入已知序列,接收端可以根据接收信号与导频序列之间的关系来估计信道的特性。

另外,也可以使用最小二乘估计或最大似然估计等统计方法进行信道估计。

这些方法通过对接收信号进行数学建模,利用已知的传输信号和接收信号之间的关系来估计信道参数。

在实际应用中,信道估计广泛应用于多输入多输出(MIMO)系统、正交频分复用(OFDM)系统等场景。

通过准确地估计信道参数,可以优化系统性能,提高信号的传输质量和可靠性。

二、调制解调调制解调是指将数字信号转换为模拟信号并进行传输的过程。

在无线通信中,调制解调是实现信息传输的关键环节。

调制技术将数字信号转换为模拟信号,以适应信道的传输特性。

解调技术则将模拟信号转换回数字信号,使得接收端能够正确地还原原始信息。

在MATLAB中,可以使用各种调制解调技术来实现数字信号的传输和还原。

常见的调制技术包括幅度调制(AM)、频率调制(FM)、相位调制(PM)等。

对于数字信号,也可以使用调幅调制(ASK)、调频调制(FSK)、调相调制(PSK)等技术。

解调过程则是调制过程的逆过程,通过接收到的模拟信号还原出原始的数字信号。

在无线通信中,解调技术的选择与信道特性、调制方式等因素有关。

MATLAB提供了丰富的函数和工具箱,可以方便地进行调制解调的设计和仿真。

三、应用和研究领域信道估计与调制解调在无线通信领域具有广泛的应用和研究价值。

毕业论文基于matlab环境的OFDM信道估计方法研究

毕业论文基于matlab环境的OFDM信道估计方法研究

毕业论文--基于matlab环境的OFDM信道估计方法研究基于matlab环境的OFDM信道估计方法研究学院名称电气工程与自动化学院专业班级学生姓名导师姓名2013 年6月10日目录摘要....................................................错误!未定义书签。

ABSTRACT. (2)第一章绪论 (1)1.1 OFDM的意义和背景 (1)1.2OFDM的历史及发展 (2)1.3OFDM系统的优缺点 (3)1.3.1 OFDM技术的优点 (3)1.3.2 OFDM技术的缺点 (4)第二章 OFDM技术 (4)2.1OFDM基本原理 (4)2.2OFDM的主要传输技术 (5)2.2.1 串并转换 (5)2.2.2 DFT变换 (5)2.2.3 保护间隔和循环前缀 (7)2.2.4 加窗技术 (8)2.2.5 OFDM基本参数的选择 (9)第三章信道估计 (9)3.1基础介绍 (10)3.2几种常见的信道估计算法 (11)3.2.1 一般系统信道估计模型 (11)3.2.2 基于LS算法的信道估计 (13)3.2.3 基于DFT的信道估计算法 (14)3.2.4 基于滤波器的信道估计算法 (18)3.2.5 最大似然估计算法 (20)3.2.6 信道估计算法总结 (23)第四章基于LS和DFT算法信道估计 (24)4.1基于LS和DFT算法信道估计的MATLAB实现 (24)4.2仿真分析及比较 (24)第五章总结...........,, (24)参考文献………………………………………………………………26 致谢 (28)附录 (29)摘要在无线信道环境下,可靠、高速的数据传输是无线通信系统主要目标。

正交频分复用(OFDM)作为一种可以有效对抗符号间干扰(ISI)和载波干扰(ICI)的高速传输技术得到了广泛应用,而信道估计技术作为其关键技术之一也得到了很大的发展。

利用MATLAB实现信号DFT的计算

利用MATLAB实现信号DFT的计算

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')>> 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); >>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 。

dft计算matlab程序

dft计算matlab程序

dft计算matlab程序
DFT(离散傅里叶变换)是一种信号处理中常用的工具,可以将时域信号转换为频域信号。

在MATLAB中,可以使用内置的fft函数来计算DFT。

下面是一个简单的MATLAB程序来计算DFT:
matlab.
% 生成输入信号。

x = [1, 2, 3, 4];
% 计算DFT.
X = fft(x);
% 计算频率轴。

N = length(x); % 信号长度。

f = (0:N-1)(1/N); % 计算频率。

% 绘制幅度谱。

stem(f, abs(X));
xlabel('频率');
ylabel('幅度');
title('DFT幅度谱');
在这个程序中,我们首先生成了一个输入信号x,然后使用fft 函数计算其DFT,得到结果存储在X中。

接着我们计算频率轴上的频率值,并绘制DFT的幅度谱。

这个程序可以帮助理解DFT的计算过程,并且可以在MATLAB中直接运行。

除了这个简单的例子,DFT的计算还涉及到一些复杂的数学原理和算法,比如快速傅里叶变换(FFT)算法。

在实际应用中,还需要考虑信号的采样率、频谱分辨率、零填充等因素。

如果需要更深入的了解DFT的计算,可以进一步研究相关的数学理论和算法。

希望这些信息能够帮助你更好地理解DFT在MATLAB中的计算。

OFDM信道估计MATLAB代码

OFDM信道估计MATLAB代码

echo off; % 关闭回显clear all; % 从内存中清除变量和函数close all; % 关闭所有图形fprintf( '\n OFDM仿真\n \n') ; % 设置显示格式% --------------------------------------------- %% 参数定义%% --------------------------------------------- %IFFT_bin_length = 1024; % 发送端的IFFT变换长度, 接收端的FFT变换长度,R代表接受,T代表发送carrier_count = 200; % 子载波数bits_per_symbol = 2; % 位数/符号symbols_per_carrier = 50; % 符号数/载波cp_length = input('cp length = '); % 输入循环前缀长度d4 = input('d4 = '); % 输入最大多径时延扩展a4 = input('a4 = '); % 输入最大多径时延扩展的系数SNR = input('SNR = '); % 输入信道信噪比(dB) % --------------------------------------------- %% 初始参数设置完毕%% --------------------------------------------- %baseband_out_length = carrier_count * symbols_per_carrier * bits_per_symbol; % 计算发送的二进制序列长度:基带传送长度=载波数×符号数/载波×位数/符号carriers = (1:carrier_count) + (floor(IFFT_bin_length/4) - floor(carrier_count/2)); % 载波(坐标):(1:200) + 256 - 100 = 157:356conjugate_carriers = IFFT_bin_length - carriers + 2; % 载波变换(坐标):1024 - (157:356) + 2 = 1026 - (157:356) = (869:670)%---------------------------------------% 构造共轭时间-载波矩阵,以便应用所谓的RCC,Reduced Computational Complexity算法,即ifft之后结果为实数% 也可以用flipdim函数构造对称共轭矩阵%---------------------------------------% --------------------------------------------- %% 发送信号%% --------------------------------------------- %%---------------------------------------% Generate a random binary output signal:% - a row of uniform random numbers (between 0 and 1), rounded to 0 or 1% - this will be the baseband signal which is to be transmitted.%---------------------------------------baseband_out = round(rand(1,baseband_out_length));%---------------------------------------% round:朝最近的整数取整,rand:产生均匀分布的随机数矩阵(1×baseband_out_length 阶)% Convert to 'modulo N' integers where N = 2^bits_per_symbol% - this defines how many states each symbol can represent% - first, make a matrix with each column representing consecutive bits% from the input stream and the number of bits in a column equal to the% number of bits per symbol% - then, for each column, multiply each row value by the power of 2 that% it represents and add all the rows% - for example: input 0 1 1 0 0 0 1 1 1 0% bits_per_symbol = 2% convert_matrix = 0 1 0 1 1% 1 0 0 1 0% modulo_baseband = 1 2 0 3 2%---------------------------------------convert_matrix = reshape(baseband_out,bits_per_symbol,length(baseband_out)/bits_per_symbol) ;%---------------------------------------% RESHAPE Change size. 把baseband_out变为M×N阶的矩阵% RESHAPE(X,M,N) returns the M-by-N matrix whose elements% are taken columnwise from X. An error results if X does% not have M*N elements.%---------------------------------------for k = 1:(length(baseband_out)/bits_per_symbol)modulo_baseband(k) = 0 ;for i = 1:bits_per_symbolmodulo_baseband(k) = modulo_baseband(k) + convert_matrix(i,k)*2^(bits_per_symbol - i) ; endend%---------------------------------------% Serial to Parallel Conversion 串并转换% - convert the serial modulo N stream into a matrix where each column% represents a carrier and each row represents a symbol% - for example:% serial input stream = a b c d e f g h i j k l m n o p% parallel carrier distribution =% C1/s1=a C2/s1=b C3/s1=c C4/s1=d% C1/s2=e C2/s2=f C3/s2=g C4/s2=h% C1/s3=i C2/s3=j C3/s3=k C4/s3=l% . . . .% . . . .%---------------------------------------carrier_matrix = reshape(modulo_baseband, carrier_count, symbols_per_carrier)'; %生成时间-载波矩阵(carrier_count×symbols_per_carrier)%---------------------------------------% Apply differential coding to each carrier string% - append an arbitrary start symbol (let it be 0, that works for all% values of bits_per_symbol) (note that this is done using a vertical% concatenation [x;y] of a row of zeros with the carrier matrix, sweet!)% - perform modulo N addition between symbol(n) and symbol(n-1) to get the% coded value of symbol(n)% - for example:% bits_per_symbol = 2 (modulo 4)% symbol stream = 3 2 1 0 2 3% start symbol = 0%% coded symbols = 0 + 3 = 3% 3 + 2 = 11 = 1% 1 + 1 = 2% 2 + 0 = 2% 2 + 2 = 10 = 0% 0 + 3 = 3%% coded stream = 0 3 1 2 2 0 3%---------------------------------------% --------------------------------------------- %% QDPSK调制%% --------------------------------------------- %carrier_matrix = [zeros(1,carrier_count);carrier_matrix]; % 添加一个差分调制的初始相位,为0for i = 2:(symbols_per_carrier + 1)carrier_matrix(i,:) = rem(carrier_matrix(i,:)+carrier_matrix(i-1,:),2^bits_per_symbol); % 差分调制(rem除后取余)end%---------------------------------------% Convert the differential coding into a phase% - each phase represents a different state of the symbol% - for example:% bits_per_symbol = 2 (modulo 4)% symbols = 0 3 2 1% phases =% 0 * 2pi/4 = 0 (0 degrees)% 3 * 2pi/4 = 3pi/2 (270 degrees)% 2 * 2pi/4 = pi (180 degrees)% 1 * 2pi/4 = pi/2 (90 degrees)%---------------------------------------carrier_matrix = carrier_matrix * ((2*pi)/(2^bits_per_symbol)); % 产生差分相位%---------------------------------------% Convert the phase to a complex number% - each symbol is given a magnitude of 1 to go along with its phase% (via the ones(r,c) function)% - it is then converted from polar to cartesian (complex) form% - the result is 2 matrices, X with the real values and Y with the imaginary% - each X column has all the real values for a carrier, and each Y column% has the imaginary values for a carrier% - a single complex matrix is then generated taking X for real and% Y for imaginary%---------------------------------------[X,Y] = pol2cart(carrier_matrix, ones(size(carrier_matrix,1),size(carrier_matrix,2))); % 由极坐标向复数坐标转化第一参数为相位第二参数为幅度%---------------------------------------% Carrier_matrix contains all the phase information and all the amplitudes are the same,‘1’% 函数说明:极或柱坐标变为直角坐标% POL2CART Transform polar to Cartesian coordinates.% [X,Y] = POL2CART(TH,R) transforms corresponding elements of data% stored in polar coordinates (angle TH, radius R) to Cartesian% coordinates X,Y. The arrays TH and R must the same size (or% either can be scalar). TH must be in radians.% [X,Y,Z] = POL2CART(TH,R,Z) transforms corresponding elements of% data stored in cylindrical coordinates (angle TH, radius R, height Z)% to Cartesian coordinates X,Y,Z. The arrays TH, R, and Z must be% the same size (or any of them can be scalar). TH must be in radians.%---------------------------------------complex_carrier_matrix = complex(X,Y);%---------------------------------------% 函数说明:% COMPLEX Construct complex result from real and imaginary parts.% C = COMPLEX(A,B) returns the complex result A + Bi, where A and B are% identically sized real N-D arrays, matrices, or scalars of the same data type.%% Assign each carrier to its IFFT bin% - each row of complex_carrier_matrix represents one symbol period, with% a symbol for each carrier% - a matrix is generated to represent all IFFT bins (columns) and all% symbols (rows)% - the phase modulation for each carrier is then assigned to the% appropriate bin% - the conjugate of the phase modulation is then assigned to the% appropriate bin% - the phase modulation bins and their conjugates are symmetric about% the Nyquist frequency in the IFFT bins% - since the first bin is DC, the Nyquist Frequency is located% at (number of bins/2) + 1% - symmetric conjugates are generated so that when the signal is% transformed to the time domain, the time signal will be real-valued% - example% - 1024 IFFT bins% - bin 513 is the center (symmetry point)% - bin 1 is DC% - bin 514 is the complex conjugate of bin 512% - bin 515 is the complex conjugate of bin 511% - ....% - bin 1024 is the complex conjugate of bin 2 (if all bins% were used as carriers)% - So, bins 2-512 map to bins 1024-514%---------------------------------------%--------------------------------------% % 添加训练序列% %--------------------------------------% training_symbols = [ 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 ...-j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 ...1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 ...-1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j ...-1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 ];%---------------------------------------% 25 times "1 j j 1"% 25 times "-1 -j -j -1"% totally 200 symbols as a row%---------------------------------------training_symbols = cat(1, training_symbols, training_symbols) ;training_symbols = cat(1, training_symbols, training_symbols) ;%---------------------------------------% Production of 4 rows of training_symbols% 函数说明:串接成高维数组% CAT Concatenate arrays.% CAT(DIM,A,B) concatenates the arrays A and B along the dimension DIM.% CAT(2,A,B) is the same as [A,B].% CAT(1,A,B) is the same as [A;B].% B = CAT(DIM,A1,A2,A3,A4,...) concatenates the input% arrays A1, A2, etc. along the dimension DIM.%---------------------------------------complex_carrier_matrix = cat(1, training_symbols, complex_carrier_matrix);%---------------------------------------% 训练序列与数据合并,串接成高维数组% block-type pilot symbols%---------------------------------------IFFT_modulation = zeros(4 + symbols_per_carrier + 1, IFFT_bin_length);%---------------------------------------% Here a row vector of zeros is between training symbols and data symbols% 4 training symbols and 1 zero symbol% every OFDM symbol takes a row of "IFFT_modulation"%---------------------------------------IFFT_modulation(:,carriers) = complex_carrier_matrix;IFFT_modulation(:,conjugate_carriers) = conj(complex_carrier_matrix);%---------------------------------------% Find the indices of zeros% Description% ZC = conj(Z) returns the complex conjugate of the elements of Z.% AlgorithmIf Z is a complex array: conj(Z) = real(Z) - i*imag(Z)%---------------------------------------time_wave_matrix = ifft(IFFT_modulation'); % 进行IFFT操作time_wave_matrix = time_wave_matrix'; % 进行矩阵转置cp_add = zeros(4 + symbols_per_carrier + 1,cp_length);for i = 1:4 + symbols_per_carrier + 1cp_add(i,:) = time_wave_matrix(i,(IFFT_bin_length - cp_length + 1) : IFFT_bin_length);endtime_wave_matrix_cp = [cp_add,time_wave_matrix];for i = 1: 4 + symbols_per_carrier + 1 % windowed_time_wave_matrix(i,:) = real(time_wave_matrix(i,:)) .* hamming(IFFT_bin_length)';windowed_time_wave_matrix_cp(i,:) = real(time_wave_matrix_cp(i,:));end%---------------------------------------% Serialize the modulating waveform% - sequentially take each row of windowed_time_wave_matrix and construct a row vector % - the row vector will be the modulating signal% - note that windowed_time_wave_matrix is transposed, this is to account for the way the % Matlab 'reshape' function works (reshape takes the columns of the target matrix and% appends them sequentially)% get the real part of the result of IFFT% 这一步可以省略,因为IFFT结果都是实数% 由此可以看出,只是取了IFFT之后载波上的点,并未进行CP的复制和添加end%---------------------------------------ofdm_modulation = reshape(windowed_time_wave_matrix_cp', 1, (IFFT_bin_length + cp_length)*(4 + symbols_per_carrier+1)); % P2S operation%---------------------------------------Tx_data = ofdm_modulation;%---------------------------------------% 信道模拟%---------------------------------------% The channel model is Gaussian (AWGN) only% - Rayleigh fading would be a useful addition%---------------------------------------d1 = 40; a1 = 0.2; d2 = 50; a2 = 0.3; d3 = 60; a3 = 0.4;%d4 = 160; a4 = 0.9;copy1 = zeros(size(Tx_data)) ;for i = 1 + d1: length(Tx_data)copy1(i) = a1*Tx_data( i - d1) ;endcopy2 = zeros(size(Tx_data) ) ;for i = 1 + d2: length( Tx_data)copy2(i) = a2*Tx_data( i - d2) ;endcopy3 = zeros(size(Tx_data) ) ;for i = 1 + d3: length(Tx_data)copy3(i) = a3*Tx_data ( i - d3) ;endcopy4 = zeros(size(Tx_data) ) ;for i = 1 + d4: length( Tx_data)copy4(i) = a4*Tx_data(i - d4) ;endTx_data = Tx_data + copy1 + copy2 + copy3 + copy4; % 4 multi-pathsTx_signal_power = var(Tx_data);%-------------------------------------------------------------------------% 函数说明:% VAR Variance.% For vectors, Y = VAR(X) returns the variance of the values in X. For% matrices, Y is a row vector containing the variance of each column of% X.%-------------------------------------------------------------------------linear_SNR = 10^(SNR/10);noise_sigma = Tx_signal_power/linear_SNR;noise_scale_factor = sqrt(noise_sigma);%noise = randn(1, length(Tx_data))*noise_scale_factor;Rx_Data = Tx_data + noise;%Rx_Data = Tx_data;%-------------------------------------------------------------------------% 函数说明:产生正态分布的随机函数% Y = randn(m,n) or Y = randn([m n]) returns an m-by-n matrix of random% entries.% The randn function generates arrays of random numbers whose elements are% normally distributed with mean 0 and variance 1.%-------------------------------------------------------------------------% --------------------------------------------- %% 信号接收%% --------------------------------------------- %%-------------------------------------------------------------------------Rx_Data_matrix_cp = reshape(Rx_Data, IFFT_bin_length + cp_length, 4 + symbols_per_carrier + 1);Rx_Data_matrix_cp = Rx_Data_matrix_cp';Rx_Data_matrix = zeros(4 + symbols_per_carrier + 1,IFFT_bin_length);for i = 1:4 + symbols_per_carrier + 1Rx_Data_matrix(i,:) = Rx_Data_matrix_cp(i,(cp_length + 1):(IFFT_bin_length + cp_length)); endRx_Data_matrix = Rx_Data_matrix';%-------------------------------------------------------------------------% Transform each symbol from time to frequency domain% - take the fft of each column%-------------------------------------------------------------------------Rx_spectrum = fft(Rx_Data_matrix);%-------------------------------------------------------------------------% Suppose precise synchronazition between Tx and RxRx_carriers = Rx_spectrum(carriers,:)';Rx_training_symbols = Rx_carriers( (1: 4) , : ) ;Rx_carriers = Rx_carriers((5: 55), : ) ;% --------------------------------------------- %% 信道估计%% --------------------------------------------- %Rx_training_symbols = Rx_training_symbols./ training_symbols;Rx_training_symbols_deno = Rx_training_symbols.^2;Rx_training_symbols_deno = Rx_training_symbols_deno(1,:)+Rx_training_symbols_deno(2,:)+Rx_training_symbols_deno(3,:)+ Rx_training_symbols_deno(4,:) ;Rx_training_symbols_nume = Rx_training_symbols(1, : ) +Rx_training_symbols(2, : ) + Rx_training_symbols(3, : ) +Rx_training_symbols(4, : ) ;Rx_training_symbols_nume = conj(Rx_training_symbols_nume) ;%-------------------------------------------------------------------------% 取4个向量的导频符号是为了进行平均优化% 都是针对“行向量”即单个的OFDM符号进行操作% 原理:寻求1/H,对FFT之后的数据进行频域补偿% 1/H = conj(H)/H^2 because H^2 = H * conj(H)%-------------------------------------------------------------------------Rx_training_symbols = Rx_training_symbols_nume./Rx_training_symbols_deno;Rx_training_symbols_2 = cat(1, Rx_training_symbols,Rx_training_symbols) ;Rx_training_symbols_4 = cat(1, Rx_training_symbols_2,Rx_training_symbols_2) ;Rx_training_symbols_8 = cat(1, Rx_training_symbols_4,Rx_training_symbols_4) ;Rx_training_symbols_16 = cat(1, Rx_training_symbols_8, Rx_training_symbols_8) ;Rx_training_symbols_32 = cat(1, Rx_training_symbols_16, Rx_training_symbols_16) ;Rx_training_symbols_48 = cat(1, Rx_training_symbols_32, Rx_training_symbols_16) ;Rx_training_symbols_50 = cat(1, Rx_training_symbols_48, Rx_training_symbols_2) ;Rx_training_symbols = cat(1, Rx_training_symbols_50,Rx_training_symbols) ;Rx_carriers = Rx_training_symbols.*Rx_carriers;%-------------------------------------------------------------------------% 进行频域单抽头均衡%-------------------------------------------------------------------------Rx_phase = angle(Rx_carriers)*(180/pi);phase_negative = find(Rx_phase < 0);%-------------------------------------------------------------------------% 函数说明:找出非零元素的索引号% FIND Find indices of nonzero elements.% I = FIND(X) returns the linear indices of the array X that are nonzero.% X may be a logical expression. Use IND2SUB(I,SIZE(X)) to calculate% multiple subscripts from the linear indices I.%---------------------------------------------------------------------------Rx_phase( phase_negative );Rx_phase(phase_negative) = rem(Rx_phase(phase_negative) + 360, 360) ;% 把负的相位转化为正的相位Rx_decoded_phase = diff(Rx_phase) ;% 这也是为什么要在前面加上初始相位的原因% “Here a row vector of zeros is between training symbols and data symbols”%-------------------------------------------------------------------------% 函数说明:% DIFF Difference and approximate derivative.% DIFF(X), for a vector X, is [X(2)-X(1) X(3)-X(2) ... X(n)-X(n-1)].% DIFF(X), for a matrix X, is the matrix of row differences,% [X(2:n,:) - X(1:n-1,:)].%------------------------Test Codes --------------------------------------% a = [1 2 3; 4 5 6; 7 8 9; 10 11 12];% b = a;% for i = 2:4% b(i,:) = b(i-1,:) + b(i,:);% end% c = diff(b);%-----------------------Test Result --------------------------------------% a = Modulating signal% 1 2 3% 4 5 6% 7 8 9% 10 11 12% b = Modulated signal% 1 2 3% 5 7 9% 12 15 18% 22 26 30% c = Recovered signal% 4 5 6% 7 8 9% 10 11 12% ----------------------------------------------------------------------------% Name Size Bytes Class% Rx_phase 51x200 81600 double array% Rx_decoded_phase 50x200 80000 double array% ----------------------------------------------------------------------------phase_negative = find(Rx_decoded_phase < 0) ;Rx_decoded_phase(phase_negative)= rem(Rx_decoded_phase(phase_negative) + 360, 360) ;% ----------------------------------------------------------------------------% Extract phase differences (from the differential encoding)% - the matlab diff( ) function is perfect for this operation% - again, normalize the result to be between 0 and 359 degrees% 再次把负的相位转化为正的相位% ----------------------------------------------------------------------------% --------------------------------------------- %% QDPSK解调%% --------------------------------------------- %base_phase = 360 /2^bits_per_symbol;delta_phase = base_phase /2;Rx_decoded_symbols = zeros(size(Rx_decoded_phase,1),size(Rx_decoded_phase,2)) ;%for i = 1: (2^bits_per_symbol - 1)center_phase = base_phase*i;plus_delta = center_phase + delta_phase; % Decision threshold 1minus_delta = center_phase - delta_phase; % Decision threshold 2decoded = find((Rx_decoded_phase <= plus_delta)&(Rx_decoded_phase > minus_delta)) ;Rx_decoded_symbols(decoded) = i;end% ----------------------------------------------------------------------------% 仅仅对三个区域进行判决% 剩下的区域就是零相位的空间了% 这个区域在定义解调矩阵时已经定义为零% ----------------------------------------------------------------------------Rx_serial_symbols = reshape(Rx_decoded_symbols',1,size(Rx_decoded_symbols, 1)*size(Rx_decoded_symbols,2)) ;for i = bits_per_symbol: -1: 1if i ~= 1Rx_binary_matrix(i, : ) = rem(Rx_serial_symbols, 2) ;Rx_serial_symbols = floor(Rx_serial_symbols/2) ;elseRx_binary_matrix( i, : ) = Rx_serial_symbols;endend % Integer to binarybaseband_in = reshape(Rx_binary_matrix, 1,size(Rx_binary_matrix, 1)*size(Rx_binary_matrix, 2) ) ; % --------------------------------------------- %% 误码率计算%% --------------------------------------------- %bit_errors = find(baseband_in ~= baseband_out) ; % find的结果其每个元素为满足逻辑条件的输入向量的标号,其向量长度也就是收发不一样的bit的个数bit_error_count = size(bit_errors, 2) ;total_bits = size( baseband_out, 2) ;bit_error_rate = bit_error_count/ total_bits;fprintf ( '%f \n',bit_error_rate) ;。

MIMO-OFDM系统中信道估计方法的研究

MIMO-OFDM系统中信道估计方法的研究
1.1 概述 ........................................................................................................................................... 1 1.2 移动通信的发展历程 ............................................................................................................... 1 1.3 国内外研究现状 ....................................................................................................................... 2 1.3.1 MIMO-OFDM 技术发展概况及研究现状 ....................................................................... 2 1.3.2 MIMO-OFDM 信道估计算法的研究现状与意义 ........................................................... 2 1.4 本论文的主要研究工作 ........................................................................................................... 6
由于ls信道估计方法兼顾复杂度和精度适用于实际应用系统因此着重matlab软件仿真表明本文的优化算法能够在保证系统信道估计准确性的同时有效地降低传统的信道估计方法的复杂度

Matlab简单的OFDM仿真,信道估计,有BER曲线

Matlab简单的OFDM仿真,信道估计,有BER曲线

clear all。

close all。

fprintf( '\n OFDM仿真\n \n'> 。

% --------------------------------------------- %% 参数定义%% --------------------------------------------- %IFFT_bin_length = 1024。

carrier_count = 200。

bits_per_symbol = 2。

symbols_per_carrier = 50。

% 子载波数200% 位数/ 符号 2% 符号数/ 载波50% 训练符号数10% 循环前缀长度T/4<作者注明)All-zero CP % 调制方式QDPSK% 多径信道数 2、3、4<缺省)% 信道最大时延7 (单位数据符号>% 仿真条件收发之间严格同步 %SNR=input('SNR='>。

% 输入信噪比参数SNR=3:14。

%定义信噪比范围BER=zeros(1,length(SNR>>。

baseband_out_length = carrier_count * symbols_per_carrier * bits_per_symbol。

% 计算发送的二进制序列长度carriers = (1: carrier_count> + (floor(IFFT_bin_length/4> - floor(carrier_count/2>>。

% 坐标: (1 to 200> + 156 , 157 -- 356conjugate_carriers=IFFT_bin_length-carriers+2。

% 坐标:1024 - (157:356> + 2 = 1026 - (157:356> = (869:670> % 构造共轭时间-载波矩阵,以便应用所谓的RCC,Reduced Computational Complexity算法,即i fft之后结果为实数% Define the conjugate time-carrier matrix% 也可以用flipdim函数构造对称共轭矩阵% --------------------------------------------- %% 信号发射%% --------------------------------------------- %%out = rand(1,baseband_out_length>。

OFDM技术仿真(MATLAB代码)..

OFDM技术仿真(MATLAB代码)..

第一章绪论1.1简述OFDM是一种特殊的多载波传输方案,它可以被看作是一种调制技术,也可以被当作一种复用技术。

多载波传输把数据流分解成若干子比特流,这样每个子数据流将具有低得多的比特速率,用这样的低比特率形成的低速率多状态符号再去调制相应的子载波,就构成多个低速率符号并行发送的传输系统。

正交频分复用是对多载波调制(MCM,Multi-Carrier Modulation)的一种改进。

它的特点是各子载波相互正交,所以扩频调制后的频谱可以相互重叠,不但减小了子载波间的干扰,还大大提高了频谱利用率。

符号间干扰是多径衰落信道宽带传输的主要问题,多载波调制技术包括正交频分复用(OFDM)是解决这一难题中最具前景的方法和技术。

利用OFDM技术和IFFT方式的数字实现更适宜于多径影响较为显著的环境,如高速WLAN 和数字视频广播DVB等。

OFDM作为一种高效传输技术备受关注,并已成为第4代移动通信的核心技术。

如果进行OFDM系统的研究,建立一个完整的OFDM 系统是必要的。

本文在简要介绍了OFDM 基本原理后,基于MATLAB构建了一个完整的OFDM动态仿真系统。

1.2 OFDM基本原理概述1.2.1 OFDM的产生和发展OFDM的思想早在20世纪60年代就已经提出,由于使用模拟滤波器实现起来的系统复杂度较高,所以一直没有发展起来。

在20世纪70年代,提出用离散傅里叶变换(DFT)实现多载波调制,为OFDM的实用化奠定了理论基础;从此以后,OFDM在移动通信中的应用得到了迅猛的发展。

OFDM系统收发机的典型框图如图1.1所示,发送端将被传输的数字信号转换成子载波幅度和相位的映射,并进行离散傅里叶变换(IDFT)将数据的频谱表达式变换到时域上。

IFFT变换与IDFT变换的作用相同,只是有更高的计算效基于MATLAB实现OFDM的仿真率,所以适用于所有的应用系统。

其中,上半部分对应于发射机链路,下半部分对应于接收机链路。

OFDM中基于导频的DFT的信道估计算法改进的研究

OFDM中基于导频的DFT的信道估计算法改进的研究

OFDM中基于导频的DFT的信道估计算法改进的研究OFDM (Orthogonal Frequency Division Multiplexing)是一种常用于高速数据传输的调制技术。

在OFDM系统中,信道估计是非常重要的一个环节,因为准确的信道估计可以有效地提高系统性能,提高数据传输的可靠性和数据速率。

OFDM系统中的信道估计通常采用基于导频的DFT (Discrete Fourier Transform)算法。

这种算法通过在发送端插入一些已知的导频符号,然后在接收端通过接收到的导频符号来估计信道频率响应。

但是,基于导频的DFT算法在信道变化快速的情况下会受到很大的影响。

因此,为了提高信道估计的准确性和鲁棒性,有必要对基于导频的DFT算法进行改进的研究。

一种改进的方法是使用多径补偿技术。

传统的基于导频的DFT算法假设信道是单径的,并且只估计信道的平均响应。

然而,在现实的无线环境中,多径效应是不可避免的,信道往往包含多条路径,导致接收到的信号是多径效应的叠加。

因此,引入多径补偿技术可以有效地提高信道估计的精确性。

这种技术可以通过使用信道估计算法对每个路径进行单独估计,然后将它们组合起来得到最终的信道估计结果。

另一种改进的方法是使用非线性信道估计算法。

传统的基于导频的DFT算法是线性的,即假设信道是时不变的,并通过DFT算法来估计信道的线性响应。

但是,在一些情况下,信道是非线性的,例如,当信号经过高速移动的移动通信信道时,多普勒频移会导致信道非线性。

因此,使用非线性信道估计算法可以更好地适应非线性信道环境。

一种常用的非线性信道估计算法是基于神经网络的信道估计算法,它可以通过训练神经网络来估计信道的非线性响应。

此外,还可以使用时间和频率窗口技术来改进基于导频的DFT算法。

传统的基于导频的DFT算法假设信道响应在整个频率范围内是平稳的,但实际上,信道响应可能在一些频率范围内不稳定。

使用时间和频率窗口技术可以将时间和频率上不稳定的信道响应限制在一个小的窗口内,从而减小估计误差。

OFDM调制、解调的MATLAB实现

OFDM调制、解调的MATLAB实现

OFDM调制、解调的MATLAB实现
OFDM调制/解调的MATLAB实现
用MATLAB实现OFDM调制、解调,其中假设OFDM信号包含6个子载波。

这里简单的说明OFDM调制的方式,略去了交织、加窗等部分。

c=6; %子载波个数
bits=108; %每个信道的比特数
n=c*bits; %总的传送比特数
data=2*round(rand(1,n))-1;%产生信源数据
s=reshape(data,c,bits); %产生调制信号
tp=1:0.1:(1+10.8)-0.1;
for i=1:c
carrier(i,:)=cos(2*i*pi*tp);%产生载波信号bpsk-sig (i,:)=s(i,:).*carrier(i,:);%产生调制信号 fin(i,:)=ifft(bpsk-sig(i,:)); %对信号进行IFFT
end
%并串变换
transmit=reshape(fin,1,648);
%加噪声
snr=10;
rxdata=awgn(transmit,snr,’measured’);
%串并变换
rec=reshape(rxdata,c,bits);
for i=1:c
rd(i,:)=fft(rec(i,:)); %进行FFT处理
uncarry(i,:)=rd(i,:).*carrier(i,:); %解调
end
rdata=sign(real(uncarry)); %判决输出结果
%并串变换
rdout=reshape(rdata,1,648);
在MATLAB里运行上述程序后,读者自行比较rdout和data的数值。

OFDM完整仿真过程及解释(MATLAB)

OFDM完整仿真过程及解释(MATLAB)

OFDM完整仿真过程及解释(MATLAB)OFDM(正交频分复用)是一种多载波调制技术,在无线通信系统中得到广泛应用。

其基本原理是将高速数据流分成多个较低速的子载波,使得每个子载波的传输速率降低,从而提高了系统的可靠性和抗干扰性能。

以下是OFDM的完整仿真过程及解释。

1. 生成数据:首先,在MATLAB中生成需要传输的二进制数据,可以使用随机数生成函数randi(生成0和1的二进制序列。

2.编码:将生成的二进制数据进行编码,例如使用卷积码、块码等编码方式。

编码可以提高数据传输的可靠性,对抗信道中的噪声和干扰。

3.映射:将编码后的数据映射到调制符号,例如使用QPSK、16-QAM 等调制方式。

调制方式决定了每个符号所携带的比特数,不同调制方式具有不同的抗噪声和传输速率性能。

4.并行-串行转换:将映射后的调制符号进行并行-串行转换,将多个并行的调制符号转换为串行的数据流。

这是OFDM的关键步骤,将高速数据流分成多个较低速的子载波。

5. 添加保护间隔:为了消除多径传播引起的码间干扰,需要在串行数据流中插入保护间隔(Guard Interval),通常是循环前缀。

保护间隔使得子载波之间相互正交,从而避免了码间干扰。

6.IFFT:对添加保护间隔后的数据进行反快速傅里叶变换(IFFT),将时域信号转换为频域信号。

IFFT操作将子载波映射到频域,每个子载波代表系统的一个子信道。

7.添加导频:在OFDM符号的频域信号中添加导频,用于估计信道的频率响应和相位差。

导频通常位于频谱的首尾或者分布在整个频谱中,用于信道估计和均衡。

8.加载子载波:将导频和数据子载波合并,形成完整的OFDM符号。

数据子载波携带着编码后的数据,导频子载波用于信道估计。

9.加性高斯白噪声(AWGN)信道:将OFDM符号通过加性高斯白噪声信道进行传输。

AWGN信道是一种理想化的信道模型,可以模拟实际信道中的噪声和干扰。

10.解调:接收端对接收到的OFDM符号进行解调,包括载波恢复、频偏补偿、信道估计和均衡等操作。

DFT的快速算法分析及MATLAB实现

DFT的快速算法分析及MATLAB实现

《数字信号处理》课程设计报告DFT的快速算法分析及MATLAB实现专业:通信工程班级:通信08-1BF组次:第07组姓名:李雨龙学号:14082300931DFT 的快速算法分析及MATLAB 实现一、设计目的MATLAB 是一种以数值计算和数据图示为主的计算机软件,并包含适应多个学科的专业软件包,以及完善程序开发功能。

在MATLAB 中设计并实现DFT 快速算法,就是MATLAB 软件在数值计算中的应用。

通过这次课程设计,以期我们能更加加深对数字信号处理中FFT 运算的理解,并且熟悉MATLAB 的功能,掌握MATLAB 程序设计思想,为以后的毕业设计奠定一定的基础。

二、设计任务对任意有限长序列x(n)作基2FFT 运算,由于上课时老师讲解的是时域抽取法FFT(Decimation-In-Time FFT,简称DIT-FFT),所以这里采用频域抽取法FFT(Decimation-In-Frequency FFT,简称 DIF-FFT)对x(n)作基2FFT 运算。

三、设计原理设序列点数为N =2^M ,M 为正整数。

在把输出X (k )按k 的奇偶分组之前,先把输入序列按前一半、后一半分开(不是按偶数、 奇数分开), 把N 点DFT 写成两部分。

由于k Nk N W )1(2/-=,则可得:k=1,2,…,N-1 nk N N n Nk N kN n NNn nkNN n N N n nkNN n nkN N n nkN W W N n x n x WN n x Wn x W n x W n x W n x k X ∑∑∑∑∑∑-=⎪⎭⎫ ⎝⎛+-=-=-=-=-=⎥⎦⎤⎢⎣⎡⎪⎭⎫ ⎝⎛++=⎪⎭⎫ ⎝⎛++=+==1202/21212012101202)(2)()()()()(nk NN n k WN n x n x k X ∑-=⎥⎦⎤⎢⎣⎡⎪⎭⎫ ⎝⎛+-+=1202)1()()(当k 为偶数时,(-1)^k =1;k 为奇数时,(-1)^k =-1。

Matlab关于信道估计的一个描述

Matlab关于信道估计的一个描述

Matlab关于信道估计的一个描述在网上看到的一个网友对信道估计的描述用于初步了解还是不错的。

如下对信道估计简单的来说就是求出一个信道的近似冲激响应使之尽可能地接近于真实的信道冲激响应以便在接收端进行信道补偿从而提高整个的系统性能。

信道估计大致有两种方法导频和盲信道估计。

目前一般利用导频我们可以采用LS方法HX 的逆乘以Y因为通过信道后会有噪声加进去所以我们利用导频求得的冲激响应会与理想的冲激响应存在MSE 和 BER而我们在利用导频求冲激响应时是利用了发射端和接收端信号求得的。

在通信系统中为了提高系统的频谱利用率通常采用幅度非恒定的调制方式在这种情况下接收机就需要知道信道精确的状态信息进行相干解调因此要进行信道估计根据接收端的统计信息估计出信道的频率相应从公式上来讲就是对特定的传输信道找到一个H的值使之与这个特定的传输信道H相近似这个就是信道估计。

从公式YHXN可以看出要知道信道H值的话需要知道Y和X信道噪声N认为影响比较少不考虑。

因此在发送端一般都发送已知的信号X然后通过接收端得到的Y就可以求出H来了。

但是传输过程不可能都传已知信号这样传输就没有意义对于那部分不知道的信号可以根据已知H来近似的做为未知信号的H这样H和Y知道了就可以求出发送的X达到通信的目的。

上面的各径时延和各径衰减取自type urban 模型我顺手打的准确的表述是 Typical Urban是在仿真中比较常用的一种多径信道模型关于fd 以及 tau pav 等的用法可以参照matlab函数 rayleighchan 【求助】LMMSE信道估计请高人指点在OFDM based on comb-pilot estimation中Rhh 如何算Rhhkl1-exp-1t_max1/trmsj2pik-l/N./trms1-exp-1t_max/trms1 /trmsj2pik-l/N 有些书中给出了这个公式。

那如果我用的是rayleigh fading 最大时延和平均时延如何求我的 rayleigh fading模型用的是sefade.msimulation and software radio for mobile communication中的那个里头的时延是可以自己设置那是否意味着最大时延就是自己设置的最大那个平均时延就是把几条路径的时延除以路径数 eg:tau0 4 6 10 t_max10 trms04610/4 所谓的Rhh就是指信道在时域或者频域的相关性不同的信道profile导致其相关性不同。

OFDM中LS和DFT信道估计算法matlab程序

OFDM中LS和DFT信道估计算法matlab程序
piloted_ofdm_syms(:,pilot_Indx)=repmat(pilot_symbols,1,num_pilot);
%----------------IFFT变换———————————————————
time_signal=sqrt(carrier_count)*ifft(piloted_ofdm_syms);
%----------------LS符号解调------------------------------------
Rx_pilot=Rx_carriers(:,pilot_Indx);
Rx_fre_data=Rx_carriers(:,Data_Indx);
%----------------导频位置信道响应LS估计------------------------
pilot_symbols=round(rand(1,pilot_len));
for i=1:pilot_len
if pilot_symbols(1,i)==0
pi(1,i)-1;
Data_Indx(1,(1+j*pilot_Inter):(j+1)*pilot_Inter)=(2+j*(pilot_Inter+1)):((j+1)*(pilot_Inter+1));
end
Data_Indx=Data_Indx(1,1:num_symbol);
%----------------DFT估计--------------------------------------
Tx_pilot_estimate_ifft=ifft(pilot_esti);
padding_zero=zeros(1024,7);
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
demod_in_ls=Tx_data_estimate_ls(:).&#39;;
demod_out_ls=qamdemod(demod_in_ls,modulation_mode);
%----------------误码率的计算----------------------gth(BitsTx)
if demod_out_dft(i)~=BitsTx(i)
num_bit_err_dft(c1,num1)=num_bit_err_dft(c1,num1)+1;
end
if dem
od_out_ls(i)~=BitsTx(i)
piloted_ofdm_syms(:,pilot_Indx)=repmat(pilot_symbols,1,num_pilot);
%----------------IFFT变换———————————————————
time_signal=sqrt(carrier_count)*ifft(piloted_ofdm_syms);
%----------------DFT估计中发送数据的估计值----------------------
Tx_data_estimate_dft=Rx_fre_data.*conj(channel_H_data_dft)./(abs(channel_H_data_dft).^2);
%----------------DFT符号解调------------------------------------
%----------------DFT估计--------------------------------------
Tx_pilot_estimate_ifft=ifft(pilot_esti);
padding_zero=zeros(1024,7);
Tx_pilot_estimate_ifft_padding_zero=[Tx_pilot_estimate_ifft;padding_zero];
MSE1=zeros(length(SNR),NumLoop);
MSE2=zeros(length(SNR),NumLoop);
%%%%%%%%%%%%%%%%%%%%%%%主程序循环%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for c1=1:length(SNR)
for j=0:num_pilot
Data_Indx(1,(1+j*pilot_Inter):(j+1)*pilot_Inter)=(2+j*(pilot_Inter+1)):((j+1)*(pilot_Inter+1));
end
Data_Indx=Data_Indx(1,1:num_symbol);
Rx_signal=reshape(Rx_data,(carrier_count+Guard),num_data);
Rx_signal_matrix=zeros(carrier_count,num_data);
Rx_signal_matrix=Rx_signal(Guard+1:end,:);
Tx_pilot_estimate_dft=fft(Tx_pilot_estimate_ifft_padding_zero);
%----------------DFT估计的线性插值———————————————
int_len=pilot_Indx;
len=1:num_data;
for ii=1:carrier_count
pilot_symbols(1,i)=pilot_symbols(1,i);
end
end
pilot_symbols=pilot_symbols&#39;;
%----------------计算导频和数据数目----------------------------
num_pilot=ceil(num_symbol/pilot_Inter);
%----------------导频插入-------------------------------------
piloted_ofdm_syms=zeros(carrier_count,num_data);
piloted_ofdm_syms(:,Data_Indx)=reshape(Modulated_Sequence,carrier_count,num_symbol);
pilot_Indx=zeros(1,num_pilot);
Data_Indx=zeros(1,num_pilot*(pilot_Inter+1));
for i=1:num_pilot-1
pilot_Indx(1,i)=(i-1)*(pilot_Inter+1)+1;
end
pilot_Indx(1,num_pilot)=num_data;
channel_H_data_ls=channel_H_ls(:,Data_Indx);
%----------------LS估计中发送数据的估计值----------------------
Tx_data_estimate_ls=Rx_fre_data.*conj(channel_H_data_ls)./(abs(channel_H_data_ls).^2);
rrier_count+Guard)*num_data);
%----------------信道处理--------------------------------------
Tx_signal_power=sum(abs(Tx_data_trans(:)).^2)/length(Tx_data_trans(:));
%%%%%%%%%%%%%%%%%%%a%%%%%%%%主程序循环换结束%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fprintf(&#39;\n\n\n仿真信噪比为%f\n\n&#39;,SNR(c1));
for num1=1:NumLoop
%---------------产生发送的随机序列——————————————-
BitsLen=carrier_count*num_symbol;
BitsTx=randint(1,BitsLen);
num_bit_err_ls(c1,num1)=num_bit_err_ls(c1,num1)+1;
end
end
end
end
BER_dft=mean(num_bit_err_dft.&#39;)/length(BitsTx);
BER_ls=mean(num_bit_err_ls.&#39;)/length(BitsTx);
channel_H_dft(ii,:)=interp1(int_len,Tx_pilot_estimate_dft(ii,1:(num_pilot)),len,&#39;linear&#39;);
end
channel_H_data_dft=channel_H_dft(:,Data_Indx);
Guard=8;%--------------------循环前缀
pilot_Inter=8;%--------------导频间隔
modulation_mode=16;%---------调制方式
SNR=[0:2:20];%-------------信噪比取值
NumLoop=15;%-----------------循环次数
noise_var=Tx_signal_power/(10^(SNR(c1)/10));
Rx_data=awgn(Tx_data_trans,SNR(c1),&#39;measured&#39;);
%----------------信号接收、去循环前缀、FFT变换-----------------
if rem(num_symbol,pilot_Inter)==0
num_pilot=num_pilot+1;
end
num_data=num_symbol+num_pilot;
%----------------导频位置计算----------------------------------
pilot_len=carrier_count;
pilot_symbols=round(rand(1,pilot_len));
for i=1:pilot_len
if pilot_symbols(1,i)==0
pilot_symbols(1,i)=pilot_symbols(1,i)-1;
else
附 录
程序:
clear all;
close all;
fprintf(&#39;OFDM信道估计仿真\n\n&#39;);
carrier_count=64;%-----------载波数目
num_symbol=50;%--------------OFDM符号个数
%----------------导频位置信道响应LS估计------------------------
pilot_patt=repmat(pilot_symbols,1,num_pilot);
pilot_esti=Rx_pilot./pilot_patt;
%----------------LS估计的线性插值———————————————
%---------------符号调制---------------------------------------
相关文档
最新文档