声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1365|回复: 3

[编程技巧] 如何加噪?在频谱图中体现出来(有代码)

[复制链接]
发表于 2010-4-20 15:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
function = qpsk(d,fb,fc,Ac,fstart,fend);
%文件名: qpsk.m
%绘制QPSK的波形图和频谱图.
%d是产生的随机信号,例如 [1 1 0 0 1 0 0 1 1 1].
%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([0,0.02,-0.2,1.2])
xlabel('Time')
ylabel('Amplitude')
title('Input Waveform')
%二进制I信道波形
subplot(3,1,2)
plot(t,mi)
axis([0,0.02,-0.2,1.2])
xlabel('Time')
ylabel('Amplitude')
title('I Channel Waveform')
%二进制Q信道波形
subplot(3,1,3)
plot(t,mq)
axis([0,0.02,-0.2,1.2])
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
回复
分享到:

使用道具 举报

发表于 2010-4-21 00:32 | 显示全部楼层

回复 楼主 康晓青 的帖子

LZ是要分享你的成果吗?
 楼主| 发表于 2010-4-21 10:04 | 显示全部楼层

回复 沙发 ChaChing 的帖子

不是   是有点不明白  加噪了在频谱图中反映不出来 不知道是不是自己加噪不对
发表于 2010-4-21 15:25 | 显示全部楼层
建议楼主说看下:loveliness:
建议提问的网友分清 编程问题 和 专业问题
http://forum.vibunion.com/forum/ ... p;extra=&page=1
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-13 18:04 , Processed in 0.074601 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表