% [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...');