




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
OFDM简单实现%a_run_design.m文件 setup%系统设置OFDM%OFDM调制方式Analysis%OFDM的收发数据及误码1setup %初始化部分% setupdisp( ), disp(-)disp(Simulation Setup)% OFDM Setup -fft_size = 128% should be a power of 2 for fast computation% more points = more time domain samples (smoother & more cycles)num_carriers = 32% should be 60disp(strcat(Time for OFDM simulation=, num2str(OFDM_simulation_time/60), minutes.);elsedisp(strcat(Time for OFDM simulation=, num2str(OFDM_simulation_time), seconds.);end3.1发送% txdisp(Transmitting)read %read original datadata_in_pol = bin2pol(data_in); % Converts binary data to polar datatx_chunk %convert polar data into chunks. % perform ifft to create time domain waveform representing datatd_sets = zeros(num_chunks,fft_size);for i = 1:num_chunkstd_sets(i,1:fft_size) = real(ifft(spaced_chunks(i,1:fft_size);endtx_dechunk % Construct signal to transmit by placing time domain sets in series3.1.1 % tx_chunk %双极性数组转化成OFDM字符串,串并子程序data_length = length(data_in_pol) %number of symbols in original inputnum_chunks = ceil(data_length/(2*num_carriers)%2 data on each carrier (real and imaginary)r = rem(data_length,2*num_carriers)if r = 0for i = 1:num_carriers*2-rdata_in_pol(data_length+i) = 0;%pad input with zeros to complete last data setend%speed improve possibleend% break data into chunkschunks = zeros(num_chunks,num_carriers);% for speedfor i = 1:num_chunks% *chunk donefor k = 1:num_carrierschunks(i,k) = data_in_pol(2*num_carriers*(i-1)+k) + data_in_pol(2*num_carriers*(i-1)+k+num_carriers)*j;endendchunks% Padding chunks with zeros so num_carriers and fft_size are compatible% Once compatible, further spacing is simplifiednum_desired_carriers = num_carriers;num_zeros = 0;thinking = 1;while thinking = 1 % Continue if num_carriers and fft_size are not compatibleif rem(fft_size/2,num_desired_carriers) = 0thinking = 0;elsenum_desired_carriers = num_desired_carriers + 1;num_zeros = num_zeros + 1;endendpadded_chunks = zeros(num_chunks,num_carriers + num_zeros); % for speedpadded_chunks(1:num_chunks,num_zeros + 1:num_carriers + num_zeros) = chunks;%compute zeros_betweenzeros_between = (fft_size/2) - (num_carriers + num_zeros)/(num_carriers + num_zeros);spaced_chunks = zeros(num_chunks,fft_size); % for speed - extra room for folding later%add zeros_betweeni = 1;for k = zeros_between +1:zeros_between +1:fft_size/2spaced_chunks(1:num_chunks,k) = padded_chunks(1:num_chunks,i);i = i+1;end% folding data to produce an odd function for ifft inputfor i = 1:num_chunks% Note: index = 1 is actually DC freq for ifft - it does not get copied over y-axisspaced_chunks(i,fft_size:-1:fft_size/2+2) = conj(spaced_chunks(i,2:fft_size/2);end3.1.2 tx_dechunk并串子程序% tx_dechunk% Construct signal to transmit by placing time domain sets in seriesxmit = zeros(1,num_chunks*fft_size);for i = 1:num_chunksfor k = 1:fft_sizexmit(k + (i-1)*fft_size) = td_sets(i,k);endend3.2 %ch.m% chrecv = xmit;% channel is applied to recv, dont modify transmitted dataif channel_on = 1disp(Simulating Channel)norm_factor = max(abs(recv);% Normalize all data before applyingrecv = (1/norm_factor) * recv;% channel for a fair comparisonch_clipping %clipp datach_multipath %ch_noise %recv = norm_factor * recv;% Restore data magnitude for proper decodingend3.2.1 %ch_clipping.m% ch_clippingfor i = 1:length(recv)if recv(i) clip_levelrecv(i) = clip_level;endif recv(i) recv_padded_chunksrecv_padded_chunks = zeros(num_chunks, num_carriers+num_zeros);i = 1;for k = zeros_between +1:zeros_between +1:fft_size/2recv_padded_chunks(1:num_chunks,i) = recv_spaced_chunks(1:num_chunks,k);i = i+1;end% take out num_zeros from padded chunks - recv_chunksrecv_chunks = zeros(num_chunks, num_carriers);recv_chunks = recv_padded_chunks(1:num_chunks, num_zeros+1:num_carriers+num_zeros);% Recover bit stream by placing reconstructed frequency domain data in seriesrecv_dechunked = zeros(1, num_chunks*num_carriers);for i = 1:num_chunksfor k = 1:num_carriersrecv_dechunked(k + (i-1)*num_carriers*2) = real(recv_chunks(i,k);recv_dechunked(k + (i-1)*num_carriers*2 + num_carriers) = imag(recv_chunks(i,k);endend% take out trailing zeros from output - outputoutput_analog = recv_dechunked(1:data_length);output = sign(output_analog);3.3.3 %write %save received data% write% *TEST OUTPUT*if input_type = 1if test_input_type = 1%already binary - do nothingendif (test_input_type = 2) | (test_input_type = 3)%random input OR sine wave samplesoutput_samples = zeros(1,floor(length(output)/8); %extra zeros are not original datafor i = 1:length(output_samples)output_samples(i) = bin2eight(output(1 + (i-1)*8:(i-1)*8 + 8);endendend% *FILE OUTPUT*if input_type = 2if file_input_type = 1%binary file output - not implementedendif file_input_type = 2%text file outputoutput_samples = zeros(1,floor(length(output)/8); %extra zeros are not original datafor i = 1:length(output_samples)output_samples(i) = bin2eight(output(1 + (i-1)*8:(i-1)*8 + 8);endfile = fopen(OFDM_text_out.txt,wt+);fwrite(file,output_samples,char);fclose(file);endif file_input_type = 3output_samples_big = zeros(1,floor(length(output)/8); %extra zeros are not original datafor i = 1:length(output_samples_big)output_samples_big(i) = bin2eight(output(1 + (i-1)*8:(i-1)*8 + 8);end%convert dynamic range from 0:255 to -1:1output_samples = (output_samples_big-127)/128;%sound file outputwavwrite(output_samples, 11025, 8, OFDM_out.wav)endif file_input_type = 4%image file output - not implementedendend4、%Analysis.m% Analysisdisp( ), disp(-)disp(Preparing Analysis)figure(2), clfif (input_type = 1) & (test_input_type = 1)subplot(221), stem(data_in), title(OFDM 二进制输入数据);subplot(223), stem(output), title(OFDM 二进制恢复数据)elsesubplot(221), plot(data_samples), title(OFDM 输入信号);subplot(223), plot(output_samples), title(OFDM 恢复信号);endsubplot(222), plot(xmit), title(OFDM发射);subplot(224), plot(recv), title(OFDM接收);dig_x_axis = (1:length(xmit)/length(xmit);figure(3), clfif channel_on =1num = 1, zeros(1, d1-1), a1, zeros(1, d2-d1-1), a2;den = 1;H, W = freqz(num, den, 512);mag = 20*log10(abs(H);phase = angle(H) * 180/pi;subplot(313)freq_data = abs(fft(recv);L = length(freq_data)/2;plot(dig_x_axis(1:L), freq_data(1:L)xlabel(OFDM接收端FFT)axis_temp = axis;subplot(311),freq_data = abs(fft(xmit);plot(dig_x_axis(1:L), freq_data(1:L), axis(axis_temp)title(OFDM发射端FFT)subplot(312)plot(W/(2*pi),mag),ylabel(信道幅度响应)elsesubplot(212)freq_data = abs(fft(recv);L = length(freq_data)/2;plot(dig_x_axis(1:L), freq_data(1:L)xlabel(OFDM接收端FFT)axis_temp = axis;subplot(211),freq_data = abs(fft(xmit);plot(dig_x_axis(1:L), freq_data(1:L), axis(axis_temp)title(OFDM发射端F
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 精细化企业核心股东权益共享合作协议
- 离婚抚养子女课外活动费用补充协议范本
- 离婚协议书范本:离婚协议执行监督与违约责任协议
- 国际离婚协议英文翻译及海外婚姻财产分割服务合同
- 规模化养殖场土地租赁与环保责任合同
- 离婚协议书及子女监护权变更协议
- 私立学校校长任期制与学校品牌建设合同
- 2025年施工员之土建施工基础知识考试题库(含答案)
- 2025年院感试题含答案
- 2025年(三级)婚姻家庭咨询师职业鉴定考试题库附答案
- 私密线上招商课件
- 兵团面试题目及答案
- 2025水发集团有限公司招聘216人考试模拟试题及答案解析
- 智慧加油站物联网综合管控平台建设综合解决方案
- 2025年甘肃省公职人员考试时事政治考试试题(附含答案)
- 花岗岩铺设方案
- 2025年护理疼痛试题及答案
- 桥梁工程监理工作实施方案
- 年产5万吨氧化铁新材料(磁性材料及锂电材料)项目报告书
- 服装辅料基础知识培训
- 江苏南京2020-2023年中考满分作文53篇
评论
0/150
提交评论