Which physical device accomplish the task of pulse shaping?

So I'm reading a lot about DSP lately and now I'm learning about pulse shaping. I understand the way it works and how useful it is to avoid (or reduce) ISI. But, I was wondering which physical device is in charge of accomplishing such task in the transmitter? I've been doing some research but I haven't found anything that states it. I thought of the DAC, but I'm not sure how you can tell a DAC to convert digital signals to its analog counterpart with a specific waveform. Let's say I'm using a root raised cosine as pulse shaper, can the DAC output an rrc waveform?

If it's not the DAC, which one would be? And when would the conversion to analog happen? Before or after pulse shaping? (this questions is in case the DAC is not the one doing the pulse shaping task).

Thanks.

It's a combination of two processes: first, you create a discrete-time signal that is pulse-shaped. Then, the DAC converts it to an anlog signal. (And, in a radio, the analog front-end following the DAC converts it to an RF signal).

The discrete-time part is usually done as follows (using Matlab here for convenience). Assume a BPSK data vector data. First, the vector is upsampled to get the desired symbol rate. For example, if the sampling frequency is $$f_s = 100$$, and the symbol rate is $$R_s = 10$$, then you must output one symbol every $$100/10 = 10$$ samples, which means you need to insert 9 zeros between samples:

data_up = upsample(data, 10);


Then, assuming the pulse shape is stored in vector p, the pulse-shaped signal is

data_ps = conv(data_up, p);


Then, data_ps is the input to the DAC, which converts it into a continuous-time pulse-shaped baseband BPSK signal.

• Thank you, it really helped a lot! But I have two questions: 1) if you need to insert 10 zeros, it would be upsample(data, 11), wouldn't it? Or what you get from 100/10=10 means the sample + 9 zeros? 2) If fs = 12 MHz and Rs=10, then I'd need to insert 16e5 zeros? I've seen some examples about that and they consider the data vector is initially at 1 MHz, then upsample by 12, so that'd make it 12e6; but I don't know where that assumption comes from. Thanks again! – researcher9 Jul 2 at 19:00
• 1) I've edited the answer to make it clear that you need to output one data symbol each $100/10$ samples. 2) For practical purposes, you should make your sampling frequency a small factor of your symbol rate; otherwise, you end up with symbols that are too long. – MBaz Jul 2 at 21:05