Pre-ci test passed git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4000 818b1a75-f10b-46b9-bf7c-635c3b92a50f
73 lines
2.2 KiB
Matlab
Executable File
73 lines
2.2 KiB
Matlab
Executable File
function mat2wv(vfcSignal, sFilename, fSampleRate, bNormalize)
|
|
% mat2wv(vfcSignal, sFilename, fSampleRate, bNormalize)
|
|
% MAT2WV creates an SMU waveform file from a Matlab vector.
|
|
%
|
|
% Input parameters:
|
|
% vfcSignal: Input data vector
|
|
% sFilename: Filename of the generated waveform file
|
|
% fSampleRate: Sample rate of the signal in Hz
|
|
% bNormalize:
|
|
% True: The signal is normalized by the max. magnitude
|
|
% False: The signal is not normalized. The maximum magnitude
|
|
% of the signal shall not exceed 1.0.
|
|
% Copyright : Rohde & Schwarz GmbH & Co. KG, Munich, Germany
|
|
% File version : \main\4 21 Jul 2008 16:20:08 ramian
|
|
% Revision : V2.0
|
|
% Date : 2008/08/18 12:03:56
|
|
|
|
% Force row vector
|
|
vfcSignal = vfcSignal(:).';
|
|
|
|
% Number of samples
|
|
iNOfSamples = length(vfcSignal);
|
|
|
|
% Normalize signal
|
|
if bNormalize
|
|
|
|
fprintf('Normalize signal\n');
|
|
vfcSignal = vfcSignal / max(abs(vfcSignal));
|
|
% Remark:
|
|
% We do not normalize to max RE/IM to allow arbitrary phase offsets
|
|
% or frequency shifts without overflow
|
|
|
|
vfcSignal = vfcSignal / max(abs(vfcSignal));
|
|
|
|
% Calculate the peak value
|
|
fPeakPower = max(abs(vfcSignal).^2);
|
|
fPeakPowerdBfs = -10*log10(fPeakPower);
|
|
% Calculate the RMS value
|
|
fMeanPower = mean(abs(vfcSignal).^2);
|
|
fRMSdBfs = -10*log10(fMeanPower);
|
|
|
|
else
|
|
|
|
% Do not normalize the signal
|
|
fPeakPowerdBfs = 0;
|
|
fRMSdBfs = 0;
|
|
|
|
end
|
|
|
|
% Quantization to 16 bit
|
|
iMaxInt = 32767;
|
|
vicData = vfcSignal*iMaxInt;
|
|
clear vfcSignal;
|
|
|
|
viDataInterleaved = reshape([real(vicData);imag(vicData)],1,2*iNOfSamples);
|
|
clear vicData;
|
|
|
|
viDataInterleaved = int16(viDataInterleaved);
|
|
|
|
% Write waveform file
|
|
fid = fopen(sFilename,'w');
|
|
fprintf(fid,'%s','{TYPE: SMU-WV,0}');
|
|
fprintf(fid,'%s','{COMMENT: Generated by mat2wv.m}');
|
|
fprintf(fid,'%s',['{DATE: ' datestr(now,'yyyy-mm-dd;HH:MM:SS') '}']);
|
|
fprintf(fid,'%s',['{LEVEL OFFS: ' num2str(fRMSdBfs) ', ' num2str(fPeakPowerdBfs) '}']);
|
|
fprintf(fid,'%s',['{CLOCK: ' num2str(fSampleRate) '}']);
|
|
fprintf(fid,'%s',['{SAMPLES: ' num2str(iNOfSamples) '}']);
|
|
fprintf(fid,'%s',['{WAVEFORM-' num2str(4*iNOfSamples+1) ':#']);
|
|
fwrite(fid,viDataInterleaved,'int16');
|
|
fprintf(fid,'%s','}');
|
|
fclose(fid);
|
|
|