⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qpsk_mod_zibian.m

📁 考虑载波的qpsk信号在瑞利信道上的仿真
💻 M
字号:
% 这个函数返回调制以后的qpsk信号;
% 这里的调制考虑了载波发送的问题;
% 编程原则是先写出基本功能,在逐步完善;



function [y_mod]=...
          qpsk_mod_ZiBian(x,fc,fs,symbol_t,theta,plot_flag)

% 注意把握好fc,fs,之间的关系,是一个四进制码元内的载波信号点
% symbol_t表示的是一个调制符号的持续时间,
% 对于使用者来说,我知道的只是:载波频率,抽样频率,调制以后的
% 符号持续时间;
% x表示的是输入的二进制序列码,是列向量,
% fc是载波频率,fs是采样频率,
% n是每一个四进制码元下拥有的载波信号采样点数;
% qpsk调制的原理很简单,第一步:完成星座图对应,
% 第二步:用这些星座图上的点乘以载波;
% 画图标志:plot_flag=1,就画图,否则不画图;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if nargin<6
    error('the input arguments are not complete');
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if size(x,1)<=size(x,2)
    x=x';
else
    x=x;
end;   % 把x变换成列向量;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 时间的设置要注意两点:采样点数和采样间隔;
n=ceil(symbol_t*fs);
t=(0:n-1)/fs;
% 一个四进制码元下的载波:
signal_i=cos(2*pi*fc*t);
signal_q=sin(2*pi*fc*t);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 注意信号的发送方向:------------------x(i+1)--x(i)---->

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 下面是调制部分:
signal_mod=[];     temp=[];
for i=1:2:(size(x,1)-1)
    % 首先是完成2,4进制的转换;
    if (x(i)==0) & (x(i+1)==0)
        signal_symbol=0;
    elseif (x(i)==1) & (x(i+1)==0)
        signal_symbol=1;
    elseif (x(i)==0) & (x(i+1)==1)
        signal_symbol=2;
    elseif (x(i)==1) & (x(i+1)==1)
        signal_symbol=3;
    else
        error('The input x are not apt to the function need');
    end;
    % 二进制码元转化为四进制符号;
    temp=[temp,signal_symbol];
    % 星座图对应;
    signal_constellation=pskmod(signal_symbol,4,theta);
    % 调制载波;
    signal_mod_i=real(signal_constellation).*signal_i;
    signal_mod_q=imag(signal_constellation).*signal_q;
    signal_mod_temp=signal_mod_i+signal_mod_q;
    signal_mod=[signal_mod,signal_mod_temp];
end;

symbol_base=temp;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    if size(signal_mod,1)<=size(signal_mod,2)
       signal_mod=signal_mod';
    else
        signal_mod=signal_mod;
    end;   % 把signal_mod变换成列向量;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    
% 在本函数的返回端得到调制好的信号;
y_mod=signal_mod;    
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    
    
    
 if plot_flag==1
    
fft_signal_mod=abs(fftshift(fft(signal_mod)));

% 画图;

figure;
subplot(221);
plot((0:size(x)-1)/fs,x); title('基带二进制信号'); 
xlabel('时间(s)'); ylabel('信号幅度');

subplot(222);
plot((0:size(signal_mod,1)-1)/fs,signal_mod);
title('调制后的信号'); xlabel('时间(s)'); ylabel('信号幅度');

subplot(223);
f_n=size(fft_signal_mod,1);
plot(fs*(-f_n/2:f_n/2-1)/f_n,fft_signal_mod);
title('qpsk调制信号的频谱'); 
xlabel('频率(Hz)'); ylabel('幅度'); axis tight; grid on;

subplot(224);
plot(fs*(-f_n/2:f_n/2-1)/f_n,20*log10(fft_signal_mod));
title('qpsk调制信号的频谱(单位(dB))'); 
xlabel('频率(Hz)'); ylabel('幅度(dB)');  grid on; 
% 这里对dB图的axis 不作限制;
 elseif plot_flag==0
 end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -