基于matlab实现OFDM的编码.

合集下载

(完整版)OFDMmatlab实现

(完整版)OFDMmatlab实现

close all;carrier_count=200;%子载波数symbols_per_carrier=12;%每子载波含符号数bits_per_symbol=4;%每符号含比特数,16QAM调制IFFT_bin_length=512;%FFT点数PrefixRatio=1/4;%保护间隔与OFDM数据的比例1/6~1/4GI=PrefixRatio*IFFT_bin_length ;%每一个OFDM符号添加的循环前缀长度为1/4*IFFT_bin_length 即保护间隔长度为128beta=1/32;%窗函数滚降系数GIP=beta*(IFFT_bin_length+GI);%循环后缀的长度20SNR=15; %信噪比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));%共轭对称子载波映射复数数据对应的IFFT点坐标conjugate_carriers = IFFT_bin_length - carriers + 2;%共轭对称子载波映射共轭复数对应的IFFT点坐标rand( 'state',0);baseband_out=round(rand(1,baseband_out_length));%输出待调制的二进制比特流%==============16QAM调制====================================complex_carrier_matrix=qam16(baseband_out);%列向量complex_carrier_matrix=reshape(complex_carrier_matrix',carrier_count,symbols_per_car rier)';%symbols_per_carrier*carrier_count 矩阵figure(1);plot(complex_carrier_matrix,'*r');%16QAM调制后星座图axis([-4, 4, -4, 4]);grid on%=================IFFT===========================IFFT_modulation=zeros(symbols_per_carrier,IFFT_bin_length);%添0组成IFFT_bin_length IFFT 运算IFFT_modulation(:,carriers ) = complex_carrier_matrix ;%未添加导频信号,子载波映射在此处IFFT_modulation(:,conjugate_carriers ) = conj(complex_carrier_matrix);%共轭复数映射%========================================================stem(0:IFFT_bin_length-1, abs(IFFT_modulation(2,1:IFFT_bin_length)),'b*-')%第一个OFDM符号的频谱grid onaxis ([0 IFFT_bin_length -0.5 4.5]);ylabel('Magnitude');xlabel('IFFT Bin');title('OFDM Carrier Frequency Magnitude');figure(3);plot(0:IFFT_bin_length-1, (180/pi)*angle(IFFT_modulation(2,1:IFFT_bin_length)), 'go') hold onstem(0:carriers-1, (180/pi)*angle(IFFT_modulation(2,1:carriers)),'b*-');%第一个OFDM符号的相位stem(0:conjugate_carriers-1,(180/pi)*angle(IFFT_modulation(2,1:conjugate_carriers)),'b*-');axis ([0 IFFT_bin_length -200 +200])grid onylabel('Phase (degrees)')xlabel('IFFT Bin')title('OFDM Carrier Phase')%================================================================= signal_after_IFFT=ifft(IFFT_modulation,IFFT_bin_length,2);%OFDM调制即IFFT变换time_wave_matrix =signal_after_IFFT;%时域波形矩阵,行为每载波所含符号数,列ITTF 点数,N个子载波映射在其内,每一行即为一个OFDM符号figure(4);subplot(3,1,1);plot(0:IFFT_bin_length-1,time_wave_matrix(2,:));%第一个符号的波形axis([0, 700, -0.2, 0.2]);grid on;ylabel('Amplitude');xlabel('Time');title('OFDM Time Signal, One Symbol Period');%===========================================================%=====================添加循环前缀与后缀====================================XX=zeros(symbols_per_carrier,IFFT_bin_length+GI+GIP);for k=1:symbols_per_carrier;for i=1:IFFT_bin_length;XX(k,i+GI)=signal_after_IFFT(k,i);endfor i=1:GI;XX(k,i)=signal_after_IFFT(k,i+IFFT_bin_length-GI);%添加循环前缀endfor j=1:GIP;XX(k,IFFT_bin_length+GI+j)=signal_after_IFFT(k,j);%添加循环后缀endendtime_wave_matrix_cp=XX;%添加了循环前缀与后缀的时域信号矩阵,此时一个OFDM符号长度为IFFT_bin_length+GI+GIP=660subplot(3,1,2);plot(0:length(time_wave_matrix_cp)-1,time_wave_matrix_cp(2,:));%第一个符号添加循环前缀后的波形axis([0, 700, -0.2, 0.2]);grid on;ylabel('Amplitude');xlabel('Time');title('OFDM Time Signal with CP, One Symbol Period');%==============OFDM符号加窗==========================================windowed_time_wave_matrix_cp=zeros(1,IFFT_bin_length+GI+GIP);for i = 1:symbols_per_carrierwindowed_time_wave_matrix_cp(i,:) =real(time_wave_matrix_cp(i,:)).*rcoswindow(beta,IFFT_bin_length+GI)';%加窗升余弦窗endsubplot(3,1,3);plot(0:IFFT_bin_length-1+GI+GIP,windowed_time_wave_matrix_cp(2,:));%第一个符号的波形axis([0, 700, -0.2, 0.2]);grid on;ylabel('Amplitude');xlabel('Time');title('OFDM Time Signal Apply a Window , One Symbol Period');%========================生成发送信号,并串变换==================================================windowed_Tx_data=zeros(1,symbols_per_carrier*(IFFT_bin_length+GI)+GIP); windowed_Tx_data(1:IFFT_bin_length+GI+GIP)=windowed_time_wave_matrix_cp(1,:); for i = 1:symbols_per_carrier-1 ;windowed_Tx_data((IFFT_bin_length+GI)*i+1:(IFFT_bin_length+GI)*(i+1)+GIP)=window ed_time_wave_matrix_cp(i+1,:);%并串转换,循环后缀与循环前缀相叠加end%=======================================================Tx_data_withoutwindow=reshape(time_wave_matrix_cp',(symbols_per_carrier)*(IFFT_bin_length+GI+GIP),1)';%没有加窗,只添加循环前缀与后缀的串行信号Tx_data=reshape(windowed_time_wave_matrix_cp',(symbols_per_carrier)*(IFFT_bin_length+GI +GIP),1)';%加窗后循环前缀与后缀不叠加的串行信号%================================================================= temp_time1 = (symbols_per_carrier)*(IFFT_bin_length+GI+GIP);%加窗后循环前缀与后缀不叠加发送总位数figure (5)subplot(2,1,1);plot(0:temp_time1-1,Tx_data );%循环前缀与后缀不叠加发送的信号波形grid onylabel('Amplitude (volts)')xlabel('Time (samples)')title('OFDM Time Signal')temp_time2 =symbols_per_carrier*(IFFT_bin_length+GI)+GIP;subplot(2,1,2);plot(0:temp_time2-1,windowed_Tx_data);%循环后缀与循环前缀相叠加发送信号波形grid onylabel('Amplitude (volts)')xlabel('Time (samples)')title('OFDM Time Signal')%=================未加窗发送信号频谱==================================symbols_per_average = ceil(symbols_per_carrier/5);%符号数的1/5,10行avg_temp_time = (IFFT_bin_length+GI+GIP)*symbols_per_average;%点数,10行数据,10个符号averages = floor(temp_time1/avg_temp_time);average_fft(1:avg_temp_time) = 0;%分成5段for a = 0:(averages-1)subset_ofdm = Tx_data_withoutwindow(((a*avg_temp_time)+1):((a+1)*avg_temp_time));%subset_ofdm_f = abs(fft(subset_ofdm));%将发送信号分段求频谱average_fft = average_fft + (subset_ofdm_f/averages);%总共的数据分为5段,分段进行FFT,平均相加endaverage_fft_log = 20*log10(average_fft);figure (6)subplot(2,1,1);plot((0:(avg_temp_time-1))/avg_temp_time, average_fft_log)%归一化0/avg_temp_time : (avg_temp_time-1)/avg_temp_timehold onplot(0:1/IFFT_bin_length:1, -35, 'rd')grid onaxis([0 0.5 -40 max(average_fft_log)])ylabel('Magnitude (dB)')xlabel('Normalized Frequency (0.5 = fs/2)')title('OFDM Signal Spectrum without windowing')%===============加窗的发送信号频谱================================= symbols_per_average = ceil(symbols_per_carrier/5);%符号数的1/5,10行avg_temp_time = (IFFT_bin_length+GI+GIP)*symbols_per_average;%点数,10行数据,10个符号averages = floor(temp_time1/avg_temp_time);average_fft(1:avg_temp_time) = 0;%分成5段for a = 0:(averages-1)subset_ofdm = Tx_data(((a*avg_temp_time)+1):((a+1)*avg_temp_time));%利用循环前缀后缀未叠加的串行加窗信号计算频谱subset_ofdm_f = abs(fft(subset_ofdm));%分段求频谱average_fft = average_fft + (subset_ofdm_f/averages);%总共的数据分为5段,分段进行FFT,平均相加endaverage_fft_log = 20*log10(average_fft);subplot(2,1,2)plot((0:(avg_temp_time-1))/avg_temp_time, average_fft_log)%归一化0/avg_temp_time : (avg_temp_time-1)/avg_temp_timehold onplot(0:1/IFFT_bin_length:1, -35, 'rd')grid onaxis([0 0.5 -40 max(average_fft_log)])ylabel('Magnitude (dB)')xlabel('Normalized Frequency (0.5 = fs/2)')title('Windowed OFDM Signal Spectrum')%====================添加噪声============================================Tx_signal_power = var(windowed_Tx_data);%发送信号功率linear_SNR=10^(SNR/10);%线性信噪比noise_sigma=Tx_signal_power/linear_SNR;noise_scale_factor = sqrt(noise_sigma);%标准差sigmanoise=randn(1,((symbols_per_carrier)*(IFFT_bin_length+GI))+GIP)*noise_scale_factor; %产生正态分布噪声序列%noise=wgn(1,length(windowed_Tx_data),noise_sigma,'complex');%产生复GAUSS白噪声信号Rx_data=windowed_Tx_data +noise;%接收到的信号加噪声%=====================接收信号串/并变换去除前缀与后缀==========================================Rx_data_matrix=zeros(symbols_per_carrier,IFFT_bin_length+GI+GIP);for i=1:symbols_per_carrier;Rx_data_matrix(i,:)=Rx_data(1,(i-1)*(IFFT_bin_length+GI)+1:i*(IFFT_bin_length+GI)+GI P);%串并变换endRx_data_complex_matrix=Rx_data_matrix(:,GI+1:IFFT_bin_length+GI);%去除循环前缀与循环后缀,得到有用信号矩阵%============================================================%==== ============================================================%==============================================================% OFDM解码16QAM解码%=================FFT变换=================================Y1=fft(Rx_data_complex_matrix,IFFT_bin_length,2);%OFDM解码即FFT变换Rx_carriers=Y1(:,carriers);%除去IFFT/FFT变换添加的0,选出映射的子载波Rx_phase =angle(Rx_carriers);%接收信号的相位Rx_mag = abs(Rx_carriers);%接收信号的幅度figure(7);polar(Rx_phase, Rx_mag,'bd');%极坐标坐标下画出接收信号的星座图%================================================================== ====[M, N]=pol2cart(Rx_phase, Rx_mag);Rx_complex_carrier_matrix = complex(M, N);figure(8);plot(Rx_complex_carrier_matrix,'*r');%XY坐标接收信号的星座图axis([-4, 4, -4, 4]);grid on%====================16qam解调==================================================Rx_serial_complex_symbols =reshape(Rx_complex_carrier_matrix',size(Rx_complex_carrier_matrix,1)*size(Rx_complex_carrier_matrix,2),1)' ;Rx_decoded_binary_symbols=demoduqam16(Rx_serial_complex_symbols);%============================================================ baseband_in = Rx_decoded_binary_symbols;figure(9);subplot(2,1,1);stem(baseband_out(1:100));subplot(2,1,2);stem(baseband_in(1:100));%================误码率计算=============================================bit_errors=find(baseband_in ~=baseband_out);bit_error_count = size(bit_errors, 2)ber=bit_error_count/baseband_out_length。

