OFDM仿真

您所在的位置:网站首页 fpga实现ofdm加窗 OFDM仿真

OFDM仿真

2023-08-25 15:53| 来源: 网络整理| 查看: 265

一、OFDM步骤 网上ofdm普遍采用这样一个顺序仿真,产生0-1随机序列 => 串并转换 => 映射 => 取共轭、过采样=> IFFT => 加循环前缀和后缀 => 加窗 => 并串转换 => 加AWGN => 串并转换 => 去前缀 => FFT =>下采样 => 解映射 => 求误码率 我去除①取共轭、过采样②加窗等步骤,这些复杂的做法设计很广的知识范围,有的还是工程化的细腻、额外考虑。只从原理上进行仿真。 二、编程效果 MATLAB编程绘图后效果如下图 ofdm此时的具体参数如下表所示

参数数值每个ofdm符号包含mqam符号个数200ofdm符号个数100mqam的进制数64前缀码128后缀码20信噪比55DB

注: ①上图频谱采用数字频率的1/2π倍表示,物理频率与码速有关; ②若IFFT前,取共轭,再求IFFT时,频谱类似矩形窗。

改了参数后效果: ofdm

参数数值每个ofdm符号包含mqam符号个数200ofdm符号个数100mqam的进制数16前缀码128后缀码20信噪比15DB

三、完整代码如下 代码可以改参数 ①MQAM信号可改,直接改M即可(M=2^n) ②信噪比可改 signal_time_C_W=awgn(signal_time_C,30);%加性高斯白噪声通道 改这个函数里的数字即可,这个是MATLAB自带的函数

clear all; close all; %-------------------参数设定---------------------% carrier_count = 200; %每个ofdm符号包含mqam符号个数 ofdm_symbol_count = 100;%ofdm符号个数 M=64;%mqam的进制数 CP_length = 128;%前缀码 CS_length = 20;%后缀码 %------------------基本步骤----------------------% bit_signal=bit_Signal_generation(carrier_count,ofdm_symbol_count,M); %2进制信号生成 bit_moded1 = qammod(bit_signal,M,'InputType','bit'); %星座映射 bit_moded2 = reshape(bit_moded1,carrier_count,ofdm_symbol_count); %串并转换 signal_time=ifft(bit_moded2,2^nextpow2(length(bit_moded2))); %ifft调制 signal_time_C=add_prefix_suffix_code(signal_time,CP_length,CS_length); %加前缀后缀码 signal_time_C_W=awgn(signal_time_C,55); %加性高斯白噪声通道 signal_time_D=signal_time_C_W(1+CP_length:end-CS_length,:); %去前缀码后缀码 signal_time_E=fft(signal_time_D,2^nextpow2(length(signal_time_D))); %fft解调 signal_time_F=signal_time_E(1:carrier_count,:); %解调后下采样 draw(bit_moded1,signal_time_C,signal_time,signal_time_C_W,signal_time_F); %绘图 error_rate=error_rate1(signal_time_F,bit_signal,M); %求误码率 %---------------------自己编写的函数 ,包括了绘图函数-------------------------% function bit_signal=bit_Signal_generation(carrier_count,ofdm_symbol_count,M) bit_per_symbol=log2(M); bit_length = carrier_count*ofdm_symbol_count*bit_per_symbol; bit_signal = round(rand(1,bit_length))'; % 列向量 end function signal_time_C=add_prefix_suffix_code(signal_time,CP_length,CS_length) signal_time_C = [signal_time(end-CP_length+1:end,:);signal_time]; signal_time_C = [signal_time_C; signal_time_C(1:CS_length,:)]; end function draw(bit_moded1,signal_time_C,signal_time,signal_time_C_W,signal_time_F) figure subplot(3,2,1) scatter(real(bit_moded1),imag(bit_moded1),'*r'); title('调制后的星座图'); grid on; subplot(3,2,2) scatter(real(reshape(signal_time_F,1,[])),imag(reshape(signal_time_F,1,[])),'.'); title('接收信号的星座图snr=55'); grid on; subplot(3,2,3) plot(abs(signal_time_C_W(:,1)),'r'); title('单个OFDM符号加前缀后缀码噪声下的信号'); subplot(3,2,4) plot(abs(signal_time_C(:,1)),'y'); title('单个OFDM符号加前缀后缀码的信号'); subplot(3,2,5) plot(abs(signal_time(:,1)),'g'); title('原始单个OFDM符号的信号'); xlabel('Time'); ylabel('Amplitude'); subplot(3,2,6) NFFT = 2^nextpow2(length(signal_time(:,1))); Y1 = fft(mean(signal_time),NFFT)/NFFT; f = linspace(0,1,NFFT/2+1); plot(f,2*abs(Y1(1:NFFT/2+1))) ; hold on; NFFT2 = 2^nextpow2(length(signal_time_C(:,1))); Y2 = fft(mean(signal_time_C),NFFT2)/NFFT2; f2 = linspace(0,1,NFFT2/2+1); plot(f2,2*abs(Y2(1:NFFT2/2+1))); legend('噪声下频谱','无噪声下频谱'); end function error_rate=error_rate1(signal_time_F,bit_signal,M) bit_demod_sig = reshape(qamdemod(signal_time_F,M,'OutputType','bit'),[],1); error_bit = sum(bit_demod_sig~=bit_signal); error_rate = error_bit/length(bit_signal); end

