基于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)等。

基于matlab ofdm通信系统仿真代码

基于matlab ofdm通信系统仿真代码

基于matlab ofdm通信系统仿真代码
基于MATLAB OFDM通信系统仿真代码是一种应用在无线通信领域的高
效的通信技术。

OFDM(正交分频多载波)技术是一种高效的技术,它
能够在有限的信道容量内传输大量的数据,同时也能抵御多径衰减和
多路径效应。

此外,OFDM还可以抵抗非线性干扰和伪噪声,从而提高
系统的可靠性和稳定性。

MATLAB OFDM通信系统仿真代码可以帮助我们快速验证一个OFDM系统的性能,从而帮助我们更好地理解OFDM技术
背后的原理和技术。

MATLAB OFDM通信系统仿真代码由信道模拟、OFDM调制和解调制的子
模块组成,其中每个子模块都可以通过MATLAB编程实现。

首先,我们
需要定义一个简单的信道函数,以模拟实际信道的衰减和多路径效应,然后将信号传输给OFDM调制模块,它将信号转换成OFDM调制的多载
波信号。

接着,多载波信号被发射到信道中,经过信道后,经过OFDM
解调制模块处理,得到恢复后的信号,再经过信道衰减模拟得到最终
信号,完成仿真。

通过使用MATLAB OFDM通信系统仿真代码,我们可以更有效地对OFDM
技术进行仿真评估,同时也可以获得更为准确、直观的仿真结果。

此外,MATLAB OFDM通信系统仿真代码还可以帮助我们了解OFDM技术的
具体实施方法,为实际开发工作提供有效的技术支持。

QPSK和16QAM调制下MIMO-OFDM系统Matlab仿真实现

QPSK和16QAM调制下MIMO-OFDM系统Matlab仿真实现

QPSK和16QAM调制下MIMO-OFDM系统Matlab仿真实现1. 引言1.1 背景介绍MIMO(Multiple Input Multiple Output)技术和OFDM (Orthogonal Frequency Division Multiplexing)技术是目前无线通信领域中常用的关键技术。

MIMO技术通过在传输端和接收端利用多个天线进行数据传输,从而提高系统的传输效率和抗干扰性能。

而OFDM技术则利用频谱分割和并行传输的方式,提高信道传输效率和抗多径干扰的能力。

本文将结合QPSK(Quadrature Phase Shift Keying)调制和16QAM(Quadrature Amplitude Modulation)调制两种常见调制方式,设计并实现MIMO-OFDM系统。

QPSK调制使用4个相位点来表示传输信号,适用于简单的调制场景;而16QAM调制则利用16个不同的信号点表示传输信号,可以提高传输速率和频谱利用效率。

通过Matlab仿真实现这两种调制方式下的MIMO-OFDM系统,并进行性能分析和实验结果展示,旨在探究不同调制方式对系统性能的影响,为未来的无线通信系统设计提供参考和借鉴。

1.2 研究意义研究QPSK和16QAM调制下MIMO-OFDM系统的意义在于探索该组合对系统性能的影响,进一步优化系统设计和参数配置。

通过比较不同调制方式下MIMO-OFDM系统的性能表现,可以为实际通信系统的部署提供重要参考依据。

研究还有助于深化对多址接入、信道编解码等关键技术的理解,并为提高系统的可靠性、稳定性和数据传输速率提供技术支持。

探究QPSK和16QAM调制下MIMO-OFDM系统的研究意义重大,不仅可以促进通信技术的进步,还可以为实际应用中的无线通信系统提供更加稳定和高效的解决方案。

1.3 研究目的研究目的:通过对QPSK和16QAM调制下MIMO-OFDM系统的设计和仿真实现,旨在探究在多输入多输出和正交频分复用技术的基础上,如何提高系统的性能和可靠性。

基于MATLAB的OFMD仿真实验-OFDM基础1

基于MATLAB的OFMD仿真实验-OFDM基础1

