git-svn-id: http://moon:8086/svn/matlab/trunk@157 801c6759-fa7c-4059-a304-17956f83a07c
76 lines
1.9 KiB
Matlab
Executable File
76 lines
1.9 KiB
Matlab
Executable File
% [IQ] = tx_mpsk(nBytes, nBitsPerSym, sr, fc, name, kawgn_db, ch, rs)
|
|
%
|
|
|
|
function [IQ] = tx_mpsk(nBytes, nBitsPerSym, sr, fc, name, kawgn_db, ch, rs, payload)
|
|
if fc > sr
|
|
fa = 4*fc
|
|
else
|
|
fa = 4*sr;
|
|
end;
|
|
k_am = 0.0;
|
|
f_am = 0.2;
|
|
rf_gain = 0.7;
|
|
|
|
% Write settings file
|
|
fid = fopen([name '.cfg'], 'w');
|
|
fprintf(fid, 'project : %s\n', name);
|
|
fprintf(fid, 'fa : %f\n', fa);
|
|
fprintf(fid, 'fc : %f\n', fc);
|
|
fprintf(fid, 'sr : %f\n', sr);
|
|
fprintf(fid, 'nBitsPerSym : %d\n', nBitsPerSym);
|
|
fprintf(fid, 'ch : %d\n', ch);
|
|
fprintf(fid, 'rs : %d\n', rs);
|
|
fprintf(fid, 'kawgn_db : %d\n', kawgn_db);
|
|
fclose(fid);
|
|
|
|
name_rf = sprintf('%s_rf',name);
|
|
name_i = sprintf('%s_tx_i',name);
|
|
name_q = sprintf('%s_tx_q',name);
|
|
file_rf = sprintf('%s.dat',name_rf);
|
|
file_i = sprintf('%s.dat',name_i);
|
|
file_q = sprintf('%s.dat',name_q);
|
|
|
|
if (isempty(payload))
|
|
commandStr = sprintf('mpsk_tx\\mpsk_tx.exe %g %g %g %d %d %s',fa,fc,sr, nBitsPerSym, nBytes, name);
|
|
else
|
|
commandStr = sprintf('mpsk_tx\\mpsk_tx.exe %g %g %g %d %d %s %s',fa,fc,sr, nBitsPerSym, nBytes, name, payload);
|
|
end
|
|
|
|
disp(commandStr);
|
|
dos(commandStr);
|
|
|
|
fid = fopen(file_rf, 'rb');
|
|
rfdata = fread(fid, 'float32');
|
|
fclose(fid);
|
|
|
|
dat2wav(name_i, fa, 16, 0.9);
|
|
dat2wav(name_q, fa, 16, 0.9);
|
|
|
|
if (rs==1)
|
|
rfdata = RESAMPLE(rfdata,fa,fix(1.002*fa));
|
|
end;
|
|
|
|
len = length(rfdata);
|
|
kawgn = 10^(kawgn_db/10)
|
|
awgn = sqrt(kawgn)*randn(len,1);
|
|
am = cos(2*pi*f_am/fa.*(0:len-1))';
|
|
|
|
if (ch==1)
|
|
hch_a = [1.0 0.7];
|
|
hch_b = [1];
|
|
else
|
|
hch_a = [1.0];
|
|
hch_b = [1.0];
|
|
end
|
|
|
|
rf = rf_gain.*((1+k_am*am).*filter(hch_b,hch_a,rfdata) + awgn);
|
|
rf_level = 10*log10(var(rf));
|
|
SNR_DB = round(rf_level-kawgn_db)
|
|
|
|
fid = fopen(file_rf, 'wb');
|
|
fwrite(fid, rf, 'float32');
|
|
fclose(fid);
|
|
|
|
dat2wav(name_rf, fa, 16, 0.9)
|
|
disp('Adding Noise to RF...');
|
|
|