在工作区输入error_rate,便得到了误码率 在这里插入图片描述 四、我关于OFDM理解 我觉得最核心的有点如下: ①ofdm技术频谱利用率高。 ②采用前缀码,后缀码克服了多径传播的问题,抗选择性衰落;采用纠错编码和交织过程,克服了深衰落等等,其抗衰落能力高。 ③容量大。

补充:没function的代码(效果与上面函数一样)

clear all; close all; %-------------------% carrier_count = 200; %每个ofdm符号包含mqam符号个数 ofdm_symbol_count = 100;%ofdm符号个数 M=64;%mqam的进制数 CP_length = 128;%前缀码 CS_length = 20;%后缀码 %---------------------------------------------% %bit_signal=bit_Signal_generation(carrier_count,ofdm_symbol_count,M); bit_per_symbol=log2(M); bit_length = carrier_count*ofdm_symbol_count*bit_per_symbol; bit_signal = round(rand(1,bit_length))'; %2进制信号生成 bit_moded1 = qammod(bit_signal,M,'InputType','bit'); %星座映射 bit_moded2 = reshape(bit_moded1,carrier_count,ofdm_symbol_count); %串并转换 signal_time=ifft(bit_moded2,2^nextpow2(length(bit_moded2))); %ifft调制 %signal_time_C=add_prefix_suffix_code(signal_time,CP_length,CS_length); signal_time_C = [signal_time(end-CP_length+1:end,:);signal_time]; signal_time_C = [signal_time_C; signal_time_C(1:CS_length,:)]; %加前缀后缀码 signal_time_C_W=awgn(signal_time_C,55); %加性高斯白噪声通道 signal_time_D=signal_time_C_W(1+CP_length:end-CS_length,:); %去前缀码后缀码 signal_time_E=fft(signal_time_D,2^nextpow2(length(signal_time_D))); %fft解调 signal_time_F=signal_time_E(1:carrier_count,:); %解调后下采样 %draw(bit_moded1,signal_time_C,signal_time,signal_time_C_W,signal_time_F); figure subplot(3,2,1) scatter(real(bit_moded1),imag(bit_moded1),'*r'); title('调制后的星座图'); grid on; subplot(3,2,2) scatter(real(reshape(signal_time_F,1,[])),imag(reshape(signal_time_F,1,[])),'.'); title('接收信号的星座图snr=55'); grid on; subplot(3,2,3) plot(abs(signal_time_C_W(:,1)),'r'); title('单个OFDM符号加前缀后缀码噪声下的信号'); subplot(3,2,4) plot(abs(signal_time_C(:,1)),'y'); title('单个OFDM符号加前缀后缀码的信号'); subplot(3,2,5) plot(abs(signal_time(:,1)),'g'); title('原始单个OFDM符号的信号'); xlabel('Time'); ylabel('Amplitude'); subplot(3,2,6) NFFT = 2^nextpow2(length(signal_time(:,1))); Y1 = fft(mean(signal_time),NFFT)/NFFT; f = linspace(0,1,NFFT/2+1); plot(f,2*abs(Y1(1:NFFT/2+1))) ; hold on; NFFT2 = 2^nextpow2(length(signal_time_C(:,1))); Y2 = fft(mean(signal_time_C),NFFT2)/NFFT2; f2 = linspace(0,1,NFFT2/2+1); plot(f2,2*abs(Y2(1:NFFT2/2+1))); legend('噪声下频谱','无噪声下频谱'); %绘图 %error_rate=error_rate1(signal_time_F,bit_signal,M); bit_demod_sig = reshape(qamdemod(signal_time_F,M,'OutputType','bit'),[],1); error_bit = sum(bit_demod_sig~=bit_signal); error_rate = error_bit/length(bit_signal); %求误码率 %----------------------------------------------%


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3