Frequency Selective Fading
Delay spread Tm is much larger than symbol duration T
Inter-symbol interference (ISI)
同一个信息的信号由于到达目的地的路径不同,导致了到达 时间不同。也就是接收端在时间1收到第一条路径发来的该信 息,可能在时间4收到2条路径发来的该信息。假设这个信息有 这两条到达路径,那么接收端本来应该在时间1接收完所有关 于该信息的信号,结果却在时间4之后才全部收完。
Multipath channel
In wireless telecommunications, multipath is the propagation phenomenon that result in radio signals reaching the receiving antenna by two or more paths.
相干时间和相干带宽都是描述信道特性的参数,当两个发射 信号的频率间隔小于信道的相干带宽,那么这两个经过信道后 的,受到的信道传输函数是相似的,由于通常的发射信号不是 单一频率的,即一路信号也是占有一定带宽的,如果,这路信 号的带宽小于相干带宽,那么它整个信号受到信道的传输函数 是相似的,即信道对信号而言是平坦特性的,非频率选择性衰 落的。
(TM / max:最大(多径)时延扩展)
BC 1 TM
信道扩展主要可以分为三方面:多径(时延)扩展(delay spread); 多普勒扩展;角度扩展。
相干带宽(coherence bandwidth) 是描述时延扩展的:相干带宽是 表征多径信道特性的一个重要参数,它指某一特定的频率范围,在 该频率范围内任意两个频率分量都具有很强的幅度相关性。即: 在 相干带宽范围内,多径信道具有恒定的增益和线性相位。通常, 相干带宽Bc近似等于最大多径s), is roughly inversely

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的仿真率,所以适用于所有的应用系统。

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

基于matlab ofdm通信系统仿真代码

基于matlab ofdm通信系统仿真代码

基于matlab ofdm通信系统仿真代码
OFDM通信系统仿真模拟是以正交频分复用技术(OFDM)作为主要的信号传输技术,在实现对无线信号的检测、编码、调制、叠加噤等功
能时可以通过Matlab等软件来进行模拟仿真。

仿真工作首先建立OFDM系统的信号模型,OFDM的原理是通过将
一个OFDM信号分成多个相互正交的子载波,并在每个子载波上实现移相、移幅调制,从而在信道上传输多路符号。

由于子载波之间相互正交,故可以实现多路数据同时传输,从而提高数据传输率和传输容量。

仿真建模过程中,首先根据要求确定可用的OFDM子载波数目以
及子载波的调制方式。

然后设定数据信道的配置,选择需要用到的信
道编码,这些元素将影响OFDM系统的信噪比和数据传输率。

最后定义
噪声接收,模拟噪声叠加,并实现对接收端信号的处理,存储等步骤。

通过上述步骤,系统建模工作就完成了。

之后可以使用Matlab
对模型进行仿真,看看OFDM系统表现如何。

仿真结果可以以图像的形
式显示出来,从而更好地理解传输的性能,从而有利于调整系统参数,提高系统的效率和可靠性。

MATLAB实验OFDM误码率仿真(AWGN)

MATLAB实验OFDM误码率仿真(AWGN)

和梳状导频两种,本次实验中插入的是块状导频,所谓的块状分布就是指导频在时域周期 性的分配给 OFDM 符号,这种导频分布模式特别适用于慢衰落的无线信道,由于训练符号包 含了所有的导频,所以在频域就不需要插值,因此这种导频分布模式对频率选择性衰落相 对不敏感。 4、 IFFT 和插入保护间隔: OFDM 信号的调制表达式和信号的 IFFT 的表达式相吻合, 所以 OFDM 信号的调制可以通过 IFFT 来实现。 由于无线信道存在多径时延现象, 从而会产生码间干扰, 为了克服这种影响,可以再每个 OFDM 符号前面加入一段循环前缀,理论上只要循环前缀的 长度大于最大时延扩展,则能克服多径时延,从而消除了码间干扰。加入循环前缀之后再 对信号进行并串转换,此时得到的信号就是待发送信号。 5、信道建模:得到的待发送信号要通过信道到达接收端,因此在理论研究中要进行信道建 模,从而模拟信号真实的传播环境。本次实验中涉及到的信道为 AWGN 信道和瑞利衰落信道 信号经过信道后要经历的处理大致为发射端的逆过程,与发射端不同的是,在接收端存在 信道估计。 6、信道估计:无线信道的基本特性就是存在不稳定性,信号经过信道后可能会产生多径时 延、多普勒频移、相偏等现象。因此信号经过信道后会产生严重的失真,如果在接收端我 们知道信道的特性,也就是说,我们知道信道对信号的影响,那么我们就能将信道对信号 的影响去除掉。而在接收端信道的特性是通过信道估计来得到的。信道估计一般可以分为 盲信道估计和非盲信道估计,前者即通过接收信号的统计特性来得到信道的特性,这种方 法计算比较复杂,而且精度不高;基于训练序列的信道估计即为在发送端发送一些已知的 序列,接收端利用这些已知序列的接收信号来对信道进行估计,传统的估计方法有 LS 算法 和 MMSE 算法。
四、实验报告要求

毕业设计86基于Matlab的OFDM系统仿真

毕业设计86基于Matlab的OFDM系统仿真

