康晓青 发表于 2010-4-20 15:18

如何加噪?在频谱图中体现出来(有代码)

function = qpsk(d,fb,fc,Ac,fstart,fend);
%文件名: qpsk.m
%绘制QPSK的波形图和频谱图.
%d是产生的随机信号,例如 .
%fb 为数据传输速率.
%fc 为载波频率.
%Ac 为载波振幅.
%fstart 频谱图的初始频率.
%fend = 频谱图的最终频率.
fb=500;
fc=1000;
Ac=1;
fstart=0;
fend=4000;
d=randint(1,10,2);%随机信号 1行10列
y = awgn(d,1000) ;
N=size(y,2);      %N为输入数据比特的数目.
if rem(N,2) == 1    %若余数为1
      N=N+1
      d(N)=0
end
N2=N/2;
B=32;            %M为每比特持续数目.
tb=1/fb;tc=1/fc;
Nc=floor(B*tc/tb); %Nc为每个载波周期的抽样数目.
step=tb/B;         %step为抽样间隔 .
%****************************创建二进制波形和调制图形*****************************
for j = 1:N
      if d(j) == 1
         for i = 1:B
                m((j-1)*B+i)=1;
         end
      else
         for i = 1:B
                m((j-1)*B+i)=-1;
         end
      end
end
for j = 1:N2      %N2=N/2
      if d(j*2-1) == 1
         for i = 1:2*B
                mi((j-1)*2*B+i)=1;                  %二进制i信道
                si((j-1)*2*B+i)=Ac*cos(2*pi*(i-1)/Nc);%调制i信道
         end
      else
         for i = 1:2*B
                mi((j-1)*2*B+i)=-1;         %二进制i信道
                si((j-1)*2*B+i)=Ac*cos(2*pi*(i-1)/Nc+pi);%调制i信道
         end
      end
      if d(j*2) == 1
         for i = 1:2*B
                mq((j-1)*2*B+i)=1;                  %二进制q信道
                sq((j-1)*2*B+i)=Ac*sin(2*pi*(i-1)/Nc);%调制q信道
         end
      else
         for i = 1:2*B
                mq((j-1)*2*B+i)=-1;                      %二进制q信道
                sq((j-1)*2*B+i)=Ac*sin(2*pi*(i-1)/Nc+pi);%调制q信道
         end
      end
end
for k=1:B*N      %M为每比特持续数目,N为输入数据比特的数目.k为持续时间
      t(k)=(k-1)*step;%step为抽样间隔,t为总时间
      s(k)=si(k)+sq(k);%s为调制信号
end
figure
%二进制波形
subplot(3,1,1)
plot(t,m)
axis()
xlabel('Time')
ylabel('Amplitude')
title('Input Waveform')
%二进制I信道波形
subplot(3,1,2)
plot(t,mi)
axis()
xlabel('Time')
ylabel('Amplitude')
title('I Channel Waveform')
%二进制Q信道波形
subplot(3,1,3)
plot(t,mq)
axis()
xlabel('Time')
ylabel('Amplitude')
title('Q Channel Waveform')
figure
%I信道调制波形
subplot(3,1,1)
plot(t,si)
xlabel('Time')
ylabel('Amplitude')
title('I Channel Modulated Waveform')
%Q信道调制波形
subplot(3,1,2)
plot(t,sq)
xlabel('Time')
ylabel('Amplitude')
title('Q Channel Modulated Waveform')
%调制波形
subplot(3,1,3)
plot(t,s)
xlabel('Time')
ylabel('Amplitude')
title('QPSK Waveform')

%*****************************Spectrum of QPSK输出频谱图   线性和分贝********************************
M1=64;      %M1每个主瓣的点的数目 = number of points per lobe.
fstep=fb/M1; %fstep为抽样间隔 = freq. step.
Nf=floor((fend-fstart)/fstep); %Nf为计算之后的频率点的总数目= total number of freq. points computed.
for i = 1:Nf
f(i)=(i-1)*fstep+fstart;
      if f(i) == fc
         S(i)=Ac^2*tb;
      else
         S(i)=(Ac^2*tb)*(sin(pi*(f(i)-fc)*2*tb)/(pi*(f(i)-fc)*2*tb))^2;
      end
end
for i = 1:Nf
dBS(i) = 10*log(S(i));
if dBS(i) < -200 dBS(i)=-200; end
end
figure
subplot(2,1,1)
plot(f,S)
xlabel('Frequency')
ylabel('Magnitude')
title('QPSK Spectrum (Linear)')
subplot(2,1,2)
plot(f,dBS)
xlabel('Frequency')
ylabel('Magnitude')
title('QPSK Spectrum (dB)')%分贝(dB)是表示相对功率或幅度电平的标准单位,换句话说,就是我们用来表示两个
                           %能量之间的差别的一种表示单位,它不是一个绝对单位。
                           %例如,电子系统中将电压、电流、功率等物理量的强弱通称为电平,电平的单位通常
                           %就以分贝表示,即事先取一个电压或电流作为参考值(0dB),用待表示的量与参考值之比
                           %取对数,再乘以20作为电平的分贝数(功率的电平值改乘10)。
end

ChaChing 发表于 2010-4-21 00:32

回复 楼主 康晓青 的帖子

LZ是要分享你的成果吗?

康晓青 发表于 2010-4-21 10:04

回复 沙发 ChaChing 的帖子

不是   是有点不明白加噪了在频谱图中反映不出来 不知道是不是自己加噪不对

ChaChing 发表于 2010-4-21 15:25

建议楼主说看下:loveliness:
建议提问的网友分清 编程问题 和 专业问题
http://forum.vibunion.com/forum/viewthread.php?tid=36746&extra=&page=1
页: [1]
查看完整版本: 如何加噪?在频谱图中体现出来(有代码)