天天看點

ASK調制的matlab代碼

記錄一個完整ASK調制過程的matlab代碼。

%E5_1_AskMod.m

function [ASK2,ASK2_filter,ASK4,ASK4_filter]=E5_1_AskMod(Len,IsPlot,IsOutput)

%産生2ASK、4ASK調制信号

%Len:碼元長度,預設值為1000

%IsPlot:是否繪圖,'1’表示繪圖,否則不繪圖

%IsOutput:是否将ASK調制資料輸出到文本檔案中,'1’表示輸出,否則不輸出

%設定函數的預設參數值

if nargin < 1

Len=1000; %資料長度為1000

IsPlot=0; %不繪圖

IsOutput=0; %不将資料寫入文本檔案中

end;

Rb=110^6; %碼元速率

Fs=8Rb; %采樣頻率

LenData=LenFs/Rb; %資料長度

Fc=7010^6; %載波頻率

Qn=8; %量化位數

a=0.8; %成形濾波器滾降因子

%産生載波信号

t=0:1/Fs:Len/Rb;

carrier=cos(2piFc*t);

carrier=carrier(1:LenData);

%産生随機分布的二進制資料

%code_2ask=randint(1,Len,2);

code_2ask=(randi(2,Len,1)-1)’;

%對基帶資料以Fs速率采樣

code_2ask_upsamp=rectpulse(code_2ask,Fs/Rb);

%對基帶資料進行成形濾波,同時進行Fs/Rb倍采樣

code_2ask_filter=rcosflt(code_2ask,1,Fs/Rb);

%産生未進行成形濾波的2ASK信号

ASK2=carrier.*code_2ask_upsamp;

%産生成形濾波後的2ASK信号

ASK2_filter=carrier.*code_2ask_filter(1:LenData)’;

%擷取2ASK信号的頻譜

ASK2_Spec=20log10(abs(fft(ASK2,1024)));

ASK2_Spec=ASK2_Spec-max(ASK2_Spec);

ASK2_filter_Spec=20log10(abs(fft(ASK2_filter,1024)));

ASK2_filter_Spec=ASK2_filter_Spec-max(ASK2_filter_Spec);

%産生随機分布的四進制資料

%code_4ask=randint(1,Len,4);

code_4ask=(randi(4,Len,1)-1)’;

%對基帶資料以Fs速率采樣

code_4ask_upsamp=rectpulse(code_4ask,Fs/Rb);

%對基帶資料進行成形濾波,同時進行Fs/Rb倍采樣

code_4ask_filter=rcosflt(code_4ask,1,Fs/Rb);

%産生未進行成形濾波的4ASK信号

ASK4=carrier.*code_4ask_upsamp;

%産生成形濾波後的4ASK信号

ASK4_filter=carrier.*code_4ask_filter(1:LenData)’;

%擷取4ASK信号的頻譜

ASK4_Spec=20log10(abs(fft(ASK4,1024)));

ASK4_Spec=ASK4_Spec-max(ASK4_Spec);

ASK4_filter_Spec=20log10(abs(fft(ASK4_filter,1024)));

ASK4_filter_Spec=ASK4_filter_Spec-max(ASK4_filter_Spec);

%繪圖

if IsPlot==1

figure(1);x=0:200;x=x/Fs*(10^6);

subplot(221);plot(x,ASK2(100:300));xlabel(‘時間(us)’);ylabel(‘幅度(v)’);

title(‘未經成形濾波的2ASK時域波形’);grid on;

subplot(222);plot((0:200),ASK2_filter(100:300));;xlabel(‘時間(us)’);ylabel(‘幅度(v)’);

title(‘成形濾波後的2ASK時域波形’);grid on;

subplot(223);plot((0:200),ASK4(100:300));;xlabel(‘時間(us)’);ylabel(‘幅度(v)’);

title(‘未經成形濾波的4ASK時域波形’);grid on;

subplot(224);plot((0:200),ASK4_filter(100:300));;xlabel(‘時間(us)’);ylabel(‘幅度(v)’);

title(‘成形濾波後的4ASK時域波形’);grid on;

figure(2);x=0:length(ASK2_Spec)-1;x=x/length(x)*Fs/10^6;
subplot(221);plot(x,ASK2_Spec);xlabel('頻率(MHz)');ylabel('幅度(dB)');
title('未經成形濾波的2ASK頻譜');grid on;
subplot(222);plot(x,ASK2_filter_Spec);xlabel('頻率(MHz)');ylabel('幅度(dB)');
title('成形濾波後的2ASK頻譜');grid on;
subplot(223);plot(x,ASK4_Spec);xlabel('頻率(MHz)');ylabel('幅度(dB)');
title('未經成形濾波的4ASK頻譜');grid on;
subplot(224);plot(x,ASK4_filter_Spec);xlabel('頻率(MHz)');ylabel('幅度(dB)');
title('成形濾波後的4ASK頻譜');grid on;
           

end;

%量化資料并寫入文本檔案中

if IsOutput1

norm_Data=ASK2/max(abs(ASK2));%歸一化處理

Q_s=round(norm_Data*(2^(Qn-1)-1));

fid=fopen(‘D:\ModemPrograms\Chapter_5\E5_1_ASKMod\ASK2.txt’,‘w’);

for i=1:length(Q_s)

B_s=dec2bin(Q_s(i)+(Q_s(i)<0)*2^Qn,Qn);

for j=1:Qn

if B_s(j)‘1’

tb=1;

else

tb=0;

end

fprintf(fid,’%d’,tb);

end

fprintf(fid,’\r\n’);

end

fprintf(fid,’;’);

fclose(fid);

norm_Data=ASK2_filter/max(abs(ASK2_filter));%歸一化處理
Q_s=round(norm_Data*(2^(Qn-1)-1));
fid=fopen('D:\ModemPrograms\Chapter_5\E5_1_ASKMod\ASK2_filter.txt','w');
for i=1:length(Q_s)
    B_s=dec2bin(Q_s(i)+(Q_s(i)<0)*2^Qn,Qn);
    for j=1:Qn
       if B_s(j)=='1'
           tb=1;
       else
           tb=0;
       end
       fprintf(fid,'%d',tb);  
    end
    fprintf(fid,'\r\n');
end
fprintf(fid,';'); 
fclose(fid);

norm_Data=ASK4/max(abs(ASK4));%歸一化處理
Q_s=round(norm_Data*(2^(Qn-1)-1));
fid=fopen('D:\ModemPrograms\Chapter_5\E5_1_ASKMod\ASK4.txt','w');
for i=1:length(Q_s)
    B_s=dec2bin(Q_s(i)+(Q_s(i)<0)*2^Qn,Qn);
    for j=1:Qn
       if B_s(j)=='1'
           tb=1;
       else
           tb=0;
       end
       fprintf(fid,'%d',tb);  
    end
    fprintf(fid,'\r\n');
end
fprintf(fid,';'); 
fclose(fid);

norm_Data=ASK4_filter/max(abs(ASK4_filter));%歸一化處理
Q_s=round(norm_Data*(2^(Qn-1)-1));
fid=fopen('D:\ModemPrograms\Chapter_5\E5_1_ASKMod\ASK4_filter.txt','w');
for i=1:length(Q_s)
    B_s=dec2bin(Q_s(i)+(Q_s(i)<0)*2^Qn,Qn);
    for j=1:Qn
       if B_s(j)=='1'
           tb=1;
       else
           tb=0;
       end
       fprintf(fid,'%d',tb);  
    end
    fprintf(fid,'\r\n');
end
fprintf(fid,';'); 
fclose(fid);
           

end;

繼續閱讀