16QAM是正交调幅,即振幅相位联合键控APK的一种表达式可以写为 Ak cos(ωt + φk),用三角函数把上式展开, Ak cosφk cosωt - Ak sinφk sinωt对于16QAM,其中Ak有4种取值:±d或±3d; φk有4种取值:±π/8或±3π/8则载波cosωt、sinωt的振幅Ak cosφk、- Ak sinφk对应横纵坐标,一共有16种组合,对应16个星座点,在直角坐标系里画出来就是矩形的。
可以去看樊昌信的《通信原理(第6版)》,国防工业出版社,第238页。
其他通信原理教材也有这个内容。
%双边带和单边带调幅调制,参考P260fs=128;%采样频率fc=10;%载波频率f=3;%原始信号频率t=0:1/fs:2;x=sin(2*pi*f*t)+sin(8*pi*f*t);%原始信号%双边带带载波调幅ydouble=amod(x,fc,fs,'amdsb-tc');zdouble=fft(ydouble);f_dot=fs/length(zdouble);%点频率zdouble=abs(fftshift(zdouble));N=length(zdouble);frqdouble=(-N/2:N/2)*f_dot;frqdouble(N)=[];figure(1);subplot(2,1,1);plot(frqdouble,(zdouble));axis([-30 30 -10 279]);title('双边带带载波调幅');xxx=ydouble;
% Create a random digital messageM = 16; % Alphabet sizex = randi([0 M-1],5000,1); % Random symbols% Use 16-QAM modulation.hMod = modem.qammod(M);hDemod = modem.qamdemod(hMod);% Create a scatter plot and show constellationscatterPlot = commscope.ScatterPlot('SamplesPerSymbol',1,...'Constellation',hMod.Constellation);scatterPlot.PlotSettings.Constellation = 'on';% Modulatey = modulate(hMod,x);% Transmit signal through an AWGN channel.ynoisy = awgn(y,15,'measured');% Create scatter plot from noisy data.update(scatterPlot,ynoisy);% Demodulate ynoisy to recover the message.z=demodulate(hDemod,ynoisy);% Check symbol error rate.[num,rt] = symerr(x,z)The output and scatter plot follow. Your numerical results andplot might vary, because the example uses random numbers.num =83rt =0.0166
展开全部 拷到你的Matlab里,名字就叫OFDM_Demo好了。
不光有你上面的,还有星座图,等等。
clear all;close all;carrier_count=200;%子载波数symbols_per_carrier=12;%每子载波含符号数bits_per_symbol=4;%每符号含比特数,16QAM调制IFFT_bin_length=512;%FFT点数PrefixRatio=1/4;%保护间隔与OFDM数据的比例 1/6~1/4GI=PrefixRatio*IFFT_bin_length ;%每一个OFDM符号添加的循环前缀长度为1/4*IFFT_bin_length 即保护间隔长度为128beta=1/32;%窗函数滚降系数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/2));%共轭对称子载波映射 复数数据对应的IFFT点坐标conjugate_carriers = IFFT_bin_length - carriers + 2;%共轭对称子载波映射 共轭复数对应的IFFT点坐标rand( 'state',0);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, -4, 4]);grid on%=================IFFT===========================IFFT_modulation=zeros(symbols_per_carrier,IFFT_bin_length);%添0组成IFFT_bin_length IFFT 运算 IFFT_modulation(:,carriers ) = complex_carrier_matrix ;%未添加导频信号 ,子载波映射在此处IFFT_modulation(:,conjugate_carriers ) = conj(complex_carrier_matrix);%共轭复数映射%========================================================figure(2);stem(0:IFFT_bin_length-1, abs(IFFT_modulation(2,1:IFFT_bin_length)),'b*-')%第一个OFDM符号的频谱grid onaxis ([0 IFFT_bin_length -0.5 4.5]);ylabel('Magnitude');xlabel('IFFT Bin');title('OFDM Carrier Frequency Magnitude');figure(3);plot(0:IFFT_bin_length-1, (180/pi)*angle(IFFT_modulation(2,1:IFFT_bin_length)), 'go')hold onstem(0:carriers-1, (180/pi)*angle(IFFT_modulation(2,1:carriers)),'b*-');%第一个OFDM符号的相位stem(0:conjugate_carriers-1, (180/pi)*angle(IFFT_modulation(2,1:conjugate_carriers)),'b*-');axis ([0 IFFT_bin_length -200 +200])grid onylabel('Phase (degrees)')xlabel('IFFT Bin')title('OFDM Carrier Phase')%=================================================================signal_after_IFFT=ifft(IFFT_modulation,IFFT_bin_length,2);%OFDM调制 即IFFT变换time_wave_matrix =signal_after_IFFT;%时域波形矩阵,行为每载波所含符号数,列ITTF点数,N个子载波映射在其内,每一行即为一个OFDM符号figure(4);subplot(3,1,1);plot(0:IFFT_bin_length-1,time_wave_matrix(2,:));%第一个符号的波形axis([0, 700, -0.2, 0.2]);grid on;ylabel('Amplitude');xlabel('Time');title('OFDM Time Signal, One Symbol Period');%===========================================================%=====================添加循环前缀与后缀====================================XX=zeros(symbols_per_carrier,IFFT_bin_length+GI+GIP);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_after_IFFT(k,j);%添加循环后缀 endendtime_wave_matrix_cp=XX;%添加了循环前缀与后缀的时域信号矩阵,此时一个OFDM符号长度为IFFT_bin_length+GI+GIP=660subplot(3,1,2);plot(0:length(time_wave_matrix_cp)-1,time_wave_matrix_cp(2,:));%第一个符号添加循环前缀后的波形axis([0, 700, -0.2, 0.2]);grid on;ylabel('Amplitude');xlabel('Time');title('OFDM Time Signal with CP, One Symbol Period');%==============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)';%加窗 升余弦窗end subplot(3,1,3);plot(0:IFFT_bin_length-1+GI+GIP,windowed_time_wave_matrix_cp(2,:));%第一个符号的波形axis([0, 700, -0.2, 0.2]);grid on;ylabel('Amplitude');xlabel('Time');title('OFDM Time Signal Apply a Window , One Symbol Period');%========================生成发送信号,并串变换=========...
信号矢量端点的分布图称为星座图。
通常,可以用星座图来描述QAM信号的信号空间分布状态。
对于M=16的16QAM来说,有多种分布形式的信号星座图。
两种具有代表意义的信号星座图如图 9 - 2 所示。
在图 9 - 2(a)中, 信号点的分布成方型,故称为方型16QAM星座,也称为标准型16QAM。
在图 9 - 2(b)中,信号点的分布成星型,故称为星型16QAM星座。
若信号点之间的最小距离为2A,且所有信号点等概率出现。
两者功率相差1.4dB。
另外,两者的星座结构也有重要的差别。
一是星型16QAM只有两个振幅值,而方型16QAM有三种振幅值;二是星型16QAM只有8种相位值,而方型16QAM有12种相位值。
这两点使得在衰落信道中,星型16QAM比方型16QAM更具有吸引力。