記錄一個完整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;