16QAM-星形和矩形星座图调制解调MATLAB代码

16QAM-星形和矩形星座图调制解调MATLAB代码
16QAM-星形和矩形星座图调制解调MATLAB代码

16QAM-星形和矩形星座图调制解调MATLAB代码

%%

------------------------------------------------------------ % 软件无线电课程设计

%

% 方形、星形16QAM调制解调仿真%

%%------------------------------------------------------------

%%主程序

clc

clear

%% 定义参数

fd=250*10^6; %码元速率250M

fs=2500*10^6; %滤波器采样率

fc=2500*10^6; %载波频率2.5G

f=10000*10^6; %对载波采样

data_len=200000; %数据长度

sym_len=data_len/4; %码元序列长度

M_QAM=16;%QAM数

k=log2(M_QAM);

SNR=1:12;%白噪声信噪比,

%%

------------------------------------------------------------ bit_tx=randint(1,data_len);%产生随机序列echo off;

rec_qam16=QamMod(bit_tx,16);

%方形16QAM调制

star_qam16=SrarQamMod(bit_tx);

%星形16QAM调制

base_rec=base_shape(fd,fs,f,rec_qam16);

%基带成型滤波

base_star=base_shape(fd,fs,f,star_qam16); %基带成型滤波

for

i=1:length(SNR) %信噪比从1dB到12dB计算误码率

SNR_=i

%方形映射16QAM

rf_rec_qam16=CarrierMod(fc,f,base_rec);

%载波调制

rf_rec_qam16_n=awgn(rf_rec_qam16,SNR(i),'m easured'); %加噪声

[rec_qam16_rx

base_rec_rx]=CarrierDemod(fd,fs,fc,f,rf_rec_qa m16_n); %载波解调

bit_rec_rx=QamDemod(rec_qam16_rx,16);

%MQAM解调

[num_qam16,perr_qam16_rec(i)]=biterr(bit_tx, bit_rec_rx);%误码率

qam16_data_rec(i,:)=rec_qam16_rx;

%scatterplot(rec_qam16_rx);

%星形映射16QAM

rf_star_qam16=CarrierMod(fc,f,base_star);

%载波调制

rf_star_qam16_n=awgn(rf_star_qam16,SNR(i),' measured'); %加噪声

[star_qam16_rx

base_star_rx]=CarrierDemod(fd,fs,fc,f,rf_star_ qam16_n); %载波解调

bit_star_rx=StarQamDemod(star_qam16_rx);

%MQAM解调

[num_qam16,perr_qam16_star(i)]=biterr(bit_tx ,bit_star_rx);%误码率

qam16_data_star(i,:)=star_qam16_rx;

%scatterplot(star_qam16_rx);

end

%% 理论误码率计算

SNRtheo=0:0.1:length(SNR);

for i=1:length(SNRtheo)

SNRdec=10.^(SNRtheo(i)/10);

theo_perr_qam16(i)=(3/8)*erfc(sqrt(SNRdec*2/ 5));

end

%% 基带波形

N=200;

n=1:N;

t=1:N*10;

%发送端波形

figure;

stem(n,bit_tx(n)); title('发送序列'); %发送序列

figure('Name','发送端基带信号');

subplot(411);

plot(t,real(base_rec(t))); title('方形映射-Q路');

subplot(412);

plot(t,imag(base_rec(t))); title('方形映射-I路');

subplot(413);