matlab 通信仿真案例

matlab 通信仿真案例

matlab 通信仿真案例
在MATLAB中,通信仿真是一个常见的应用领域,可以用于模拟
和分析数字通信系统的性能。

下面我将从多个角度介绍几个常见的
通信仿真案例。

1. OFDM系统仿真,OFDM(正交频分复用)是一种常见的多载
波调制技术,用于高速数据传输。

你可以使用MATLAB来建立一个基
本的OFDM系统仿真模型,包括信道估计、均衡和解调等模块。

通过
仿真可以分析系统在不同信噪比下的误码率性能,优化系统参数以
及算法设计。

2. 无线通信系统仿真,你可以使用MATLAB建立一个简单的无
线通信系统仿真模型,包括传输信道建模、调制解调、信道编码、
多天线技术等。

通过仿真可以评估系统的覆盖范围、传输速率、抗
干扰能力等性能指标。

3. MIMO系统仿真,MIMO(多输入多输出)技术在无线通信中
得到了广泛应用。

你可以使用MATLAB建立一个MIMO系统仿真模型,包括空间多路复用、信道估计、预编码等。

通过仿真可以分析系统
的信道容量、波束赋形技术对系统性能的影响等。

4. LTE系统仿真,LTE(长期演进)是目前移动通信领域的主流技术之一。

