当前位置:首页 > 星座达人

ofdm 星座图 matlab:如何利用MATLAB产生OFDM时域信号波形

分享到

如何利用MATLAB产生OFDM时域信号波形

拷到你的Matlab里,名字就叫OFDM_Demo好了。不光有你上面的,还有星座图,carrier_count=200;%子载波数symbols_per_carrier=12;%每子载波含符号数bits_per_symbol=4;%每符号含比特数,16QAM调制IFFT_bin_length=512;%FFT点数PrefixRatio=1/%保护间隔与OFDM数据的比例1/4GI=PrefixRatio*IFFT_bin_length;%每一个OFDM符号添加的循环前缀长度为1/4*IFFT_bin_length即保护间隔长度为128beta=1/%窗函数滚降系数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/%共轭对称子载波映射复数数据对应的IFFT点坐标conjugate_carriers=IFFT_bin_length-carriers+2;%共轭对称子载波映射共轭复数对应的IFFT点坐标rand('state'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_carrier)',%symbols_per_carrier*carrier_count矩阵figure(1),plot(complex_carrier_matrix;*r'%16QAM调制后星座图axis([-4;-4;gridon%=================IFFT===========================IFFT_modulation=zeros(symbols_per_carrier,IFFT_bin_length),%添0组成IFFT_bin_lengthIFFT运算IFFT_modulation(;carriers)=complex_carrier_matrix,%未添加导频信号;子载波映射在此处IFFT_modulation(:conjugate_carriers)=conj(complex_carrier_matrix),pi)*angle(IFFT_modulation(2,conjugate_carriers)),b*-'axis([0IFFT_bin_length-200+200])gridonylabel('Phase(degrees)')%=================================================================signal_after_IFFT=ifft(IFFT_modulation,IFFT_bin_length,%OFDM调制即IFFT变换time_wave_matrix=signal_after_IFFT;%时域波形矩阵,行为每载波所含符号数,N个子载波映射在其内,每一行即为一个OFDM符号figure(4);plot(0:IFFT_bin_length-1,time_wave_matrix(2,)):Amplitude'%===========================================================%=====================添加循环前缀与后缀====================================XX=zeros(symbols_per_carrier;IFFT_bin_length+GI+GIP),fork=1;symbols_per_carrier:IFFT_bin_length:i+GI)=signal_after_IFFT(k,endfori=1;GI:i)=signal_after_IFFT(k,i+IFFT_bin_length-GI),%添加循环前缀endforj=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,length(time_wave_matrix_cp)-1:time_wave_matrix_cp(2,%第一个符号添加循环前缀后的波形axis([0:%==============OFDM符号加窗==========================================windowed_time_wave_matrix_cp=zeros(1;IFFT_bin_length+GI+GIP);fori=1,symbols_per_carrierwindowed_time_wave_matrix_cp(i;)=real(time_wave_matrix_cp(i:)).*rcoswindow(beta,IFFT_bin_length+GI)':%加窗升余弦窗endsubplot(3,plot(0;IFFT_bin_length-1+GI+GIP;windowed_time_wave_matrix_cp(2,%第一个符号的波形axis([0;-0.2,gridon:ylabel('),xlabel(',Time'title('carrier*(IFFT_bin_length+GI)+GIP);windowed_Tx_data(1:IFFT_bin_length+GI+GIP)=windowed_time_wave_matrix_cp(1,fori=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),只添加循环前缀与后缀的串行信号Tx_data=reshape(windowed_time_wave_matrix_cp',(symbols_per_carrier)*(IFFT_bin_length+GI+GIP);%加窗后循环前缀与后缀不叠加发送总位数figure(5)subplot(2;temp_time1-1;Tx_data);Time(samples)':OFDMTimeSignal')temp_time2=symbols_per_carrier*(IFFT_bin_length+GI)+GIP;plot(0;temp_time2-1;windowed_Tx_data);Amplitude(volts)',Time(samples)':)title(',%符号数的1/10行avg_temp_time=(IFFT_bin_length+GI+GIP)*symbols_per_average;%点数;10行数据;10个符号averages=floor(temp_time1/avg_temp_time)=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));)title(')%===============加窗的发送信号频谱=================================symbols_per_average=ceil(symbols_per_carrier/%符号数的1/10行avg_temp_time=(IFFT_bin_length+GI+GIP)*symbols_per_average;10个符号averages=floor(temp_time1/avg_temp_time);avg_temp_time)=0;%分成5段fora=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/平均相加endaverage_fft_log=20*log10(average_fft);2)plot((0:avg_temp_time,average_fft_log)%归一化0/avg_temp_time:(avg_temp_time-1)/avg_temp_timeholdonplot(0:1/IFFT_bin_length:rd')gridonaxis([00.5-40max(average_fft_log)])ylabel('Magnitude(dB)')title(')%====================添加噪声============================================Tx_signal_power=var(windowed_Tx_data);%发送信号功率linear_SNR=10^(SNR/%线性信噪比noise_sigma=Tx_signal_power/linear_SNR;noise_scale_factor=sqrt(noise_sigma);((symbols_per_carrier)*(IFFT_bin_length+GI))+GIP)*noise_scale_factor;length(windowed_Tx_data),noise_sigma,'complex');%产生复GAUSS白噪声信号Rx_data=windowed_Tx_data+noise;%接收到的信号加噪声%=====================接收信号串/解码%=================FFT变换=================================Y1=fft(Rx_data_complex_matrix,IFFT_bin_length,%OFDM解码即FFT变换Rx_carriers=Y1(:%除去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;plot(Rx_complex_carrier_matrix;*r'gridon%====================16qam解调==================================================Rx_serial_complex_symbols=reshape(Rx_complex_carrier_matrix'size(Rx_complex_carrier_matrix;1)*size(Rx_complex_carrier_matrix,1)',

simulink ofdm bpsk调制有星座图么

matlab中有直接的BPSK调制公式,没记错的话应该是pskmod.m然后对调制后的信号用scatterplot这个命令就可以画出星座图。

OFDM信号的形成是N个子载波的星座图复数进行ifft输出就是OFDM。这个输出也是复数啊,OFDM是复数信号吗?

在载波调制之前与并串转换之后需要实现数模转换,也即将DSP芯片处理得到的数字化OFDM数据转换为模拟OFDM信号。由于IFFT输出为复数数据,因此需要两个DAC同时转换其实部与虚部数据,然后经IQ调制得到上变频后的实数RF信号。IQ调制也可以在数字域实现后,那么在数模转换时只需要1个DAC便可实现直接上变频。

OFDM系统中,接收端载波同步后出现这种星座图,有人见过吗 ,求解释

0

小频偏造成的相位偏移量 长训练字相关值 短训练字相关值和能量值 最后一个数据OFDM符号的星座图