plot(t,real(base_star(t))); title('星形映射-Q路

subplot(414);

plot(t,imag(base_star(t))); title('星形映射-I路');

%接收端波形

figure;

subplot(211);

stem(n,bit_rec_rx(n)); title('方形接收序列');

subplot(212);

stem(n,bit_star_rx(n)); title('星形接收序列');

figure('Name','接收端基带信号');

subplot(411);

plot(t,real(base_rec_rx(t))); title('方形映射-Q 路');

subplot(412);

plot(t,imag(base_rec_rx(t))); title('方形映射-I 路');

subplot(413);

plot(t,real(base_star_rx(t))); title('星形映射-Q路');

subplot(414);

plot(t,imag(base_star_rx(t))); title('星形映射-I路');

%基带眼图

N1=20000;

Tn=f/fd;

eye_rex=base_rec(1:N1);

eyediagram(eye_rex,Tn*4,Tn); title('方形基带眼图');

eye_star=base_star(1:N1);

eyediagram(eye_star,Tn*4,Tn); title('星形基带眼图');

%% 接收端星座图

%scatterplot(qam16_data_rec(12,:));

figure('Name','方形16QAM接收端星座图'); for i=3:3:12

subplot(2,2,i/3);

plot(real(qam16_data_rec(i,:)),imag(qam16_dat

a_rec(i,:)),'.');

xmax=5;axis([-xmax xmax -xmax xmax])

title(['Snr=',num2str(SNR(i)),' dB']);

end

figure('Name','星形16QAM接收端星座图'); for i=3:3:12

subplot(2,2,i/3);

plot(real(qam16_data_star(i,:)),imag(qam16_dat a_star(i,:)),'.');

xmax=3;axis([-xmax xmax -xmax xmax])

grid on; title(['Snr=',num2str(SNR(i)),' dB']);

end

%% 功率谱密度

f_plot;

%% 误码率分析

%16QAM误码率曲线

figure('Name','16QAM误码性能对比');

% semilogy(SNRtheo,theo_perr_qam16);

% hold on;

semilogy(SNR,perr_qam16_rec,'*');

hold on;

semilogy(SNR,perr_qam16_star,'o');

xlabel('SNR in dB');

ylabel('Prb of Err');

legend('方形16QAM','星形16QAM');

title('16QAM误码性能对比');

%-------------------------------------------------------------------------------

%% 基带成型

function

base_info=base_shape(fd,fs,f,seq_16QAM)

%平方根升余弦滤波器,滚降系数0.5,延迟3个采样点

flt=rcosine(fd,fs,'sqrt',0.5);

%I路和Q路

seq_Q=real(seq_16QAM);

seq_I=imag(seq_16QAM);

%增采样

R=fs/fd;

up_seq_Q=upsample(seq_Q,R);

up_seq_I=upsample(seq_I,R);

%升余弦调制

rcos_Q=conv(up_seq_Q,flt);

rcos_I=conv(up_seq_I,flt);

%提升

rcos_Q_up=interp(rcos_Q,f/fs);

rcos_I_up=interp(rcos_I,f/fs);

base_info=rcos_Q_up+j*rcos_I_up;

%--------------------------------------------------------------------

%% 载波解调

function [data_rx

base_rx]=CarrierDemod(fd,fs,fc,f,receive)

%% 分两路乘正交高频载波

rc_length=length(receive);

flt=rcosine(fd,fs,'sqrt',0.5);

t=0:rc_length-1;

rc_Q=receive .* sin(2*pi*fc*t/f);

rc_I=receive .* cos(2*pi*fc*t/f);

%减采样后根升余弦匹配滤波,注意对齐采样点down_Q=downsample([0 rc_Q],f/fs);

down_I=downsample(rc_I,f/fs);

low_Q_rcos=conv(down_Q,flt);

low_I_rcos=conv(down_I,flt);

base_rx=low_Q_rcos(1:length(low_I_rcos))+j*lo w_I_rcos;

%两次根升余弦滤波延迟,定位初始信号位置%delay+1:end-delay-1

R=fs/fd;

delay=3*R*2;

rc_Q_seq=(downsample(low_Q_rcos(delay+1:en d-delay-1),R));

rc_I_seq=(downsample(low_I_rcos(delay+1:end -delay-1),R)); %类型转换

data_rx=rc_Q_seq+j*rc_I_seq;

%--------------------------------------------------------------------------

%% 载波调制

function transmit=CarrierMod(fc,f,base)

%载波调制

t=0:length(base)-1;

high_freq_Q=real(base) .* sin(2*pi*fc*t/f); high_freq_I=imag(base) .* cos(2*pi*fc*t/f);

transmit=high_freq_Q+high_freq_I;

%------------------------------------------------------------------------------

%

% QAM解调程序,将MQAM码元还原为二进制数据

% 入口参数:data_QAM:QAM码元数据

% M_QAM:MQAM中M的大小

% 出口参数:二进制数据比特流%------------------------------------------------------------------------

function

data_out=QamDemod(data_QAM,M_QAM)

k=log2(M_QAM);%每个M进制码元的bit数data_len=length(data_QAM);%码元长度

%-------------------------------------------------------------------

%QAM信号放缩至与发送端相同比例

data_temp=data_QAM(find(real(data_QAM>0) ));

aver=mean(real(data_temp));

data_Qam_temp=data_QAM/aver*(2^(k/2-1));

%------------------------------------------------------------------------

%平移到第一象限

data_Qam_temp2=(data_Qam_temp+(2^(k/2)-1 )*(1+j))/2;

%----------------------------------------------------------------------

%将实部虚部分别映射为二进制数据

%实部

data_real=round(real(data_Qam_temp2));%实部判决

data_real(find(data_real>(2^(k/2)-1)))=2^(k/2)-1 ;%大于2^(k/2)-1的数据判定为2^(k/2)-1

data_real(find(data_real<0))=0;%小于0的数据判为0

bit_real=abs(dec2bin(data_real))-'0';

%虚部

data_imag=round(imag(data_Qam_temp2));%虚部判决

data_imag(find(data_imag>(2^(k/2)-1)))=2^(k/2 )-1;%大于2^(k/2)-1的数据判定为2^(k/2)-1 data_imag(find(data_imag<0))=0;%小于0的数

据判为0

bit_imag=abs(dec2bin(data_imag))-'0';

%------------------------------------------------------------------------

%还原为二进制比特流

bit_rec=[bit_real,bit_imag]';

data_out=reshape(bit_rec,1,data_len*k);

%-------------------------------------------------------------------------------------------------------------

%

% QAM调制程序,实现二进制到MQam调制

% 入口参数:binary:二进制数据% M_QAM:MQAM中M的大小

% 返回参数:MQAM码元

%------------------------------------------------------------------------

function data_M = QamMod(binary,M_QAM)

k=log2(M_QAM);%每个M进制码元的bit数

data_len=length(binary);%比特长度

binary_rec=reshape(binary,k,data_len/k)';%转化为data_len/k行,k列,的矩阵,以便转化为16进制M进制

%计算实部

data_str1=num2str(binary_rec(:,1:k/2));

data_m_real=bin2dec(data_str1);

%计算虚部

data_str2=num2str(binary_rec(:,k/2+1:k)); data_m_imag=bin2dec(data_str2);

%实部虚部映射到MQam

data_M=((data_m_real*2-2^(k/2)+1)+j*(data_m _imag*2-2^(k/2)+1)).';

%---------------------------------------------------------------------------------

%% 星形16QAM映射

function data_m16 = SrarQamMod(binary)

%binary=randint(1,100);%产生随机序列

data_len=length(binary);%比特长度

binary_rec=reshape(binary,4,data_len/4)';%转化为data_len/4行,4列,的矩阵,以便转化为16进制

data_str=num2str(binary_rec);

data_dec=bin2dec(data_str);

data_mm16=(floor(data_dec/8)+1).*exp(j*45/18 0*pi*mod(data_dec,8));

data_m16=reshape(data_mm16,1,data_len/4);

%------------------------------------------------------------------------------

%% 星形16QAM解调

function data_bit = StarQamDemod(qam_rev) %qam_rev=xing_qam16_noise(1:10);

am=abs(qam_rev);%幅度判定

am(find(am>2))=2;%幅度大于2的判定为2 am(find(am<1.5))=1;%幅度大于2的判定为2

%相位判定

ang=angle(qam_rev)/pi*180;%将-180度到0度变为180度到360度

ang(find(ang<0))=ang(find(ang<0))+360;

ang_n=round(ang/45);

ang_n(find(ang_n>7))=0;

data_dec=8*(round(am)-1)+ang_n;

%data_dec(find(data_dec>15))=15;%大于15的判定为15

%data_dec(find(data_dec<0))=0;%小于0的判定为0

data_bit_rec=dec2bin(data_dec);

data_bit=reshape(data_bit_rec',1,length(qam_re v)*4)-'0';

16QAM-星形和矩形星座图调制解调MATLAB代码

16QAM-星形和矩形星座图调制解调MATLAB代码

%% ------------------------------------------------------------ % 软件无线电课程设计 % % 方形、星形16QAM调制解调仿真% %%------------------------------------------------------------ %%主程序 clc clear %% 定义参数 fd=250*10^6; %码元速率250M fs=2500*10^6; %滤波器采样率 fc=2500*10^6; %载波频率2.5G f=10000*10^6; %对载波采样 data_len=200000; %数据长度 sym_len=data_len/4; %码元序列长度 M_QAM=16;%QAM数 k=log2(M_QAM);

SNR=1:12;%白噪声信噪比, %% ------------------------------------------------------------ bit_tx=randint(1,data_len);%产生随机序列echo off; rec_qam16=QamMod(bit_tx,16); %方形16QAM调制 star_qam16=SrarQamMod(bit_tx); %星形16QAM调制 base_rec=base_shape(fd,fs,f,rec_qam16); %基带成型滤波 base_star=base_shape(fd,fs,f,star_qam16); %基带成型滤波 for i=1:length(SNR) %信噪比从1dB到12dB计算误码率 SNR_=i %方形映射16QAM

matlab相关图形实现代码

根据数据点绘制饼图和针状图: x=[1 2 3 4 5 6]; >> subplot(2,2,1);pie(x); >> subplot(2,2,2);pie3(x); >> subplot(2,2,3);stem(x); >>subplot(2,2,4);stem3(x); 5% 10% 14% 19% 24% 29% 24% 29% 19% 5%14% 10%0 2 4 6 2 4 6 5 10 01 2 05 10

根据数据点绘制向量场图、羽状图和罗盘图: x=[1 2 3 4 5 6];y=[1 2 3 4 5 6]; u=[1 2 3 4 5 6];v=[1 2 3 4 5 6]; subplot(2,2,1);quiver(x,y,u,v); subplot(2,2,2);quiver(x,y,u,v,'r'); subplot(2,2,3);feather(u,v); subplot(2,2,4);compass(u,v); 024680 246 802468 246 80 5 10 15 2 4 6 5 10 30 210 60240 90270 120 300 150330 180

rand(m,n)产生m ×n 均匀分布的随机矩阵,元素取值在0.0~1.0。 randn 函数:产生标准正态分布的随机数或矩阵的函数。 Y = randn(m,n) 或 Y = randn([m n])返回一个m*n 的随机项矩阵。 > theta=10*rand(1,50); %确定50个随机数theta >> Z=peaks; %确定Z 为峰值函数peaks >> x=0:0.01:2*pi;y=sin(x); %确定正弦函数数据点x.y >> t=randn(1000,1); %确定1000个随机数t >> subplot(2,2,1);rose(theta); %关于(theta )的玫瑰花图 >> subplot(2,2,2);area(x,y); %关于(x,y)的面积图 >> subplot(2,2,3);contour(Z); %关于Z 的等值线图(未填充) >> subplot(2,2,4);hist(t); %关于t 的柱状图 5 10 30 210 60 240 90270 120300150330 18000246 -1 -0.500.5 110 20 30 40 10 2030 40-4 -2 2 4 100 200 300

程序文件流程图

目录 8.2.3.4 a.质量手册编号 (2) 8.2.3.4 b.程序文件编号 (2) 8.2.3.4 d.质量记录编号 (2) 8.2附图 1:组织(及所属部门)制订、发放的文件受控流程图 (3) 8.2附图 2:外来受控文件受控流程图 (4) 8.3.2质量记录控制流程图 (5) 8.4.2内部质量审核工作流程图 (6) 8.5.2 6.10进货检验的不合格品控制程序 (7) 8.5.2 6.10产品已交付和使用时发现的不合格品控制程序 (8) 8.5.2产品最终检验的不合格品控制程序流程图 (9) 8.5.2产品实现过程中不合格品控制程序流程图 (10) 8.6.2A类纠正措施流程图 (11) 8.6.2B类纠正措施 (12) 8.6.2C类纠正措施 (13) 8.7.2《质量情况通报》的编制、发放、回收、处理 (14) 8.7.2财务状况预警系统 (15) 8.7.2预防措施的制订、实施和评价 (16) 8.8.2管理评审控制程序流程图 (17) 8.9.2人员招聘录用程序流程图 (18) 8.9.2培训程序流程图 (19) 8.9.2考核程序流程图 (20) 8.11.2产品实现过程策划程序流程图 (21) 8.11.2策划依据 (22) 8.12.2产品要求的识别与评审过程 (23) 8.12.2产品合同修改过程 (24) 8.12.2市场信息控制过程 (25) 8.13.2设计和开发控制程序 (26) 8.14.2采购控制程序流程图 (27) 8.15.2生产运作程序流程图 (28) 8.17.2测量和监控策划程序 (29) 8.18.2体系业绩的测量和监控过程程序 (30) 8.19.2过程的测量、监控和分析程序流程图 (31) 8.20.2产品测量和监控程序流程图 (32) 8.21.2持续改进过程控制程序 (33)

matlab,isrgb函数源代码

function y = isrgb(x) %ISRGB Return true for RGB image. % FLAG = ISRGB(A) returns 1 if A is an RGB truecolor image and % 0 otherwise. % % ISRGB uses these criteria to determine if A is an RGB image: % % - If A is of class double, all values must be in the range % [0,1], and A must be M-by-N-by-3. % % - If A is of class uint8 or uint16, A must be M-by-N-by-3. % % Note that a four-dimensional array that contains multiple RGB % images returns 0, not 1. % % Class Support % ------------- % A can be of class uint8, uint16, or double. If A is of % class logical it is considered not to be RGB. % % See also ISBW, ISGRAY, ISIND. % Copyright 1993-2003 The MathWorks, Inc. % $Revision: 1.15.4.2 $ $Date: 2003/08/23 05:52:55 $ wid = sprintf('Images:%s:obsoleteFunction',mfilename); str1= sprintf('%s is obsolete and may be removed in the future.',mfilename); str2 = 'See product release notes for more information.'; warning(wid,'%s\n%s',str1,str2); y = size(x,3)==3; if y if isa(x, 'logical') y = false; elseif isa(x, 'double') % At first just test a small chunk to get a possible quick negative m = size(x,1); n = size(x,2); chunk = x(1:min(m,10),1:min(n,10),:); y = (min(chunk(:))>=0 && max(chunk(:))<=1); % If the chunk is an RGB image, test the whole image

数字通信中几种调制方式的星座图解析

数字通信中几种调制方式的星座图由于实际要传输的信号(基带信号)所占据的频带通常是低频开始的,而实际通信信道往往都是带通的,要在这种情况下进行通信,就必须对包含信息的信号进行调制,实现基带信号频谱的搬移,以适合实际信道的传输。即用基带信号对载波信号的某些参量进行控制,使载波的这些参量随基带信号的变化而变化。因为正弦信号的特殊优点(如:形式简单,便于产生和接受等),在大多数数字通信系统中,我们都选用正弦信号作为载波。显然,我们可以利用正弦信号的幅度,频率,相位来携带原始数字基带信号,相对应的分别称为调幅,调频,调相三种基本形式。当然,我们也可以利用其中二种方式的结合来实现数字信号的传输,如调幅-调相等,从而达到某些更加好的特性。一.星座图基本原理一般而言,一个已调信号可以表示为:(1)上式中,是低通脉冲波形,此处,我们为简单处理,假设,,即是矩形波,以下也做同样处理。假设一共有(一般总是2的整数次幂,为2,4,16,32等等)个消息序列,我们可以把这个消息序列分别映射到载波的幅度,频率和相位上,显然,必须有才能实现这个信号的传输。当然,我们也不可能同时使用载波信号的幅度、频率和相位三者来同时携带调制信号,这样的话,接收端的解调过程将是非常复杂的。其中最简单的三种方式是: (1.当和为常数,即时,为幅度调制(ASK。 (2.当和为常数,即时,为频率调制(FSK。(3.当和为常数,即时,为相位调制(PSK。我们也可以采取两者的结合来传输调制信号,一般采用的是幅度和相位结合的方式,其中使用较为广泛的一项技术是正交幅度调制(MQAM。我们把(1)式展开,可得:(2)根据空间理论,我们可以选择以下的一组基向量:其中是低通脉冲信号的能量,。这样,调制后的信号就可以用信号空间中的向量来表示。当在二维坐标上将上面的向量端点画出来时,我们称之为星座图,又叫矢量图。也就是说,星座图不是本来就有的,只是我们这样表示出来的。星座图对于判断调制方式的误码率等有很直观的效用。由此我们也可以看出,由于频率调制时,其频率分量始终随着基带信号的变化而变化,故而其基向量也是不停地变化,而且,此时在信号空间中的分量也为一个确定的量。所以,对于频率调制,我们一般都不讨论其星座图的。二.星座图的

MATLAB程序代码

MATLAB 程序代码以及运行结果function [ ]= xy_1( A ) % Detailed explanation goes here x0=653.779 y0=604.47 %%%JD0的坐标 x1=757.119 y1=569.527 %%%JD1的坐标 dx=x0-x1 dy=y0-y1 L=(dx^2+dy^2)^0.5 %JD1到ID2的距离 T=T1(12,28,37) %%%切线长 xk0=T-L yk0=0 %JD2的局部坐标 c=0.9473 s=-0.3203 %%%预设cos和sin的值 %求左端缓和曲线坐标 for l=0:10:40 x=l-(l^5)/(40*(A^2))+l^9/(3456*(A^4)) %求左端缓和曲线X局部坐标 y=l^3/(6*A)-(l^7)/(336*(A^3)) %求左端缓和曲线Y局部坐标 dxk=x-xk0 dyk=y-yk0 B=[x0;y0]+[c,-s;s,c]*[dxk;dyk] %进行坐标换算 end end function [ T1 ] = T1( a,b,c) %求左端切线长 % Detailed explanation goes here A=a+b/60+c/3600 r=750 p1=p(40,750) p2=p(30,750) m1=m(40,750) T1=(r+p2-(r+p1)*cosd(A))/sind(A)+m1 end

function x = JZ1( ) %左端坐标系坐标转换矩阵 % Detailed explanation goes here x0=653.779 y0=604.47 %%%JD0的坐标 x1=757.119 y1=569.527 %%%JD1的坐标 dx=x0-x1 dy=y0-y1 L=(dx^2+dy^2)^0.5 %JD1到ID2的距离T=T1(12,28,37) %%%切线长 xk0=T-L yk0=0 %JD0的局部坐标 xk1=T yk1=0 %JD1的局部坐标 dxk=xk0-xk1 dyk=yk0-yk1 A=[dxk,-dyk;dyk,dxk] b=[dx,dy]' x=inv(A)*b %依次输出cos、sin 的值 end xy_1(30000) A = 30000 x0 = 653.7790 y0 = 604.4700 x1 =

matlab代码大全

MATLAB主要命令汇总 MATLAB函数参考 附录1.1 管理用命令 函数名功能描述函数名功能描述 addpath 增加一条搜索路径 rmpath 删除一条搜索路径 demo 运行Matlab演示程序 type 列出.M文件 doc 装入超文本文档 version 显示Matlab的版本号 help 启动联机帮助 what 列出当前目录下的有关文件 lasterr 显示最后一条信息 whatsnew 显示Matlab的新特性 lookfor 搜索关键词的帮助 which 造出函数与文件所在的目录 path 设置或查询Matlab路径 附录1.2管理变量与工作空间用命令 函数名功能描述函数名功能描述 clear 删除内存中的变量与函数 pack 整理工作空间内存 disp 显示矩阵与文本 save 将工作空间中的变量存盘 length 查询向量的维数 size 查询矩阵的维数 load 从文件中装入数据 who,whos 列出工作空间中的变量名 附录1.3文件与操作系统处理命令 函数名功能描述函数名功能描述 cd 改变当前工作目录 edit 编辑.M文件 delete 删除文件 matlabroot 获得Matlab的安装根目录 diary 将Matlab运行命令存盘 tempdir 获得系统的缓存目录 dir 列出当前目录的内容 tempname 获得一个缓存(temp)文件 ! 执行操作系统命令 附录1.4窗口控制命令 函数名功能描述函数名功能描述 echo 显示文件中的Matlab中的命令 more 控制命令窗口的输出页面format 设置输出格式 附录1.5启动与退出命令 函数名功能描述函数名功能描述 matlabrc 启动主程序 quit 退出Matlab环境 startup Matlab自启动程序 附录2 运算符号与特殊字符附录 2.1运算符号与特殊字符 函数名功能描述函数名功能描述

矢量调制星座图实验

实验三、矢量调制星座图实验 一、实验目的 1、掌握星座图的概念、星座图的产生原理及方法, 2、了解星座图的作用及工程上的应用。 二、实验内容 1、观察QPSK、OQPSK、MSK、GMSK基带信号的星座图。 2、比较各星座图的不同及他们的意义。 三、基本原理 星座图可以看成数字信号的一个“二维眼图”阵列,同时符号在图中所处的位置具有合理的限制或判决边界。代表各接收符号的点在图中越接近,信号质量就越高。由于屏幕上的图形对应着幅度和相位,阵列的形状可用来分析和确定系统或信道的许多缺陷和畸变,并帮助查找其原因。 星座图对于识别下列调制问题相当有用: * 幅度失衡 * 正交误差 * 相关干扰 * 相位噪声、幅度噪声 * 相位误差 * 调制误差比 在数字调制中,我们可以通过星座图来观察相位的变化、噪声干扰、各矢量点之间的相位转移轨迹等状况,通过星座图,我们可以很容易地看出各矢量调制的频谱利用率情况,应该说,改变基带信号的相位转移轨迹也就改变了调制信号的频谱特性。 星座显示是示波器显示的数字等价形式,将正交基带信号的I和Q两路分别接入示波器的两个输入通道,通过示波器的“X-Y”的功能即可以很清晰地看到调制信号的星座图。 我们知道QPSK信号可以用正交调制方法产生。在它的星座图中,四个信号点之间任何过渡都是可能的,如图7-2(a)所示。在这正方形星座图中对角过渡,必将产生180度相移,此时经限带后所造成的包络起伏最大。如果在正交调制时,将正交路基带信号相对于同相路

基带信号延时一个信息间隔,即符号间隔的一半,则有可能减小包络起伏。这种将正交路延时一段时间的调制方法称为偏移四相相移键控,常记作OQPSK ,又称为参差四相相移键控(SQPSK )。 将正交路信号偏移T 2 /2的结果是消除了已调信号中突然相移180度的现象,每隔T 2 /2信号相位只可能发生±90度的变化。因而星座图中信号点只能沿正方形四边移动,如图7-2(b )所示。滤波后的OQPSK 7-1中比值为无限大的情形。 图7-1 QPSK 信号限带前后的波形 (a )QPSK (b )OQPSK (c )MSK 图7-2 相位转移图 波形的跳跃与弯曲是由于载波相位不连续变化所引起的。采用PSK 调制方式时,在信号点配置图上信号的相位从一点转到另一点会发生瞬时变动,相位的不连续性是不可避免的。因此,只要采用PSK 调制方式,就会出现旁瓣。 MSK 信号配置图如图7-2(c)所示,1比特区间仅使用圆周的1/4,信号点必是轴上4个点中任何一个,因此,相位必然连续。采用MSK 旁瓣降低得非常明显,即使不使用截止特性较好的带通滤波器,也能获得邻道干扰少的调制信号。对MSK 稍加改进就可以获得较少旁瓣的调制方式。由MSK 信号点配置图可知,调制时出现旁瓣是由于调制载波相位急剧变化所引起的。MSK 的相位变化是连续的,但相位变化速率(相位的一次微分)在比特变化点变成不连续。要使相位的一次微分连续,相位点必须以恒定速度旋转,若接近比特变化点, 滤波后 QPSK

Matlab程序代码

Matlab程序代码: clc; clear; N=20; T=0.1 t=0:T:N m=length(t) syms x1 x2 x3 fx=[0;x1+x2^2;x1-x2] gx=[exp(x2);exp(x2);0] hx=x3; R=10*eye(1) Q=[10 0 0;0 1 0;0 0 1] A=[0 1 0;0 0 1;0 0 0] B=[0;0;1] SS=B*inv(R)*B' [p1,p2,lamp,perr,wellposed,P]=aresolv(A,Q,SS) z1=hx z2=[diff(hx,x1) diff(hx,x2) diff(hx,x3)]*fx z3=[diff(z2,x1), diff(z2,x2), diff(z2,x3)]*fx ax=[diff(z3,x1), diff(z3,x2), diff(z3,x3)]*fx bx=[diff(z3,x1), diff(z3,x2), diff(z3,x3)]*gx z=[z1;z2;z3] k=inv(R)*B'*P %diff(z)=A*z+B*v=(A-B*K)*Z %x(0)=[1;0;0] abk=A-B*k x1(1)=1 x2(1)=0 x3(1)=1 z1(1)=x3(1) z2(1)=x1(1)-x2(1) z3(1)=-(x1+x2^2) for i=2:m z1(i)=z1(i-1)+T*(abk(1,1)*z1(i-1)+abk(1,2)*z2(i-1)+abk(1,3)*z3(i-1)) z2(i)=z2(i-1)+T*(abk(2,1)*z1(i-1)+abk(2,2)*z2(i-1)+abk(2,3)*z3(i-1)) z3(i)=z3(i-1)+T*(abk(3,1)*z1(i-1)+abk(3,2)*z2(i-1)+abk(3,3)*z3(i-1))

程序设计流程图.doc

程序设计流程图 程序设计流程图 程序设计的基本过程 (1)分析需求:了解清楚程序应有的功能。 (2)设计算法:根据所需的功能,理清思路,排出完成功能的具体步骤,其中每一步都应当是简单的、确定的。这一步也被称为逻辑编程。 (3)编写程序:根据前一步设计的算法,编写符合C++语言规则的程序文本。 (4)输入与编辑程序:将程序文本输入到计算机内,并保存为文件,文件名后缀为.cpp 。 至此,产生了完整的程序文本,被称为源程序或源代码。保存源程序的文件(例如前面的c:\student\ch1_01.cpp)称为源程序文件,简称源文件,文件名的后缀是.cpp 。 (5)编译(Compile):把C++程序编译成机器语言程序。 编译产生的程序称为目标程序,目标程序被自动保存为文件,这一文件称为目标文件,文件名的后缀是.obj 。 VC++进行编译的依据是源程序,如果源程序中的符号、词语、整体结构等有差错,超出了VC++的理解能力,VC++就无法完成编译,这样的差错称为语法错误。一旦发现语法错误,VC++就不生成目标文件,并在窗口下方列出错误;如果没有语法错误,则显示0 error(s) ,并生成目标文件,允许继续进行后面的步骤。 编译没有出现错误,仅仅说明程序中没有语法错误。 (6)生成执行程序:从目标文件进一步连接生成Windows环境下的可执行文件,即文件名后缀为.exe 的文件。

由于可执行文件是由若干个文件拼接而成的,其中不但有目标文件,还有另一些标准的库文件,一些规模较大的程序还会有多个目标文件,所以这一步骤又被称为连接(Link)。 (7)运行:在Windows环境中使用可执行文件。这是程序设计的最终目的。这一步也常被称为Run 。 程序设计流程图: 1.程序设计的流程图 2.程序结构流程图 3.程序算法描述流程图 4.程序算法流程图 5.浅谈程序设计的心得

几种常见窗函数及其MATLAB程序实现

几种常见窗函数及其MATLAB程序实现 2013-12-16 13:58 2296人阅读评论(0) 收藏举报 分类: Matlab(15) 数字信号处理中通常是取其有限的时间片段进行分析,而不是对无限长的信号进行测量和运算。具体做法是从信号中截取一个时间片段,然后对信号进行傅里叶变换、相关分析等数学处理。信号的截断产生了能量泄漏,而用FFT算法计算频谱又产生了栅栏效应,从原理上讲这两种误差都是不能消除的。在FFT分析中为了减少或消除频谱能量泄漏及栅栏效应,可采用不同的截取函数对信号进行截短,截短函数称为窗函数,简称为窗。 泄漏与窗函数频谱的两侧旁瓣有关,对于窗函数的选用总的原则是,要从保持最大信息和消除旁瓣的综合效果出发来考虑问题,尽可能使窗函数频谱中的主瓣宽度应尽量窄,以获得较陡的过渡带;旁瓣衰减应尽量大,以提高阻带的衰减,但通常都不能同时满足这两个要求。 频谱中的如果两侧瓣的高度趋于零,而使能量相对集中在主瓣,就可以较为接近于真实的频谱。不同的窗函数对信号频谱的影响是不一样的,这主要是因为不同的窗函数,产生泄漏的大小不一样,频率分辨能力也不一样。信号的加窗处理,重要的问题是在于根据信号的性质和研究目的来选用窗函数。图1是几种常用的窗函数的时域和频域波形,其中矩形窗主瓣窄,旁瓣大,频率识别精度最高,幅值识别精度最低,如果仅要求精确读出主瓣频率,而不考虑幅值精度,则可选用矩形窗,例如测量物体的自振频率等;布莱克曼窗主瓣宽,旁瓣小,频率识别精度最低,但幅值识别精度最高;如果分析窄带信号,且有较强的干扰噪声,则应选用旁瓣幅度小的窗函数,如汉宁窗、三角窗等;对于随时间按指数衰减的函数,可采用指数窗来提高信噪比。表1 是几种常用的窗函数的比较。 如果被测信号是随机或者未知的,或者是一般使用者对窗函数不大了解,要求也不是特别高时,可以选择汉宁窗,因为它的泄漏、波动都较小,并且选择性也较高。但在用于校准时选用平顶窗较好,因为它的通带波动非常小,幅度误差也较小。

星座图详解

数字通信中几种调制方式的星座图 由于实际要传输的信号(基带信号)所占据的频带通常是低频开始的,而实际通信信道往往都是带通的,要在这种情况下进行通信,就必须对包含信息的信号进行调制,实现基带信号频谱的搬移,以适合实际信道的传输。即用基带信号对载波信号的某些参量进行控制,使载波的这些参量随基带信号的变化而变化。因为正弦信号的特殊优点(如:形式简单,便于产生和接受等),在大多数数字通信系统中,我们都选用正弦信号作为载波。显然,我们可以利用正弦信号的幅度,频率,相位来携带原始数字基带信号,相对应的分别称为调幅,调频,调相三种基本形式。当然,我们也可以利用其中二种方式的结合来实现数字信号的传输,如调幅-调相等,从而达到某些更加好的特性。 一.星座图基本原理 一般而言,一个已调信号可以表示为: ()()cos(2)N m n k s t A g t f t π?=+ 0t T ≤< (1) 0000 1,2......1,2.......1,2........1,2........N N m m n n k k ==== 上式中,()g t 是低通脉冲波形,此处,我们为简单处理,假设()1g t =,0t T <≤,即()g t 是矩形波,以下也做同样处理。假设一共有0N (一般0N 总是2的整数次幂,为2,4,16,32等等)个消息序列,我们可以把这0N 个消息序列分别映射到载波的幅度m A ,频率n f 和相位k ?上,显然,必须有 0000N m n k =?? 才能实现这0N 个信号的传输。当然,我们也不可能同时使用载波信号的幅度、频率和相位三者来同时携带调制信号,这样的话,接收端的解调过程将是非常复杂的。其中最简单的三种方式是: (1).当n f 和k ?为常数,即0000,1,1m N n k ===时,为幅度调制(ASK)。 (2).当m A 和k ?为常数,即00001,,1m n N k ===时,为频率调制(FSK)。 (3).当m A 和n f 为常数,即00001,1,m n k N ===时,为相位调制(PSK)。 我们也可以采取两者的结合来传输调制信号,一般采用的是幅度和相位结合的方式,其中使用较为广泛的一项技术是正交幅度调制(MQAM)。 我们把(1)式展开,可得:

基于matlab的计算器编程附代码

1.需求分析 本次的实验要求是设计一个计算器,主要功能如下: (1)实现基本数学运算(加减乘除等),而且要能进行混合运算 (2)实现部分函数功能,如求平方根、求倒数等 (3)能实现小数运算 界面与标准计算器界面类似 根据要求以及以前的学习情况,决定使用matlab进行编程。Matlab强大的计算功能以及便捷的GUI设计,可以较为简便的实现所要求的功能。按照要求,数据输入和输出支持小数点,支持四则混合运算,决定使用如下几个数据进行分析:(1+3)*5 Sqrt(4) 1/2 Sin4 用以检验是否可以进行加减乘除四则运算、平方根、倒数、正弦的运算。 2.程序设计 M atlab的程序设计较为简便,用GUI设计出一个计算器的模型,然后系统会自动生成一个框架,在框架中,写入每一个按键对应的程序就可以实现功能。 3.调式分析 编程的过程中遇到的问题不是很多,基本就是找要实现各个功能的子程序,通过上网和去图书馆,加上自己的编写,终于实现了实验要求的功能。但是有一点很重要,matlab不支持中文,所以从路径到文件名必须是全英文的,不然就无法识别。此外,给每个按键命名也是很重要的,不然在生成的程序框架里面,就无法识别各个按键的作用,编写程序的时候也就无法做到一一对应。 4.使用说明 程序的使用比较简单,由于是可视化界面,直接打开matlab,然后建立一个GUI 工程,再打开生成的fig文件,就是一个计算器的界面,直接按照市面上卖的计算器的

方法,按键使用即可。 5.测试结果 计算结果为20 4sqrt=2 Sin4结果为 1/2=0.5 经过计算,这些结果均与实际结果相吻合,计算器的功能实现的较为完好。 6.心得体会 本次试验由于不限制语言,于是计算功能强大,操作简便的matlab变成了首选,matlab的GUI设计,操作是较为简单的,首先建立一个GUI工程,然后用可视化界面,

VBA程序设计用例:程序流程图及程序代码

VBA程序教学用例 【例1】求解一元二次方程Ax2+Bx+C=0。 顺序结构的VBA程序: SUB JFC1() A = Sheets("解一元二次方程").Cells(1, 2) B = Sheets("解一元二次方程").Cells(2, 2) C = Sheets("解一元二次方程").Cells(3, 2) X1=(-B+SQR(B^2-4*A*C))/2/A X2=(-B-SQR(B^2-4*A*C))/2/A DEBUG.PRINT “X1=”,X1 DEBUG.PRINT “X2=”,X2 END SUB 提示:先将三个系数A、B、C存放到表"解一元二次方程"的单元格B1:B3中,运行结果在立即窗口中(可用CTRL+G组合键打开立即窗口)。 带判断条件的VBA程序: Sub JFC2() A = Sheets("解一元二次方程").Cells(1, 2) B = Sheets("解一元二次方程").Cells(2, 2) C = Sheets("解一元二次方程").Cells(3, 2) If B * B - 4 * A * C >= 0 Then Sheets("解一元二次方程").Cells(4, 2) = (-B + Sqr(B ^ 2 - 4 * A * C)) / 2 / A Sheets("解一元二次方程").Cells(5, 2) = (-B - Sqr(B ^ 2 - 4 * A * C)) / 2 / A Else Sheets("解一元二次方程").Cells(4, 2) = "此方程无实根" Sheets("解一元二次方程").Cells(5, 2) = "此方程无实根" End If End Sub 提示:先将三个系数A、B、C存放到表"解一元二次方程"的单元格B1:B3中,运行结果在B4:B5中)。

(完整word版)16QAM_星形和矩形星座图调制解调MATLAB代码

%% ------------------------------------------------------------ % 软件无线电课程设计 % % 方形、星形16QAM调制解调仿真 % %%------------------------------------------------------------ %%主程序 clc clear %% 定义参数 fd=250*10^6; %码元速率250M fs=2500*10^6; %滤波器采样率 fc=2500*10^6; %载波频率2.5G f=10000*10^6; %对载波采样 data_len=200000; %数据长度 sym_len=data_len/4; %码元序列长度 M_QAM=16;%QAM数 k=log2(M_QAM); SNR=1:12;%白噪声信噪比, %% ------------------------------------------------------------ bit_tx=randint(1,data_len);%产生随机序列 echo off; rec_qam16=QamMod(bit_tx,16); %方形16QAM调制 star_qam16=SrarQamMod(bit_tx); %星形16QAM调制 base_rec=base_shape(fd,fs,f,rec_qam16); %基带成型滤波 base_star=base_shape(fd,fs,f,star_qam16); %基带成型滤波 for i=1:length(SNR) %信噪比从1dB到12dB计算误码率SNR_=i %方形映射16QAM rf_rec_qam16=CarrierMod(fc,f,base_rec); %载波调制 rf_rec_qam16_n=awgn(rf_rec_qam16,SNR(i),'measured'); %加噪声 [rec_qam16_rx base_rec_rx]=CarrierDemod(fd,fs,fc,f,rf_rec_qam16_n); %载波解调bit_rec_rx=QamDemod(rec_qam16_rx,16); %MQAM解调 [num_qam16,perr_qam16_rec(i)]=biterr(bit_tx,bit_rec_rx);%误码率 qam16_data_rec(i,:)=rec_qam16_rx; %scatterplot(rec_qam16_rx); %星形映射16QAM

基于MATLAB的潮流计算源程序代码(优.选)

%*************************电力系统直角坐标系下的牛顿拉夫逊法潮流计算********** clear clc load E:\data\IEEE014_Node.txt Node=IEEE014_Node; weishu=size(Node); nnum=weishu(1,1); %节点总数 load E:\data\IEEE014_Branch.txt branch=IEEE014_Branch; bwei=size(branch); bnum=bwei(1,1); %支路总数 Y=(zeros(nnum)); Sj=100; %********************************节点导纳矩阵******************************* for m=1:bnum; s=branch(m,1); %首节点 e=branch(m,2); %末节点 R=branch(m,3); %支路电阻 X=branch(m,4); %支路电抗 B=branch(m,5); %支路对地电纳 k=branch(m,6); if k==0 %无变压器支路情形 Y(s,e)=-1/(R+j*X); %互导纳 Y(e,s)=Y(s,e); end if k~=0 %有变压器支路情形 Y(s,e)=-(1/((R+j*X)*k)); Y(e,s)=Y(s,e); Y(s,s)=-(1-k)/((R+j*X)*k^2); Y(e,e)=-(k-1)/((R+j*X)*k); %对地导纳 end Y(s,s)=Y(s,s)-j*B/2; Y(e,e)=Y(e,e)-j*B/2; %自导纳的计算情形 end for t=1:nnum; Y(t,t)=-sum(Y(t,:))+Node(t,12)+j*Node(t,13); %求支路自导纳 end G=real(Y); %电导 B=imag(Y); %电纳 %******************节点分类************************************* * pq=0; pv=0; blancenode=0; pqnode=zeros(1,nnum); pvnode=zeros(1,nnum); for m=1:nnum; if Node(m,2)==3 blancenode=m; %平衡节点编号 else if Node(m,2)==0 pq=pq+1; pqnode(1,pq)=m; %PQ 节点编号 else if Node(m,2)==2 pv=pv+1; pvnode(1,pv)=m; %PV 节点编号 end end end end %*****************************设置电压初值********************************** Uoriginal=zeros(1,nnum); %对各节点电压矩阵初始化 for n=1:nnum Uoriginal(1,n)=Node(n,9); %对各点电压赋初值 if Node(n,9)==0;

Java课程设计实验报告及全部源码流程图

课程设计 一、实验目的 1.加深对课堂讲授内容的理解,掌握解决实际应用问题时所应具有的查阅资料、技术标准和规范,以及软件编程、调试等能力,掌握面向对象的编程思想及Java语言程序设计的规律与技巧,为进一步学习web应用开发及今后从事专业工作打下基础。 2. 使用本学期学习的Java SE技术(也可以使用课堂教学中没有学习过的Java技术,但是应当以Java SE技术为主)完成多功能日历GUI程序的设计,使之具有如下基本功能:一年日历用12页显示,每页显示一个月的日历。日历可以按年或月前后翻动,能够显示当前的日期,可以为每页日历选择背景图片。 3.在完成基本功能的基础上发挥自己的想象力与创造力,使程序凸显出与众不同的特点与功能,形成本小组的特性色。 二、实验要求 1.问题描述准确、规范。 2.程序结构合理,调试数据准确、有代表性.。 3.界面布局整齐,人机交互方便。 4.输出结果正确。 5.正确撰写实验报告。 三、实验内容 编写一个GUI程序实现日历的功能。一年日历用12页显示,每页显示一个月的日历。日历可以按年或月前后翻动,能够显示当前的日期以及当前农历,可以为每页日历选择背景图片。可以实现显示时钟,时钟能进行整点报

时。可以实现备忘记事功能,能在每天添加、修改、删除记事等操作。 四、实验步骤 1.在上机实验前,小组成员进行选题讨论,确定小组感兴趣而又伸缩性强的题目多功能日历。 2.在第一次上机实验时讨论分工,分工明确之后,分头合作进行。 3.各成员完成自己的任务后,最后进行统筹合并,以及程序最后的优化。 4. 根据实验结果,写出合肥工业大学实验报告。实验报告应当包括:实验内容,程序流程图,类结构,程序清单,运行结果,以及通过上机取得的经验。 5.详细的上机实验步骤见任务分工及程序设计进度表。 五、实验结果 经过小组成员的共同努力,最终我们小组设计的多功能日历程序能够实现实验的基本要求——一年日历用12页显示,每页显示一个月的日历。日历可以按年或月前后翻动,能够显示当前的日期,可以为每页日历选择背景图片。另外,在完成基本要求的基础上,我们增添了显示农历、显示时钟、添加备忘录、修改备忘录等功能。整体程序运行流畅、功能齐全、符合操作习惯。 下面是程序运行效果截图: 日历主界面(可以实现每个月的日历,可以按年或按月前后翻动,能够显示当前日期,并能够选择背景图片):

基本粒子群算法的matlab源程序

主函数源程序(main.m) %------基本粒子群优化算法(Particle Swarm Optimization)----------- %------名称:基本粒子群优化算法(PSO) %------作用:求解优化问题 %------说明:全局性,并行性,高效的群体智能算法 %------初始格式化-------------------------------------------------- clear all; clc; format long; %------给定初始化条件---------------------------------------------- c1=1.4962; %学习因子1 c2=1.4962; %学习因子2 w=0.7298; %惯性权重 MaxDT=1000; %最大迭代次数 D=10; %搜索空间维数(未知数个数) N=40; %初始化群体个体数目 eps=10^(-6); %设置精度(在已知最小值时候用) %------初始化种群的个体(可以在这里限定位置和速度的范围)------------ for i=1:N for j=1:D x(i,j)=randn; %随机初始化位置 v(i,j)=randn; %随机初始化速度 end end %------先计算各个粒子的适应度,并初始化Pi和Pg---------------------- for i=1:N p(i)=fitness(x(i,:),D); y(i,:)=x(i,:); end pg=x(1,:); %Pg为全局最优 for i=2:N if fitness(x(i,:),D) pg=x(i,:); end end %------进入主要循环,按照公式依次迭代,直到满足精度要求------------ for t=1:MaxDT for i=1:N v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:)); x(i,:)=x(i,:)+v(i,:); if fitness(x(i,:),D) p(i)=fitness(x(i,:),D); y(i,:)=x(i,:);

软件开发流程图

软件开发流程 V1.0 目录 1.目的 (2) 2.适用围 (2) 3.定义 (2) 4.输入 (2) 5.输出 (2) 6.角色职责 (2) 7.流程图 (2) 8.流程活动说明 (2) 9.纪录和表格 (7) 10.相关文件 (7) 11.流程评测指标 (8) 12.流程负责人 (8)

1.目的 规软件开发过程,指导软件开发人员执行软件开发活动,保障软件开发的顺利进行,确保软件开发进度、开发质量,达到预期目标;并为智力资产库提供输入。 2.适用围 本流程适用于产品研发过程中所有软件(包括固件)开发活动的执行过程 3.定义 4.输入 《产品总体需求规格书》、《产品总体设计方案》 5.输出 5.1《软件概要设计报告》 5.2《软件详细设计报告》 5.3《测试报告》 5.4 源程序(代码) 5.5 可执行程序 6.角色职责 6.1 PDT经理(LPDT):根据需要参与软件过程中的评审。 6.2 系统工程师(SE):参与软件开发过程中的评审,指导QA完成评审报告; 6.3 软件工程师(SWE):编写软件概要设计报告、软件详细设计报告;进行软件编码并自测;进行单元测试、集成测试、系统测试,更新系统测试计划。 6.4 测试工程师(TE):参与制定测试计划;参与软件开发过程中的评审;参与实施单元测试、集成测试以及系统测试。 6.5 质量保证(QA):组织、监控软件开发过程中的评审,开发文档的基线化。 6.6 软件配置管理员(CMO):负责开发过程中的文档及代码的基线化。 6.7 软件需求管理员(RMO):负责开发过程中的需求跟踪。 7.流程图 见附件: 软件开发子流程-流程图。 8.流程活动说明 010 制定软件项目计划开发组组长&系统工程师&软件工程师&测试工程师 根据产品的开发计划,制定产品软件部分的开发计划,包括进度、任务安排、风险、人

相关文档
最新文档