你可以使用MATLAB建立一个LTE系统仿真模型,包括物理层信号处理、上下行链路传输、信道编码解码等。

通过仿真可以评估系统的覆盖范围、传输速率、干扰抑制能力等性能指标。

以上是一些常见的通信仿真案例,通过MATLAB你可以方便地建立仿真模型,分析系统性能,并优化系统设计。

希望这些案例能够帮助到你。

无线通信原理-基于matlab的ofdm系统设计与仿真

无线通信原理-基于matlab的ofdm系统设计与仿真

无线通信原理-基于matlab的ofdm系统设计与仿真基于matlab的ofdm系统设计与仿真摘要OFDM即正交频分复用技术,实际上是多载波调制中的一种。

其主要思想是将信道分成若干正交子信道,将高速数据信号转换成并行的低速子数据流,调制到相互正交且重叠的多个子载波上同时传输。

该技术的应用大幅度提高无线通信系统的信道容量和传输速率,并能有效地抵抗多径衰落、抑制干扰和窄带噪声,如此良好的性能从而引起了通信界的广泛关注。

本文设计了一个基于IFFT/FFT算法与802.11a标准的OFDM系统,并在计算机上进行了仿真和结果分析。

重点在OFDM系统设计与仿真,在这部分详细介绍了系统各个环节所使用的技术对系统性能的影响。

在仿真过程中对OFDM信号使用QPSK 调制,并在AWGN信道下传输,最后解调后得出误码率。

整个过程都是在MATLAB环境下仿真实现,对ODFM系统的仿真结果及性能进行分析,通过仿真得到信噪比与误码率之间的关系,为该系统的具体实现提供了大量有用数据。

- 1 -第一章 ODMF系统基本原理1.1多载波传输系统多载波传输通过把数据流分解为若干个子比特流,这样每个子数据流将具有较低的比特速率。

用这样的低比特率形成的低速率多状态符号去调制相应的子载波,构成了多个低速率符号并行发送的传输系统。

在单载波系统中,一次衰落或者干扰就会导致整个链路失效,但是在多载波系统中,某一时刻只会有少部分的子信道会受到衰落或者干扰的影响。

图1,1中给出了多载波系统的基本结构示意图。

图1-1多载波系统的基本结构多载波传输技术有许多种提法,比如正交频分复用(OFDM)、离散多音调制(DMT)和多载波调制(MCM),这3种方法在一般情况下可视为一样,但是在OFDM中,各子载波必须保持相互正交,而在MCM则不一定。

