So the AM signal has a bandwidth of 5kHz and the carrier signal is 100kHz. I demodulate the AM signal by multiplying it to a sin function (sin(2000000*pi), same frequency with the carrier frequency).

This is my take in Matlab for the ideal:

%read in the audio

for t=1:1:size(y,1)

%low pass filter

%down sample


But when comparing to the ground truth signal, it's far from correct. Any suggestions?

  • 1
    \$\begingroup\$ What's the sample rate of the modulated carrier (Fs), and the baseband (fs)? Could you please upload the plot your code produces? It's a key piece of information regarding your question. \$\endgroup\$ – jms Oct 18 '17 at 1:39

I suspect that the problem lies in the FIR filter kernel you generate. (-10:10) generates a vector of 21 successive integers [-10, -9, -8 ... 8, 9, 10]. You then perform an elementwise multiplication of said vector by 10, resulting in the vector [-100, -90, -80 ... 80, 90, 100]. Finally you compute the sinc of each element, resulting in the vector [-0.0051, 0.0100, -0.0124 ... -0.0124, 0.0100, -0.0051]. Note that each sample is 10 rad (573 degrees) apart due to that multiplication by 10, which means that your filter is actually designed for a frequency a few times greater than the nyquist frequency at your sample rate. Probably not what you intended, and such a filter won't work at all.


Depending on the toolboxes you have, there is a amdemod function


z = amdemod(y,Fc,Fs) demodulates the amplitude modulated signal y from a carrier signal with frequency Fc (Hz). The carrier signal and y have sample frequency Fs (Hz). The modulated signal y has zero initial phase and zero carrier amplitude, so it represents suppressed carrier modulation. The demodulation process uses the lowpass filter specified by [num,den] = butter(5,Fc*2/Fs).


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.