第1章绪论正交频分复用(OFDM, Orthogonal Frequency Division Multiplexing) 是一种特殊的多载波方案,它可以被看作一种调制技术,也可以被当作是一种复用技术。

1.1研究OFDM的意义及背景现代通信的发展是爆炸式的。

从电报、电话到今天的移动电话、互联网,人们从中享受了前所未有的便利和高效率。

从有线到无线是一个飞跃,从完成单一的话音业务到完成视频、音频、图像和数据相结合的综合业务功能更是一个大的飞跃。

在今天,人们获得了各种各样的通信服务,例如,固定电话、室外的移动电话的语音通话服务,有线网络的上百兆bit的信息交互。

但是通信服务的内容和质量还远不能令人满意,现有几十Kbps传输能力的无线通信系统在承载多媒体应用和大量的数据通信方面力不从心:现有的通信标准未能全球统一,使得存在着跨区的通信障碍;另一方面,从资源角度看,现在使用的通信系统的频谱利用率较低,急需高效的新一代通信系统的进入应用。

目前,3G的通信系统己经进入商用,但是其传输速率最大只有2Mbps,仍然有多个标准,在与互联网融合方面也考虑不多。

这些决定了3G通信系统只是一个对现有移动通信系统速度和能力的提高,而不是一个全球统一的无线宽带多媒体通信系统。

因此,在全世界范围内,人们对宽带通信正在进行着更广泛深入的研究]4[。

正交频分复用(OFDM, Orthogonal Frequency Division Multiplexing) 是一种特殊的多载波方案,它可以被看作一种调制技术,也可以被当作是一种复用技术。

选择OFDM的一个主要原因在于该系统能够很好地对抗频率选择性衰落或窄带干扰。

正交频分复用(OFDM)最早起源于20世纪50年代中期,在60年代就已经形成恶劣使用并行数据传输和频分复用的概念。

1970年1月首次公开发表了有关OFDM的专利。

在传统的并行数据传输系统中,整个信号频段被划分为N个相互不重叠的频率子信道。

ofdm的matlab例程

ofdm的matlab例程

OFDM(Orthogonal Frequency Division Multiplexing)是一种无线通信技术OFDM (Orthogonal Frequency Division Multiplexing)是一种无线通信技术,它将多个数据流映射到不同的子载波上,从而实现高带宽和低干扰的传输。

以下是一个简单的OFDM MATLAB例程:```matlab参数设置N = 1024; 符号数M = 8; 子载波数SNR = 10; 信噪比(dB)data_length = 1000; 数据长度生成随机数据data = randi([0, 1], 1, data_length);初始化OFDM信号ofdm_signal = zeros(1, N);将数据映射到子载波上for i = 1:data_lengthsymbol_index = mod(i-1, M) + 1;ofdm_signal(symbol_index) = data(i);end添加循环前缀cp = randi([0, 1], 1, M);ofdm_signal = [cp, ofdm_signal];添加频偏补偿码pilot_sequence = randi([0, 1], 1, M);pilot_symbols = zeros(1, N);pilot_symbols(mod(1:N, M) + 1) = pilot_sequence;生成OFDM调制信号modulated_signal = ifft(fft(ofdm_signal).*fft(pilot_symbols));添加高斯白噪声noise = awgn(modulated_signal, SNR, 'measured');接收信号received_signal = ifft(fft(noise).*fft(pilot_symbols));received_signal = received_signal(M+1:end);去除循环前缀received_signal = received_signal(cp+1:end);解调并提取数据demodulated_signal = fft(received_signal).*fft(pilot_symbols);demodulated_data = real(ifft(demodulated_signal));计算误比特率error_bits = sum(abs(data - demodulated_data));ber = error_bits / data_length;disp(['误比特率:', num2str(ber)]);```这个例程首先生成随机数据,然后将其映射到子载波上,接着添加循环前缀、频偏补偿码和高斯白噪声。

OFDM实验报告

OFDM实验报告

OFDM课程实验报告课程名称:基于OFDM调制解调传输的通信系统.实验条件:MATLAB,SIMULINK实验设计思路:尽量保证各模块条理清晰,能很方便的从各子模块的名称中就可以很直观的理解该子模块是干什么用的,将同一个功能的元件打包封装成子系统,这样可以很方便的进行修改和以后的阅读。

第一章--------------前言,绪论OFDM的全称为Orthogonal Frequency Division Multiplexing,意为正交频分复用。

OFDM的思想可以追溯到20世纪60年代,当时人们对多载波调制做了许多理论上的工作,论证了在存在符号间干扰的带限信道上采用多载波调制可以优化系统的传输性能;1970年1月,有关OFDM的专利被首次公开发表;1971年,Weinstein和Ebert在IEEE杂志上发表了用离散傅里叶变换实现多载波调制的方法;20世纪80年代,人们对多载波调制在高速调制解调器、数字移动通信等领域中的应用进行了较为深入的研究,但是由于当时技术条件的限制,多载波调制没有得到广泛的应用;进入20世纪90年代,由于数字信号处理技术和大规模集成电路技术的进步,OFDM技术在高速数据传输领域受到了人们的广泛关注。

现在OFDM已经在欧洲的数字音视频广播(如DAB和DVB)、欧洲和北美的高速无线局域网系统(如HIPERLAN2、IEEE 802.11a)、高比特率数字用户线(如ADSL、VDSL)以及电力线载波通信(PLC)中得到了广泛的应用。

OFDM通信技术是多载波传输技术的典型代表。

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

OFDM是多载波传输方案的实现方式之一,利用快速傅里叶逆变换(IFFT,Inverse Fast Fourier Transform)和快速傅里叶变换(FFT,Fast Fourier Transform)来分别实现调制和解调,是实现复杂度最低、应用最广的一种多载波传输方案。

OFDM原理及matlab代码仿真

OFDM原理及matlab代码仿真

OFDM原理及matlab代码仿真我也不明⽩OFDM是个咋回事OFDM⼀,OFDM的原理OFDM(Orthogonal Frequency Division Multiplexing)即正交频分复⽤技术,实际上OFDM是MCM(Multi Carrier Modulation),多载波调制的⼀种。

通过频分复⽤实现⾼速串⾏数据的并⾏传输, 它具有较好的抗多径衰弱的能⼒,能够⽀持多⽤户接⼊。

OFDM的主要思想是将信道分成N个⼦信道。

每个⼦信道包含⼀个⼦载波,不同的⼦载波之间相互正交。

实现时,将⼀路⾼速串⾏输⼊的数据信号流转换成N路并⾏的低速⼦数据流,调制到每个⼦载波上进⾏传输。

(类似于CDMA?)那么什么是正交呢?上图给出了详细的定义:两个波形在⼀段时间内内积为零,则他们在这段时间内正交。

那平时我们都知道sin(x)和cos(x)正交,他们在⼀个周期内的乘积为0。

如图sin和cos相乘,最后他们的乘积在⼀个周期内积分为0,则sin和cos在这段时间内是正交的。

那么同理,sin(x)和sin(2x)呢?从图上可以看到,sin(x)和sin(2x)的乘积在⼀个周期内的积分也为零,所以sin(x)和sin(2x)在这段时间内也是正交的。

那现在我们知道sin和cos是正交的,sin(x)和sin(2x)也是正交的。

“OFDM的主要思想是将信道分成N个⼦信道。

每个⼦信道包含⼀个⼦载波,不同的⼦载波之间相互正交。

”,那么在实现时将不同频率的相互正交的信号进⾏调制,最后再加和发送(所以觉得和CMDA类似,不得不说通信这⾥正交才是核⼼啊)。

(上⾯的图是从上截的)实现时,我们先对不同的信道不同频率的信号进⾏调制,再将其加和,很明显这种清楚易懂的⽅法实现起来对硬件的要求⽐较⾼,所以我们能不能找到⼀条更容易实现的⽅法。

博客园这个都不能写公式的吗.....从上⾯可以看出,将信号表⽰为指数形式,OFDM就可以采⽤FFT进⾏调制,⽽现实中DSP芯⽚技术已经成熟,可以采⽤相较于加法器⽽⾔速度更快的数字芯⽚。

ofdm解调matlab代码

ofdm解调matlab代码
在Matlab中实现OFDM解调的基本代码如下所示:
%假设接收到的信号为receivedSignal,其长度为N
N = length(receivedSignal);
%假设使用的子载波数量为M
Hale Waihona Puke M = 64;%生成一个长度为M的IFFT矩阵
IFFTMatrix = ifft(ones(1, M), M);
%对接收到的信号进行解调
demodulatedSignal = IFFTMatrix * receivedSignal;
%输出解调后的信号
disp(demodulatedSignal);
这个代码实现了基本的OFDM解调过程,即将接收到的信号通过一个逆快速傅里叶变换(IFFT)矩阵解调为原始数据信号。需要注意的是,这只是一个基本的示例,实际的OFDM解调过程可能需要进行同步、信道估计和均衡等操作。此外,对于不同的系统参数(如子载波数量、调制方式等),IFFT矩阵的大小和生成方式也可能不同。
  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。

相关文档
最新文档