1.2正交频分复用OFDM就是在FDM的原理的基础上,子载波集采用两两正交的正弦或余弦函sinm,tcosn,t数集。

基于MATLAB的OFDM系统仿真及分析

基于MATLAB的OFDM系统仿真及分析

基于MATLAB的OFDM系统仿真及分析OFDM(正交频分复用)是一种广泛应用于无线通信系统中的多载波调制技术。

在OFDM系统中,信号被分为多个独立的子载波,并且每个子载波之间正交。

这种正交的特性使得OFDM系统具有抗频率选择性衰落和多径干扰的能力。

本文将基于MATLAB对OFDM系统进行仿真及分析。

首先,我们需要确定OFDM系统的参数。

假设我们使用256个子载波,其中包括8个导频符号用于信道估计,每个OFDM符号的时域长度为128个采样点。

接下来,我们需要生成调制信号。

假设我们使用16QAM调制方式,每个子载波可以传输4个比特。

在MATLAB中,我们可以使用randi函数生成随机的比特序列,然后将比特序列映射为16QAM符号。

生成的符号序列可以通过IFFT(Inverse Fast Fourier Transform)将其转换为时域信号。

OFDM系统的发射端包括窗函数、导频符号插入、IFFT和并行到串行转换等模块。

窗函数用于增加OFDM符号之间的过渡带,导频符号用于信道估计和符号同步。

通过将符号序列与导频图案插入到OFDM符号序列中,然后进行IFFT变换,再进行并行到串行转换即可得到OFDM信号的时域波形。

接下来,我们需要模拟OFDM信号在信道中传输和接收。

假设信道是Additive White Gaussian Noise(AWGN)信道。

在接收端,OFDM信号的时域波形通过串行到并行转换,然后进行FFT(Fast Fourier Transform)变换得到频域信号。

通过在频域上对导频符号和OFDM信号进行正交插值,可以进行信道估计和等化。

最后将频域信号进行解调,得到接收后的比特序列。

通过比较发送前和接收后的比特序列,我们可以计算比特误码率(BER)来评估OFDM系统的性能。

比特误码率是接收到错误比特的比特数与总传输比特数之比。

通过改变信噪比(SNR)值,我们可以评估OFDM系统在不同信道条件下的性能。

mimoofdm无线通信技术与matlab代码

mimoofdm无线通信技术与matlab代码

mimoofdm无线通信技术与matlab代码1. 引言1.1 概述无线通信技术的发展迅猛,随着移动互联网时代的到来,人们对高速、稳定的无线通信需求日益增加。

MIMO-OFDM无线通信技术作为一种重要的解决方案,在提升系统容量和抗干扰性能方面具有显著优势。

本文旨在介绍MIMO-OFDM 无线通信技术原理,并借助MATLAB代码实现,通过仿真和性能评估分析展示其有效性和优越性。

1.2 文章结构本文分为五个部分:引言、MIMO-OFDM无线通信技术、MATLAB代码实现、实验结果与讨论以及结论与展望。

在引言部分,我们将简要介绍文章的背景和目标。

接下来,会详细讲解MIMO-OFDM无线通信技术的基本原理,并说明其在提高系统容量和抗干扰性能方面的作用。

然后,我们会详细描述如何使用MATLAB编写MIMO-OFDM系统模拟代码,并进行性能评估与分析。

随后,我们会展示仿真参数设置和结果展示,并对结果进行深入分析和性能讨论。

最后,在结论与展望部分,我们将总结本文的研究工作和贡献,并讨论目前的不足之处以及可能的改进方案。

1.3 目的本文的主要目的是深入介绍MIMO-OFDM无线通信技术及其原理,并通过MATLAB代码实现来验证其性能。

通过对实验结果进行分析和讨论,我们旨在揭示MIMO-OFDM技术在提高系统容量和抗干扰性能方面的优势。

同时,本文也希望为读者提供一个了解和学习MIMO-OFDM无线通信技术以及使用MATLAB进行系统模拟的参考。

以上就是“1. 引言”部分内容,概述了本文的背景、目标和结构。

在接下来的章节中,我们将逐一展开讲解MIMO-OFDM无线通信技术、MATLAB代码实现、实验结果与讨论以及结论与展望部分。

2. MIMO-OFDM无线通信技术:2.1 MIMO技术介绍:多输入多输出(MIMO)技术是一种通过在发射和接收端使用多个天线来增加系统容量和提高通信质量的无线通信技术。

MIMO技术利用空间上的多样性,通过在不同天线之间形成独立的传输通道,从而带来更好的抗干扰能力和信号接收品质。

ofdm子载波频谱matlab代码

ofdm子载波频谱matlab代码

ofdm子载波频谱matlab代码以下是一个简单的OFDM子载波频谱的Matlab代码示例。

该代码主要生成一个OFDM信号,并计算其频谱。

