⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ofdm1.m

📁 实现matlab仿真生成ofdm系统
💻 M
字号:
echo off
clear
clc
fprintf('OFDM_ADSL仿真\n');

%参数定义
fft_size=512;               
num_carriers=256;            %子载波数   导频号64  如何利用导频进行信道估计???
num_cp=32;                   %循环前缀长度  1/16*T
symbols_per_carrier=1000;     %符号数/子载波
bits_per_symbol=4;           %比特数/符号   采用16QAM调制解调
sync_delay=0;                %接收端处于理想同步状态
d=1;                         %控制QAM调制时星座点间的最小距离


snr=input('snr=');           %输入信噪比

%信号发射
baseband_out_length=num_carriers*symbols_per_carrier*bits_per_symbol;%发送的二进制序列的长度
baseband_out=randint(1,baseband_out_length);



%16QAM调制
symbol_qam=qam_modulation(baseband_out,bits_per_symbol,d);

%IFFT变换
%symbol_ifft=zeros(fft_size,symbols_per_carrier);
symbol_ifft_tem1=reshape(symbol_qam,num_carriers,symbols_per_carrier);     %串并变换
symbol_ifft_tem2=zeros(fft_size,symbols_per_carrier);
%构造共轭对称矩阵
symbol_ifft_tem2(1,:)=real(symbol_ifft_tem1(1,:));   
symbol_ifft_tem2(num_carriers+1,:)=imag(symbol_ifft_tem1(1,:));
symbol_ifft_tem2(2:num_carriers,:)=symbol_ifft_tem1(2:num_carriers,:);
symbol_ifft_tem2(num_carriers+2:fft_size,:)=flipdim(conj(symbol_ifft_tem1(2:num_carriers,:)),1);
symbol_ifft=ifft(symbol_ifft_tem2,fft_size,1);

%添加循环前缀
num_add_cp=fft_size+num_cp;
row_of_prefix=(fft_size-num_cp+1):fft_size;
symbols_add_cp=[symbol_ifft(row_of_prefix,:);symbol_ifft];

%通过信道(多径+awgn)
%symbol_channel=zeros(1,num_add_cp*symbols_per_carrier);
symbol_channel_tem1=symbols_add_cp(:).';                       %并串变换


%channel=[1 0 0 0 1/2 0 0 0 1/3];
channel=[1 0 0 0 0 0 0 0 0];   %理想信道
%channel=[1 1/2 1/3];


symbol_channel_tem2=filter(channel,1,symbol_channel_tem1);
symbol_channel=awgn(symbol_channel_tem2,snr,'measured');       %添加高斯白噪声
%symbol_channel=symbol_channel_tem2;%不加噪
 
%去除循环前缀
%symbol_de_cp=zeros(fft_size,symbols_per_carrier);
symbol_de_cp_tem=reshape(symbol_channel,num_add_cp,symbols_per_carrier);
symbol_de_cp=symbol_de_cp_tem((num_cp+1+sync_delay):num_add_cp+sync_delay,:);  %理想同步

%FFT变换
symbol_fft=fft(symbol_de_cp,fft_size,1);

%星座映射数据恢复
symbol_qam_ch(1,:)=symbol_fft(1,:)+j*symbol_fft(num_carriers+1,:);
symbol_qam_ch(2:num_carriers,:)=symbol_fft(2:num_carriers,:);
symbol_qam_ch=symbol_qam_ch(:).';

%16QAM解调
bits_deqam=qam_demodulation(symbol_qam_ch,bits_per_symbol,d);

%求误码率
[num,ber]=symerr(baseband_out,bits_deqam)



























⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -