




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、word%窗函数子程序,子程序名称:recoswindow.mfunctionrcosw=rcoswindow(beta,Ts)%输入参数:beta为升余弦窗关键系数,Ts为IFFT长度家循环前缀长度t=0:(1+beta)*Ts;rcosw=zeros(1,(1+beta)*Ts);%计算升余弦窗,共有三局部for i=1:beta*Ts; rcosw(i)=0.5+0.5*cos(pi+t(i)*pi/(beta*Ts);%计算升余弦窗的第一局部endrcosw(beta*Ts+1:Ts)=1;%计算升余弦窗低二局部for j=Ts:(1+beta)*Ts+1; rcosw(j-1)=0.
2、5+0.5*cos(t(j)-Ts)*pi/(beta*Ts); %计算升余弦窗第三局部endrcosw=rcosw'%转换为列矢量%将16QAM信号的解调子程序,子程序的名称:demoduqam16.mend.word%16QAM调制子程序,子程序名称为qam16.m%将二进制数目流转换为16QAM信号function complex_qam_data=qam16(bitdata)%输入参数:bitdata为二进制数码流%输出参数:complex_qam_data为16QAM副信号X1=reshape(bitdata,4,length(bitdata)/4)'%将二进制数码流
3、以4bitte分段d=1;%转换4bit二进制码为十进制码116,生态农场mapping映射表中的索引for i=1:length(bitdata)/4; for j=1:4 X1(i,j)=X1(i,j)*(2(4-j); end source(i,1)=1+sum(X1(i,:);end%16QAM映射表,改表中存放的16对,没对两个实数,表示星座位置mapping=-3*d 3*d;-d 3*d;d 3*d;3*d 3*d;-3*d d;-d d;d d;3*d d;-3*d -d;-d -d;d -d;3*d -d;-3*d -3*d;-d -3*d;d -3*d;3*d -3*d;f
4、or i=1:length(bitdata)/4 qam_data(i,:)=mapping(source(i),:);%数据映射endcomplex_qam_data=complex(qam_data(:,1),qam_data(:,2);%组合为负数形式,形成16QAM信号end.word%将16QAM信号的解调子程序,子程序的名称:demoduqam16.m%该子程序测试function demodu_bit_symble=demoduqam16(Rx_serial_complex_symbols)%输入参数为:Rx_serial_complex_symbols为接收端接收到的复16QA
5、M信号%输出参数:demodu_bit_symble为二进制数码流complex_symbols=reshape(Rx_serial_complex_symbols,length(Rx_serial_complex_symbols),1);d=1;mapping=-3*d 3*d;-d 3*d;d 3*d;3*d 3*d;-3*d d;-d d;d d;3*d d;-3*d -d;-d -d;d -d;3*d -d;-3*d -3*d;-d -3*d;d -3*d;3*d -3*d;complex_mapping=complex(mapping(:,1),mapping(:,2);%将数据映射
6、表中转换为16QAM信号,即3组合为复数;for i=1:length(Rx_serial_complex_symbols); for j=1:16; metrics(j)=abs(complex_symbols(i,1)-complex_mapping(j,1); end min_metric decode_symble(i)=min(metrics); %将接收数据与标准16QAM信号比,找到差最小的,将其对应恢复成标准的16QAM信号enddecode_bit_symble=de2bi(decode_symble-1)','left-msb');%将16QAM转为
7、二进制demodu_bit_symble=reshape(decode_bit_symble',1,length(Rx_serial_complex_symbols)*4);%转换为一行end.wordbaseband_out_length=16000;rand('twister',0);baseband_out=round(rand(1,baseband_out_length);%产生16000bit待传输的二进制比特流。这里存放的是发送的二进制信号与后面解调后的二进制信号比拟,可以计算误码率。%16QAM调制病绘制星座图。complex_carrier_matrix
8、=qam16(baseband_out);figure(1);plot(complex_carrier_matrix,'*r');%绘制16QAM星座图title('16QAM调制后星座图');grid on ;.word%16QAM调制子程序,子程序名称为qam16.m%将二进制数目流转换为16QAM信号%QAM16测试%输入参数:bitdata为二进制数码流%输出参数:complex_qam_data为16QAM复信号close all;clear all;baseband_out_length=16000;rand('twister',0)
9、;bitdata=round(rand(1,baseband_out_length);complex_carrier_matrix=qam16(bitdata);% X1=reshape(bitdata,4,length(bitdata)/4)'%将二进制数码流以4bite分段% d=1;% %转换4bit二进制码为十进制码116,生成mapping映射表中的索引% for i=1:length(bitdata)/4;% for j=1:4% X1(i,j)=X1(i,j)*(2(4-j);% end% source(i,1)=1+sum(X1(i,:);% end% %16QAM映射
10、表,该表中存放的16对,没对两个实数,表示星座位置% mapping=-3*d 3*d;-d 3*d;d 3*d;3*d 3*d;-3*d d;-d d;d d;3*d d;-3*d -d;-d -d;d -d;3*d -d;-3*d -3*d;-d -3*d;d -3*d;3*d -3*d;% for i=1:length(bitdata)/4% qam_data(i,:)=mapping(source(i),:);%数据映射% end% complex_qam_data=complex(qam_data(:,1),qam_data(:,2);% %组合为负数形式,形成16QAM信号% fi
11、gure(1);% plot(complex_qam_data,'*r');%绘制16QAM星座图% title('16QAM调制后星座图');% grid on ;figure(1);plot(complex_carrier_matrix,'*r');%绘制16QAM星座图title('16QAM调制后星座图');grid on ;.word% 程序功能% 1通过对OFDM信号各个子载波赋共轭对称的数据产生一个实OFDM符号。% 2给OFDM符号加循环前缀与循环后缀% 3给OFDM符号加窗。在程序中参加的是升余弦窗,可以通过改变
12、升余弦窗的滚降系数,观察参加不同升余弦窗对OFDM信号频谱的的影响% 4信道采用嘉兴高斯白噪声信道。可以通过改变信噪比来改变信道环境,从而在接受端通过误码率或是星座图观察信道对OFDM信号传输的影响% 5去除循环前缀与循环后缀,对OFDM信号进行解调% 程序代码:clear all;close all;carrier_count=200;%这个程序中OFDM子载波个数为512,其中400即 carrier_count *2为数据符号,其余赋0值symbols_per_carrier=20;%每个子载波上的符号数,在这里即是OFDM符号的个数bits_per_symbol=4;%OFDM符号的每
13、个子载波上传输的比特数,4bit通常采用的16QAM调制IFFT_bin_length=512;%FFT的长度,也即一个OFDM符号的子载波个数;PrefixRatio=1/4;%循环前缀的比值,循环前缀与OFDM符号长度的壁纸,通常在1/61/4之间GI=PrefixRatio * (IFFT_bin_length);%保护间隔的长度,这里为128beta=1/32;%升余弦窗的滚降系数GIP=beta*(IFFT_bin_length+GI);%循环后缀的长度,这里为20;SNR=16;%本程序考虑加性高斯白噪声信道,这里信噪比为30db%=OFDM信号产生=baseband_out_le
14、ngth=carrier_count*symbols_per_carrier * bits_per_symbol;%计算传输数据总的比特数,为200*20*4%bits=16000bits。16000bits构成20个OFDM符号,每个OFDM符号200个子载波,每个子载波传输4bit信息carriers=(1:carrier_count)+(floor(IFFT_bin_length/4)-floor(carrier_count/2);%计算OFDM符号的在载波的序号,carriers 中存放的序号是29228;conjugate_carriers=IFFT_bin_length-carri
15、ers +2;% conjugate_carriers=IFFT_bin_length-carriers -2;%=这个序号有问题%计算OFDM符号子载波的序号,conjugate_carriers中存放的序号是282481;rand('twister',0);baseband_out=round(rand(1,baseband_out_length);%产生16000bit待传输的二进制比特流。这里存放的是发送的二进制信号与后面解调后的二进制信号比拟,可以计算误码率。%16QAM调制病绘制星座图。complex_carrier_matrix=qam16(baseband_ou
16、t);%调用子程序qam16进行16QAM调制。将base_band中的二进制比特流,每4bit转换为一个16QAM信号,即将二进制比特流每4bit转换为-3-3j,-3+3j,3-3j,3+3j,%-1-3j,-1+3j,1-3j,1+3j,-3-j,-3+j,3-j,3+j,-1-j,-1+j,1-j,1+j中的一个。转换后complex_carrier_matrix为1*4000矩阵。complex_carrier_matrix=reshape(complex_carrier_matrix',carrier_count,symbols_per_carrier);%转换comple
17、x_carrier_matrix中的数据为carrier_coun6t*symbols_per_carrier矩阵,这里为20*200矩阵。figure(1);plot(complex_carrier_matrix,'*r');%绘制16QAM星座图title('16QAM调制后星座图');grid on ;%IFFT,即进行OFDM调制IFFT_modulation=zeros(symbols_per_carrier,IFFT_bin_length);%将symbols_per_carrier*IFFT_bin_length矩阵赋0值,这里讲20*512矩阵赋
18、0值。这里512是IFFT的长度,也是OFDM符号的子载波个数%这里明显有问题,以下矫正% IFFT_modulation(:,carriers)=complex_carrier_matrix;IFFT_modulation(:,carriers)=complex_carrier_matrix'%将20*200的complex_carrier_matrix的数据赋给IFFT_modulation的第29228列,即给512个子载波中的第29229个子载波赋值% IFFT_modulation(:,conjugate_carriers)=conj(complex_carrier_matr
19、ix);IFFT_modulation(:,conjugate_carriers)=conj(complex_carrier_matrix');%将20*200的complex_carrier_matrix的数据付给512个子载波中的第282481个子载波,这段程序构造了512个在载波的OFDM符号,并且各个%子载波上的数据是共轭对称的。这样做的目的是经过IFFT后形成的OFDM符号均为实数。另外,在512个子载波中,仅有400个子载波为数据,其余为%0值,相当于补零。补零的目的是通常IFFT的长度应该为2的证书次幂。signal_after_IFFT=ifft(IFFT_modula
20、tion,IFFT_bin_length,2);%IFFT实现OFDM调制time_wave_matrix=signal_after_IFFT;figure(2);plot(0:IFFT_bin_length-1,time_wave_matrix(2,:);%画一个OFDM信号的时域表现axis(0,512,-0.4,0.4);grid on;ylabel('Amplitude');xlabel('Time');title('OFDM Time Signal,One Symbol Period');%添加循环前缀与循环后缀XX=zeros(sym
21、bols_per_carrier,IFFT_bin_length +GI+GIP);%IFFT_bin_length+GI+GIP为OFDM,循环前缀,循环后缀长度之和;for k=1:symbols_per_carrier; for i=1:IFFT_bin_length; XX(k,i+GI)=signal_after_IFFT(k,i); end for i=1:GI XX(k,i)=signal_after_IFFT(k,i+IFFT_bin_length-GI); %添加循环前缀 end for j=1:GIP XX(k,IFFT_bin_length+GI+j)=signal_af
22、ter_IFFT(k,j); %添加循环后缀 endendtime_wave_matrix_cp=XX;%带循环前缀和循环后缀的OFDM符号figure(3)plot(0:length(time_wave_matrix_cp)-1,time_wave_matrix_cp(2,:);%画带循环前缀与循环后缀的OFDM信号的时域波形、axis(0,600,-0.3,0.3);grid on ;ylabel('Ampelitude');xlabel('Time');title('OFDM Time Signal with CP,One Symbol Perio
23、d');%OFDM符号加窗windowed_time_wave_matrix_cp=zeros(1,IFFT_bin_length+GI+GIP);for i=1:symbols_per_carrier windowed_time_wave_matrix_cp(i,:)=real(time_wave_matrix_cp(i,:).*rcoswindow(beta,IFFT_bin_length+GI)' %调用rcoswindow产生升余弦窗,对待循环前缀与循环后缀的OFDM符号加窗endfigure(4);plot(0:IFFT_bin_length-1+GI+GIP,win
24、dowed_time_wave_matrix_cp(2,:);%画加窗后的OFDM符号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);%注意并串转换后数据的长度为symbols_per_
25、carrier*(IFFT_bin_length%+GI)+GIP,这里考虑了循环前缀与循环后缀的重叠相加windowed_Tx_data(1:IFFT_bin_length+GI+GIP)=windowed_time_wave_matrix_cp(1,:);%符第一个加窗带循环前缀后缀的OFDM符号值windowed_Tx_data,即发送串行数据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_m
26、atrix_cp(i+1,:); %并串转换,循环前缀与循环后缀重叠相加endTx_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)'%加窗数据,单按照循环前缀与循环后缀不重叠相加进行并串转换。此时数据长度为
27、(symbols_per_carrier)*(IFFT_bin_length+GI+GIP)temp_time1=(symbols_per_carrier)*(IFFT_bin_length+GI+GIP);%加窗,循环前缀与循环后缀不重叠数据长度,纪委发送的总数据比特数figure(5);subplot(2,1,1);plot(0:temp_time1-1,Tx_data);%画循环前缀与循环后缀不顾从谍相加OFDM信号的时域波形。grid on ylabel('Amplitude(volts)')xlabel('Time(samples)')title(
28、39;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);%画循环前缀与循环后缀重叠相加OFDM信号的时域波形grid onylabel('Amplitude(volts)')xlabel('Time (samples)')title('OFDM Time Signal')%未加窗发送信号频谱%对发
29、送数据分段,分段计算频谱,取平均值作为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);%将发送数据分5段,每段数据长度为avg_temp_timeaverage_fft(1:avg_temp_time)=0;%存放平均后的OFDM信号的谱,先置0for a=0:(averages-1) subset_ofdm=Tx_data_wit
30、houtwindow(a*avg_temp_time)+1):(a+1)*avg_temp_time);%分段 subset_ofdm_f=abs(fft(subset_ofdm);%对分段后的OFDM信号计算频谱 average_fft=average_fft+(subset_ofdm_f/averages);%取平均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);%画未加窗OFDM符号
31、对数平均谱hold ongrid on axis(0 0.5 -20 max(average_fft_log)ylabel('Magnitude(dB)')xlabel('Normalized Frequency(0.5=fs/2)')title('OFDM Signal Specturm')%计算加窗OFDM信号的频谱 %这段程序功能与上段程序类似,不同之处在于这段程序是对加窗OFDM信号进行分段计算频谱,再取平均symbols_per_average=ceil(symbols_per_carrier/5);avg_temp_time=(IFF
32、T_bin_length+GI+GIP)*symbols_per_average;averages=floor(temp_time1/avg_temp_time);%将发送数据分5段,每段数据长度为avg_temp_timeaverage_fft(1:avg_temp_time)=0;%存放平均后的OFDM信号的谱,先置0for 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);%对分段后的OFDM信号计算频谱
33、average_fft=average_fft+(subset_ofdm_f/averages);%取平均endaverage_fft_log=20*log10(average_fft);%求对数平均谱subplot(2,1,2)plot(0:(avg_temp_time-1)/avg_temp_time,average_fft_log);%画加窗OFDM符号对数平均谱hold ongrid on axis(0 0.5 -20 max(average_fft_log)ylabel('Magnitude(dB)')xlabel('Normalized Frequency(
34、0.5=fs/2)')title('Windowed OFDM Signal Specturm')%=经过加性高斯白噪声信道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);%计算标准差noise=randn(1,(symbols_per_carrier)*(IFFT_bin_length+GI)+GIP)*noise_scale_factor;%产生功率为noise_scale_factor高斯噪声Rx_data=windowed_Tx_data+noise;%在发送数据上加噪声,相当于OFDM信号经过加性高斯白噪声信道%=OFDM解调=Rx_data_matrix=zeros(symbols_per_carrier,IFFT_bin_lengt
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 材料力学与智能材料性能应用拓展研究开发创新重点基础知识点
- 安全生产火灾应急预案评估报告(3篇)
- 叉车充电区火灾应急预案(3篇)
- 信息处理技术员实务模拟试题及答案
- 信息处理技术员职业技能要求试题及答案
- 2025年软件设计师考试变化动态分析试题及答案
- 2025年企业风险监控体系试题及答案
- 深入探讨软件设计的伦理与法律问题试题及答案
- 企业社会责任与战略考题及答案
- 学习使用敏捷工具管理项目进度试题及答案
- 建行个人经营性贷款合同
- 中国游戏发展史课件
- GB/T 2982-2024工业车辆充气轮胎规格、尺寸、气压与负荷
- 史记人物课件教学课件
- 走进泰国-课件
- 一站到底课件
- 西安中建一局装修合同模板
- 社会团体财务报表
- DB34∕T 3468-2019 民用建筑楼面保温隔声工程技术规程
- iso220002024食品安全管理体系标准
- 2024年秋新冀教版三年级上册英语教学课件 U3L3
评论
0/150
提交评论