```Matlab% 参数设定N = 64; % 子载波数CP = N/4; % 循环前缀长度t = 1/20e3; % 时间长度Ts = t/N; % 符号周期f0 = 2.5e9; % 载波频率fc = 10*f0; % 信号带宽Tb = N*Ts; % 比特周期c = 3e8; % 光速d = c*Ts/2; % 发送天线与接收天线间距SNRdB = 10; % 比特能量噪声比(dB)snr = SNRdB/10; % 比特能量噪声比EbN0 = 10^(snr/10); % 比特能量噪声密度比EbN0_dB = 10*log10(EbN0); % 比特能量噪声密度比(dB)Pn = 1/sqrt(2)*(sqrt(2)*sqrt(pi)*sqrt(EbN0)*1i)/2; % 加性高斯白噪声功率谱密度Pn_dB = 10*log10(Pn); % 加性高斯白噪声功率谱密度(dB)% 生成OFDM信号data = randi([0,1],N,1); % 生成随机的二进制数据data_fft = fft(data); % FFT变换data_fft_cp = [data_fft, zeros(CP,1)]; % 添加循环前缀x = exp(1i*2*pi*f0*(0:N-1)*Ts); % 生成载波信号x_cp = [x, zeros(CP,1)]; % 添加循环前缀x_cp_data = x_cp.*data_fft_cp; % 调制信号x_cp_data_mod = real(x_cp_data); % 取实部,得到复数调制信号x_cp_data_mod_tx = repmat(x_cp_data_mod,1,d); % 发送天线复制信号x_cp_data_mod_rx = repmat(x_cp_data_mod,1,d); % 接收天线复制信号x_cp_data_mod_rx(:,:) = conj(x_cp_data_mod(:,:)); % 天线相位翻转,实现模拟MIMO传输y = filter([1-d -d],1,x_cp_data_mod_tx) + filter([-d -d 1],1,x_cp_data_mod_rx); % MIMO接收信号滤波器处理y = y/2; % 均衡处理,实现模拟解调y_fft = fft(y); % FFT变换,解调信号y_fft = y_fft(CP+1:end); % 去掉循环前缀,得到解调数据频域信号y = real(y_fft); % 取实部,得到解调数据时域信号y = ifft(y); % IFFT变换,得到解调数据时域信号data_demod = real(y); % 取实部,得到解调数据时域信号% 计算频谱frequencies = -fc:fc/(N*Ts); % 频率轴取值范围power = abs(fft(data))**2; % 计算功率谱密度函数power_noise = abs(fft(randn(N,length(t)))**2); % 计算加性高斯白噪声功率谱密度函数power = power + power_noise; % 计算总功率谱密度函数power = power/max(power); % 归一化处理,使最大功率为1figure; plot(frequencies,power); xlabel('Frequency (Hz)'); ylabel('Power Spectral Density (W/Hz)'); title('Power Spectrum'); grid on;以上就是关于ofdm子载波频谱matlab代码的介绍,欢迎补充。

基于Matlab的OFDM同步算法

基于Matlab的OFDM同步算法

02
OFDM技术通过将高速数据流分散到多个子载波上,增加信号传输的可靠性, 同时通过添加循环前缀,有效抵抗多径干扰。
03
同步技术则关注如何快速、准确地找到接收信号的起始位置,以恢复原始数据 。
算法流程
编码阶段,发送端将输入数据进行OFDM编码,添加循 环前缀和其他必要的标识。
解调阶段,接收端对接收到的OFDM信号进行解码,提 取出原始数据。
时频跟踪
展示算法在时变信道下的跟踪性能,验证其 适应能力。
误码率分析
通过分析误码率等指标,验证算法在实际应 用中的可靠性。
复杂度评估
对优化前后的算法复杂度进行评估,展示优 化在降低运算复杂度方面的效果。
05
总结与展望
研究成果总结
高效的算法
基于matlab的ofdm同步算法在仿真实验中表现出高效性 ,能够快速准确地实现信号同步。
01
预处理接收信号
通过去除噪声、频偏等手段,提 高接收信号的质量。
构建解调器
根据估计的参数,构建适合的解 调器对OFDM信号进行解调。
03
02
估计时频参数
利用训练序列或已知信息,估计 出信号的时域和频域参数。
优化解调结果
对解调后的信号进行进一步优化 ,如去除干扰、均衡等。
04
优化结果展示
性能对比
将优化后的算法与传统的OFDM同步算法进 行性能对比,展示优化的有效性。
2. 生成训练序列:在每 个OFDM符号前添加一 个特定的训练序列,用
于接收端进行同步。
实现步骤
3. 调制
对输入数据进行QPSK或QAM等调制。
4. IFFT
进行逆快速傅里叶变换(IFFT),将频域数据转换为时域数据。

基于MATLAB的OFDM接收系统设计与仿真 通信工程专业毕业设计 毕业论文

基于MATLAB的OFDM接收系统设计与仿真 通信工程专业毕业设计 毕业论文

基于MATLAB的OFDM接收系统设计与仿真通信工程专业毕业设计毕业论文题目:基于MATLAB的OFDM装接收系统设计与仿真学院电子信息工程学院学科门类工学专业通信工程学号姓名指导教师2011年5月12日基于MATLAB的OFDM接收系统设计与仿真摘要OFDM即正交频分复用技术,实际上是多载波调制中的一种。

其主要思想是:将信道分成若干正交子信道,将高速数据信号转换成并行的低速子数据流,调制到相互正交且重叠的多个子载波上同时传输。

该技术的应用大幅度提高无线通信系统的信道容量和传输速率,并能有效地抵抗多径衰落、抑制干扰和窄带噪声,如此良好的性能从而引起了通信界的广泛关注。

本文设计了一个基于FFT算法的OFDM接收系统,并在计算机上进行了仿真和结果分析。

重点放在OFDM接收系统设计与仿真,在这部分详细介绍了系统各模块的组成及设计机理,然后对OFDM信号经过AWGN信道后进行解调,整个过程都是在MATLAB 环境下仿真实现,并对接收系统的仿真结果及性能进行分析,通过仿真得到信噪比与误码率之间的关系,为该系统的具体实现提供了大量有用数据,为OFDM通信系统的进一步改进奠定了基础。

关键词:正交频分复用;MATLAB;接收系统;设计仿真OFDM Receiver Design and Simulation Based on MATLABABSTRACTOFDM, which is short for Orthogonal Frequency Division Multiplexing, is actually one of the multi-carrier modulations. The main idea of OFDM is to split the channel into a number of orthogonal subchannels and the high-speed data signals into a number of parallel low-speed data signals that are transmitted simultaneously over numbers of subcarriers. This technology greatly improves the channel capacity and transmission rate of the wireless communication system and effectively resists to multipath fading interference and inhibits narrowband noise. Such a good performance has brought widespread concern in the communication area.In this thesis, based on the FFT algorithm, an OFDM receiver system is designed and simulated on a computer. This article focuses on the OFDM receiver design and simulation and details the components and design of each module of the system, and then the demodulation of the OFDM signals transmitted through AWGN channel. The entire process is realized under the MATLAB simulation environment. And then it analyzes the receiver system simulation results and performance, through which we get the relation between SNR (signal to noise) and BER (bit error rate), providing a great numbers of useful datas for the concrete realization of the system, and laying a solid foundation for further improvement of OFDM communication system.Key words:OFDM(Orthogonal Frequency Division Multiplexing);MATLAB;Receiver System;Design and Simulation目录1 引言 (1)1.1课题研究背景及意义 (1)1.2课题发展历程现状及前景 (2)1.3可行性分析 (2)1.4本文主要研究工作和内容安排 (2)2 OFDM基带系统的原理 (4)2.1单载波与多载波通信系统 (4)2.1.1单载波通信系统 (4)2.1.2多载波通信系统 (4)2.2频分复用与正交频分复用 (5)2.2.1频分复用(FDM) (5)2.2.2正交频分复用(OFDM) (7)2.3OFDM技术的优缺点分析 (8)2.4OFDM技术的基本理论及算法 (9)2.4.1OFDM基本原理 (9)2.4.2OFDM基础理论 (9)2.4.3OFDM核心算法 (11)3OFDM接收系统设计 (13)3.1OFDM整体基带系统框图 (13)3.2OFDM接收系统设计 (14)3.2.1串并变换 (14)3.2.2去循环前缀CP (14)3.2.3FFT (15)3.2.4并串变换 (17)3.2.516QAM解调 (17)4基于MATLAB的OFDM接收系统仿真 (19)4.1仿真环境MATLAB介绍 (19)4.2仿真参数设置 (19)4.2.1OFDM系统参数选择 (19)4.2.2参数设置 (19)4.3仿真程序分析 (21)4.3.1仿真接收系统信号程序流程图 (21)4.3.2待接收OFDM信号 (21)4.3.3信道模型 (24)4.3.4串并变换/并串变换 (25)4.3.5去循环前缀CP (25)4.3.6快速傅里叶变换FFT (26)4.3.716QAM解调 (27)4.4仿真结果分析 (28)4.4.1比特率 (28)4.4.2频谱效率 (28)4.4.3误码率分析 (28)4.4.4仿真结果 (29)5总结 (32)参考文献 (34)致谢 (36)1 引言1.1 课题研究背景及意义由于OFDM技术的可实现性,在二十世纪90年代,OFDM广泛应用干各种数字传输和通信中,如广播式音频、视频领域和民用通信系统,主要的应用包括:非对称的数字用户环路(ADSL)、ETSI标准的数字音频广播(DAB)、数字视频广播(DVB)、高清晰度电视(HDTV)、无线局域网(WLAN)等。

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

clc;clear all;close all;fprintf('OFDM系统仿真\n');carrier_count=input('输入系统仿真的子载波数: \n');%子载波数128,64,32,16 symbols_per_carrier=30;%每子载波含符号数bits_per_symbol=4;%每符号含比特数,16QAM调制IFFT_bin_length=1024;%FFT点数PrefixRatio=1/4;%保护间隔与OFDM数据的比例1/6~1/4GI=PrefixRatio*IFFT_bin_length ;%每一个OFDM符号添加的循环前缀长度为1/4*IFFT_bin_length ,即256beta=1/32;%窗函数滚降系数GIP=beta*(IFFT_bin_length+GI);%循环后缀的长度40SNR=10; %信噪比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));%共轭对称子载波映射复数数据对应的IFFT点坐标conjugate_carriers = IFFT_bin_length - carriers + 2;%共轭对称子载波映射共轭复数对应的IFFT点坐标rand( 'twister',0); %每次产生不相同得伪随机序列baseband_out=round(rand(1,baseband_out_length));%产生待调制的二进制比特流figure(1);stem(baseband_out(1:50));title('二进制比特流')axis([0, 50, 0, 1]);%==============16QAM调制==================================== complex_carrier_matrix=qam16(baseband_out);%列向量complex_carrier_matrix=reshape(complex_carrier_matrix',carrier_count,symbols_per_carrier)';%串并转换,转换为symbols_per_carrier*carrier_count 矩阵figure(2);plot(complex_carrier_matrix,'*r');%16QAM调制后星座图title('16QAM调制后星座图')axis([-4, 4, -4, 4]);grid on%==========分配载波到指定的IFFT位置========================== IFFT_modulation=zeros(symbols_per_carrier,IFFT_bin_length);%添0组成IFFT 运算IFFT_modulation(:,carriers ) = complex_carrier_matrix ;%未添加导频信号,子载波映射在此处IFFT_modulation(:,conjugate_carriers) =conj(complex_carrier_matrix);%共轭复数映射figure(3);stem(0:IFFT_bin_length-1, abs(IFFT_modulation(2,1:IFFT_bin_length)),'b*-')grid onaxis ([0 IFFT_bin_length -0.5 4.5]);ylabel('幅值');xlabel('频率');title('OFDM载波幅度谱');figure(4);plot(0:IFFT_bin_length-1,(180/pi)*angle(IFFT_modulation(2,1:IFFT_bin_length)),'go')hold onstem(0:carriers-1, (180/pi)*angle(IFFT_modulation(2,1:carriers)),'b*-');stem(0:conjugate_carriers-1,(180/pi)*angle(IFFT_modulation(2,1:conjugate_carriers)),'b*-');axis ([0 IFFT_bin_length -200 +200])grid onylabel('相位')xlabel('频率')title('OFDM载波相位谱')%========通过IFFT将频域转化为时域,得到时域信号=============== signal_after_IFFT=ifft(IFFT_modulation,IFFT_bin_length,2);%OFDM调制即IFFT time_wave_matrix =signal_after_IFFT;%时域波形矩阵,行为每载波所含符号数,列ITTF点数,子载波映射在其内,每一行即为一个OFDM符号figure(5);plot(0:IFFT_bin_length-1,time_wave_matrix(2,:));axis([0, 700, -0.2, 0.2]);grid on;ylabel('振幅');xlabel('时间');title('一个符号周期的时域OFDM信号');%==========添加循环前缀与后缀==========================XX=zeros(symbols_per_carrier,IFFT_bin_length+GI+GIP);for k=1:symbols_per_carrier;for i=1:IFFT_bin_length;XX(k,i+GI)=signal_after_IFFT(k,i);endfor i=1:GI;XX(k,i)=signal_after_IFFT(k,i+IFFT_bin_length-GI);%添加循环前缀endfor j=1:GIP;XX(k,IFFT_bin_length+GI+j)=signal_after_IFFT(k,j);%添加循环后缀endendtime_wave_matrix_cp=XX;%添加了循环前缀与后缀的时域信号矩阵,此时一个OFDM符号长度为IFFT_bin_length+GI+GIPfigure(6);plot(0:length(time_wave_matrix_cp)-1,time_wave_matrix_cp(2,:));axis([0, 700, -0.2, 0.2]);grid on;ylabel('振幅');xlabel('时间');title('加入循环前缀后缀的OFDM波形');%==============OFDM符号加窗======================windowed_time_wave_matrix_cp=zeros(1,IFFT_bin_length+GI+GIP);for i = 1:symbols_per_carrierwindowed_time_wave_matrix_cp(i,:) = real(time_wave_matrix_cp(i,:)).*rcoswindow(beta,IFFT_bin_length+GI)';%加窗升余弦窗endfigure(7);plot(0:IFFT_bin_length-1+GI+GIP,windowed_time_wave_matrix_cp(2,:));axis([0, 700, -0.2, 0.2]);grid on;ylabel('振幅');xlabel('时间');title('加窗之后OFDM信号的波形');%========================生成发送信号======================== windowed_Tx_data=zeros(1,symbols_per_carrier*(IFFT_bin_length+GI)+GIP); windowed_Tx_data(1:IFFT_bin_length+GI+GIP)=windowed_time_wave_matrix_cp( 1,:);for i = 1:symbols_per_carrier-1 ;windowed_Tx_data((IFFT_bin_length+GI)*i+1:(IFFT_bin_length+GI)*(i+1)+GIP)= windowed_time_wave_matrix_cp(i+1,:);%循环后缀与循环前缀相叠加end%=======================并串转换=========================Tx_data_withoutwindow=reshape(time_wave_matrix_cp',(symbols_per_carrier)*(IFFT_bin_length+GI+GIP), 1)'; %不加窗,循环前缀与后缀不叠加的串行信号Tx_data=reshape(windowed_time_wave_matrix_cp',(symbols_per_carrier)*(IFFT_bi n_length+GI+GIP),1)';%加窗后,循环前缀与后缀不叠加的串行信号temp_time1 = (symbols_per_carrier)*(IFFT_bin_length+GI+GIP);%加窗后循环前缀与后缀不叠加发送总位数figure (8)subplot(2,1,1);plot(0:temp_time1-1,Tx_data);%循环前缀与后缀不叠加发送的信号波形axis([0, 8000, -0.4, 0.4]);grid onylabel('振幅');xlabel('时间');title('循环前后缀不叠加的OFDM信号')temp_time2 =symbols_per_carrier*(IFFT_bin_length+GI)+GIP;subplot(2,1,2);plot(0:temp_time2-1,windowed_Tx_data);%循环后缀与循环前缀相叠加发送信号波形axis([0, 8000, -0.4, 0.4]);grid onylabel('振幅'); xlabel('时间');title('循环前后缀叠加的OFDM信号')%=================未加窗发送信号频谱========================= symbols_per_average = ceil(symbols_per_carrier/5);avg_temp_time = (IFFT_bin_length+GI+GIP)*symbols_per_average;averages = floor(temp_time1/avg_temp_time);average_fft(1:avg_temp_time) = 0;for a = 0:(averages-1)subset_ofdm= Tx_data_withoutwindow (((a*avg_temp_time)+1):((a+1)*avg_temp_time)); subset_ofdm_f = abs(fft(subset_ofdm));average_fft = average_fft + (subset_ofdm_f/averages);endaverage_fft_log = 20*log10(average_fft);figure (9)subplot(2,1,1);plot((0:(avg_temp_time-1))/avg_temp_time, average_fft_log)hold onplot(0:1/IFFT_bin_length:1, -35, 'rd')grid onaxis([0 0.5 -40 max(average_fft_log)])ylabel('幅值(dB)')xlabel('归一化频率(0.5 = fs/2)')title('OFDM不加窗信号频谱')%===============加窗的发送信号频谱======================= symbols_per_average = ceil(symbols_per_carrier/5);%符号数的1/5avg_temp_time = (IFFT_bin_length+GI+GIP)*symbols_per_average;%点数averages = floor(temp_time1/avg_temp_time);average_fft(1:avg_temp_time) = 0;%分成5段for a = 0:(averages-1)subset_ofdm = Tx_data(((a*avg_temp_time)+1):((a+1)*avg_temp_time));%利用循环前缀后缀未叠加的串行加窗信号计算频谱subset_ofdm_f = abs(fft(subset_ofdm));%分段求频谱average_fft = average_fft + (subset_ofdm_f/averages);%总共的数据分为5段,分段进行FFT,平均相加endaverage_fft_log = 20*log10(average_fft);subplot(2,1,2)plot((0:(avg_temp_time-1))/avg_temp_time, average_fft_log)%归一化0/avg_temp_time : (avg_temp_time-1)/avg_temp_timehold onplot(0:1/IFFT_bin_length:1, -35, 'rd')grid onaxis([0 0.5 -40 max(average_fft_log)])ylabel('幅值(dB)')xlabel('归一化频率(0.5 = fs/2)')title('OFDM加窗信号频谱')%====================添加噪声=================================Tx_signal_power = var(windowed_Tx_data);%发送信号功率linear_SNR=10^(SNR/10);%线性信噪比noise_sigma=Tx_signal_power/linear_SNR;noise_scale_factor = sqrt(noise_sigma);%标准差sigmanoise=randn(1,((symbols_per_carrier)*(IFFT_bin_length+GI))+GIP)*noise_scale_fac tor;%产生正态分布噪声序列Rx_data=windowed_Tx_data +noise;%接收到的信号加噪声%============接收信号串并变换去除前缀与后缀===================Rx_data_matrix=zeros(symbols_per_carrier,IFFT_bin_length+GI+GIP);for i=1:symbols_per_carrier;Rx_data_matrix(i,:)=Rx_data(1,(i-1)*(IFFT_bin_length+GI)+1:i*(IFFT_bin_length+ GI)+GIP);%串并变换endRx_data_complex_matrix=Rx_data_matrix(:,GI+1:IFFT_bin_length+GI);%去除循环前缀与循环后缀,得到有用信号矩阵% OFDM解码%=================FFT变换=================================Y1=fft(Rx_data_complex_matrix,IFFT_bin_length,2);%OFDM解码即FFT变换Rx_carriers=Y1(:,carriers);%除去IFFT/FFT变换添加的0,选出映射的子载波Rx_phase =angle(Rx_carriers);%接收信号的相位Rx_mag = abs(Rx_carriers);%接收信号的幅度figure(10);polar(Rx_phase, Rx_mag,'bd');%极坐标中接收信号的星座图title('极坐标中接收信号的星座图')[M, N]=pol2cart(Rx_phase, Rx_mag);Rx_complex_carrier_matrix = complex(M, N);figure(11);plot(Rx_complex_carrier_matrix,'*r');%直角坐标系中接收信号的星座图title('直角坐标系中接收信号的星座图')axis([-4, 4, -4, 4]);grid on%====================并串转换,16qam解调====================== Rx_serial_complex_symbols=reshape(Rx_complex_carrier_matrix',size(Rx_complex _carrier_matrix, 1)*size(Rx_complex_carrier_matrix,2),1)' ;Rx_decoded_binary_symbols=demoduqam16(Rx_serial_complex_symbols); baseband_in = Rx_decoded_binary_symbols;figure(12);subplot(2,1,1);stem(baseband_out(1:100));title('输出待调制的二进制比特流')subplot(2,1,2);stem(baseband_in(1:100));title('接收解调后的二进制比特流')%================误码率计算=======================bit_errors=find(baseband_in ~=baseband_out);bit_error_count = size(bit_errors, 2)ber=bit_error_count/baseband_out_length。

相关文档
最新文档