摘要:正交振幅调制技术(QAM) 由于其高的频带利用率和相对低的误码率而被定为很多数字通信系统的数字传输标准。该论文讨论了16QAM调制原理,用软件MATLAB产生16QAM信号的算法。 关键词:正交振幅调制;噪声; 多径衰落;内插滤波
一、 引言
正交振幅调制技术(QAM)是幅度、相位联合调制的技术,它同时利用了载波的幅度和相位来传递信息比特,因此在相邻星座点最小距离相同的条件下,QAM星座图中可以容纳更多的星座点,即可实现更高的频带利用率。多进制正交振幅调制技术由于其高的频带利用率和相对低的误码率而被定为很多数字通信系统的数字传输标准。软件无线电是以可编程的DSP或CPU为中心,将模块化、标准化的硬件单元以总线方式连接件起来,构成通用的基本硬件平台,并通过软件加载来实现各种无线通信功能的开放式的体系结构。本文讨论了16QAM调制原理并给出了基于Matlab的16QAM数字调制的软件算法及其编程实现。
二、 正交振幅调制(QAM)原理
正交振幅调制的一般表达式为:
SMQAM(t)?Re[(Amc?jAms)g(t)ej2?fct] ?Amcg(t)cos(2?fct)?Amsg(t)sin(2?fct)
上式中,Amc、Ams为离散的振幅值,m=1,2…,M,M为Amc和Ams的个数。对于 16QAM,M=4。g(t)是发送信号脉冲波形。 本报告中16QAM的调制原理方框图如下图所示:
加入噪声 多径衰落 PN 串并变换 映射 成形 HBF 内插 映射 成形 HBF 内插 加入噪声 多径衰落
输入数据经过串并变换分成两路,再分别经过映射变换成Amc和Ams,Amc和
Ams决定了已调QAM信号在信号星座中的星座点的位置。为减少码间干扰和已调数字信号的带宽,Amc和Ams分别通过脉冲成形低通滤波器,脉冲成形低通滤波器是一个平方根升余弦滤波器。滤波后的输出分别经过半带滤波器、CIC滤波器实现内插,改变速率,最后经过NCO(数控频率振荡器)产生正交上变频用的正/余弦信号。将两路信号相加就可以得到已调QAM输出信号。
三、 Matlab代码分析 1、 伪随机序列发生器
利用Matlab中的函数产生一组长度为N的伪随机信号,为了在后面有正确的串并变换,需要在原随机序列后面补零。
%-----------------------------产生伪随机信号----------------% N=1000; %二进制数据长度
x=randint(1,N,2); %产生伪随机二进制作为输入数据 x(1:4)=[1 1 1 1]; %滤波器取出延时首位设为最大 N=N+N*0.1; %防止系统延时丢数据 x=[x zeros(1,N*0.5)];%尾部填零
2、 串并变换
串并变换是把一串二进制数据流分裂成并行的两串,每串数据的速率是原数据的一半。
%--------------------串并变换-------------------% x1=x(1:2); %数据按2bit分组 x2=x(3:4); for i=1:(N/4-1)
x1=[x1 (x(i*4+1:i*4+2))]; x2=[x2 (x((i*4+3):(i*4+4)))]; end
I=x1(1)*2+x1(2); %二进制转换成十进制 Q=x2(1)*2+x2(2); n=length(x1); for i=1:n/2-1
I=[I (x1(i*2+1)*2+x1(i*2+2))]; Q=[Q (x2(i*2+1)*2+x2(i*2+2))]; end
3、映射
作为调制信号的输入二进制数据流经过串–并变换后变成四路并行数据流。这四路数据两两结合,分别进入两个电平转换器,转换成两路4电平数据。例如,00转换成-3,01转换成-1,10转换成1,11转换成3。QAM发射的信号集可以用星座图方便地表示,星座图上每一个星座点对应发射信号集中的那一点。星座点数越多,每个符号能传输的信息量就越大。但是,如果在星座图的平均能量保持不变的情况下增加星座点,会使星座点之间的距离变小,进而导致误码率上升。
%------------------电平变换(0 1 2 3 -> -3 -1 1 3)--------% for i=1:n/2 switch(I(i)) case 0 I(i)=-3; case 1 I(i)=-1; case 2 I(i)=1; case 3 I(i)=3; end
switch(Q(i)) case 0 Q(i)=-3; case 1 Q(i)=-1; case 2 Q(i)=1; case 3 Q(i)=3; end end figure(1);
plot(I,Q,'*'),title('?ù′?D?×ùí?');
axis([-4,4,-4,4]);
仿真得到的16QAM 星座图为:
基带星座图43210-1-2-3-4-4-3-2-101234
4、脉冲成形滤波器
在信道中,信号传输的频带宽度是有限的,根据信道的传输函数不同,数字信号通过信道之后,在进行抽样判决的时候可能产生符号间干扰,称为码间串扰。但是当信道的传递函数满足奈奎斯特第一准则时,数字信号通过带限信道之后将不会产生码间串扰。理想的基带传输系统总的传递函数为理想低通特性,但是在实际的通信系统中,常常将带限信道的总传输函数设计为具有余弦频谱特性的,称为滚降滤波器。滚降滤波器的频率响应如下:
1???T, 0?|f|??2T?T?T1??1??1???(|f|?)], ?|f|??[1?cosX(f)??2?2T2T2T
???0, |f|?1????2T其中?称为滚降因子,0???1。相应的时域波形为
x(t)?sin(?t/T)cos(??t/T)?。利用matlab库中的函数产生一个升余弦频谱信222?t/T1?4?t/T号。符号率为1M symbol/s,所以符号时间间隔为0.000001s,采样频率为2MHz。
%------------------脉冲成形滤波器 -----------------%
Fs=2000000; % Sampling frequency Fs Hz T=0.000001; % Symbol time interval [s] a=0.35;
p = rcosfir(a,[-3,3],2,0.0000001,'sqrt'); %成形滤波函数 figure(2);
rcosfir(0);%plot resfir 图像
升余弦信号的时域和频域波形为:
Impulse Response of the Raised Cosine Filter (with time shift)10.5000.51.522.5timeFrequency Response of the Raised Cosine Filter131.5Amplitude10.5000.5frequency11.5
5、基带成形滤波
对I、Q路信号进行成形滤波,可以防止码间串扰。
%-------------------基带成形滤波-----------------% %I路成形
yi=conv(p,upsample(I,2));
% upsample Pulse sequence {a1 0 a2 0 a3 0 a4 0 ...}
%Q路成形
yq=conv(p,upsample(Q,2));
% upsample Pulse sequence {a1 0 a2 0 a3 0 a4 0 ...} figure(3); subplot(2,1,1);
stem(yi);title('I路信号'); subplot(2,1,2)
stem(yq);title('Q路信号');
仿真得到的I、Q路信号信号为:
I路信号43210-1-2-3-40100200300400500600Q路信号43210-1-2-3-401002003004005006006、半带滤波器
半带滤波器实现信道内插功能,其抽取因子为2^M。本实验中采用15阶半 带滤波器进行内插。
%------------------半带滤波÷---------------% b = firhalfband(14,0.0001,'dev'); 阶半带滤波器 figure(4); subplot(2,1,1);
freqz(b); % 半带滤波器的频谱 subplot(2,1,2);
stem(b); %半带滤波器的时域响应 figure(5); %I路滤波
YI=conv(b,yi); subplot(2,1,1);
freqz(YI); title('I路信号半带滤波频域响应');% I路信号时域与频域响应 subplot(2,1,2);
stem(YI);title('I路信号半带滤波时域响应'); %Q路滤波
YQ=conv(b,yq); figure(6); subplot(2,1,1);
freqz(YQ); title('Q路信号半带滤波频域响应'); % Q路信号时域与频域响应subplot(2,1,2);
stem(YQ);title('Q路信号半带滤波时域响应');
半带滤波器时域、频域响应:
半带滤波器的频谱200-20Magnitude (dB)-40-60-80-100-12000.10.20.30.40.50.6Normalized Frequency (?? rad/sample)0.70.80.91半带滤波器的时域响应0.60.50.40.30.20.10-0.1051015
I路信号频域、时域响应
I路信号半带滤波频域响应100Magnitude (dB)0-100-20000.10.20.30.40.50.60.70.8Normalized Frequency (?? rad/sample)I路信号半带滤波时域响应0.91420-2-40100200300400500600
Q路信号频域、时域响应
Q路信号半带滤波频域响应100Magnitude (dB)0-100-20000.10.20.30.40.50.60.70.8Normalized Frequency (?? rad/sample)Q路信号半带滤波时域响应0.91420-2-40100200300400500600
7、加入噪声
对其加入AWGN噪音(SNR=16dB):
%------------------加入噪声¨---------------% snr=8;
YIAwgn=awgn(YI,snr); figure(7); subplot(2,1,1);
freqz(YIAwgn); title('加噪声I路信号频域相应'); subplot(2,1,2);
stem(YIAwgn);title('加噪声I路信号时域相应'); YQAwgn=awgn(YQ,snr); figure(8); subplot(2,1,1);
freqz(YQAwgn); title('加噪声Q路信号频域相应');% ?ó??éùQ?·D?o?ê±óòó??μóò?ìó| subplot(2,1,2);
stem(YQAwgn);title('加噪声Q路信号时域相应');
8、经过多径衰减信道
加入1路多径衰落信号(旁径衰减因子为-12dB、延迟-5us) ts=1/Fs;
chan=rayleighchan(ts,0,0.000005,-12); YIRay=filter(chan,YI);
figure(9); subplot(2,1,1);
freqz(YIRay); title('?-1yrayleighD?μàI?·D?o??μóò?ìó|');% ?-1yrayleighD?μàI?·D?o?ê±óòó??μóò?ìó| subplot(2,1,2);
stem(YIRay);title('?-1yrayleighD?μàI?·D?o?ê±óò?ìó|'); YQRay=filter(chan,YQ); figure(10); subplot(2,1,1);
freqz(YQRay); title('?-1yrayleighD?μàQ?·D?o??μóò?ìó|');% ?-1yrayleighD?μàQ?·D?o?ê±óòó??μóò?ìó| subplot(2,1,2);
stem(YQRay);title('?-1yrayleighD?μàQ?·D?o?ê±óò?ìó|');
9、CIC滤波
CIC是IIR和FIR滤波器的组合,它能用简单的结构、较少的资源灵活地实现输入、输出信号的速率变换。CIC与HBF滤波器相结合,可以实现大范围、高倍数的信道内插。
%------------------CIC滤波¨---------------% hm = mfilt.cicinterp(4,1,3);%产生CIC滤波器 %I路信号
YII_fi=filter(hm,YI); %得到内插后的采样点 YII = double(YII_fi); figure(7); subplot(2,1,1); freqz(YII); subplot(2,1,2);
stem(nnn(1:22)/Fs,YI(1:22),'filled'); hold on; subplot(2,1,2);
stem(nnn(1:88)/(Fs*4),YII(4:91),'r'); title('I滤波前后比较'); %Q路信号
YQQ_fi=filter(hm,YQ); %得到内插后的采样点 YQQ=double(YQQ_fi); figure(8); subplot(2,1,2);
stem(nnn(1:22)/Fs,YQ(1:22),'filled'); hold on; subplot(2,1,2);
stem(nnn(1:88)/(Fs*4),YQQ(4:91),'r'); title('Q滤波前后对比’);
CIC滤波器的频谱特性:
I路信号经过CIC滤波器输出的时域和频域特性及输入输出对比为:
Q路信号经过CIC滤波器输出的时域和频域特性及输入输出对比为:
10、加载波
用正/余弦信号进行上变频,中频信号为21MHz。
%------------------ 加载波2¨---------------% nn=1:length(YII); fc=21000000; f0=20000000*64; %I路信号
YIC=YII.*cos(2*pi*nn*fc/f0);% 上变频 figure(9); subplot(2,1,1);
stem(YIC);title('I路中频信号时域响应'); subplot(2,1,2); YICF=fft(YIC);
stem(abs(YICF));title('I路中频信号频域响应'); %Q路信号
YQC=YQQ.*sin(2*pi*nn*fc/f0); figure(10); subplot(2,1,1);
stem(YQC);title('Q路中频信号时域响应'); subplot(2,1,2); YQCF=fft(YQC);
stem(abs(YQCF));title('Q路中频信号频域响应');
输出结果为:
I路中频信号时域响应20100-10-2005001000150020002500I路中频信号频域响应300020001000005001000150020002500
Q路中频信号时域响应20100-10-2005001000150020002500Q路中频信号频域响应300020001000005001000150020002500
11、输出
%-------------------------OUTPUT----------------% output=YIC+YQC; Ft=fft(output); F=abs(Ft); figure(11);
subplot(2,1,1);
stem(output);title('输出中频信号时域响应'); subplot(2,1,2);
plot(F);title('输出中频信号频域响应');
输出中频信号时域、频域响应:
输出中频信号时域响应40200-20-4005001000150020002500输出中频信号频域响应4000300020001000005001000150020002500
四、 小结
本文利用Matlab工具对16QAM通信系统进行了仿真实验,结果形象地反映了理论和实际系统的关系,可以看出,Matlab是研究现代通信系统的有利工具,在通信工程的教学和科研中具有良好的应用前景。