How do I apply the raised cosine filter to an OQPSK signal generated by the OQPSKMOD function using the RCOSFLT function from the Communications Toolbox?
    8 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
    MathWorks Support Team
    
 am 27 Jun. 2009
  
    
    
    
    
    Bearbeitet: Tasos Giannoulis
    
 am 29 Sep. 2017
            I want to apply a raised cosine filter to pulse-shape an OQPSK signal generated from the OQPSKMOD function. OQPSK signals generated by the OQPSKMOD function inherently up-samples the input samples by 2 to model the half symbol offset. The up-sampling is done by repeating the sample twice.
However, there is a problem when pulse-shaping the OQPSK modulated signal. For example, when I use the following code:
x = randint(100,1,4);
y = real(oqpskmod(x));
rcosflt(y,2,4,'fir/sqrt',0.3,3);
The command pads two zeroes after each y sample and generates an incorrect result.
Akzeptierte Antwort
  MathWorks Support Team
    
 am 27 Jun. 2009
        The OQPSKMOD function produces two samples for each symbol while the RCOSFLT function takes one sample for each symbol. To work around this issue, manually apply a half-symbol offset to the OQPSK signal. Here are the steps:
x = randint(100,1,4);
y = oqpskmod(x);
Fs = 8; Fd = 1;
halfsym = (Fs/Fd)/2;
rolloff = 0.3; delay = 3;
zI = [rcosflt(real(y(1:2:end-1)),Fd,Fs,'normal',rolloff,delay);zeros(halfsym,1)]; % append half a symbol to real part
zQ = [zeros(halfsym,1);rcosflt(imag(y(2:2:end)),Fd,Fs,'normal',0.3,3)]; % offset imaginary part by half a symbol
z = zI + 1j * zQ; % z is the pulse-shaped OQPSK modulated signal
% Plot eye diagram
filtLoading = (delay+1)*Fs/Fd; % Don't display filter loading time
eyediagram(z(filtLoading : end-filtLoading), Fs/Fd);
0 Kommentare
Weitere Antworten (1)
  Tasos Giannoulis
    
 am 29 Sep. 2017
        
      Bearbeitet: Tasos Giannoulis
    
 am 29 Sep. 2017
  
      Indeed, this is a limitation of pre-R2017b versions of the Communications System Toolbox. However, from R2017b and on, you can use comm.OQPSKModulator and comm.OQPSKDemodulator System objects, which perform joint OQPSK modulation and filtering. Thus, upsampling is performed during the filtering operation of the modulator, not before; samples are no longer repeated.
Your code should now look like this (starting from R2017b):
x = randi([0, 3], 100, 1);
mod = comm.OQPSKModulator('PulseShape', 'Root raised cosine', 'RolloffFactor', 0.3)
y = mod(x);
plot(real(y));
0 Kommentare
Siehe auch
Kategorien
				Mehr zu Sources finden Sie in Help Center und File Exchange
			
	Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

