Electrical – Demodulate a AM signal from the carrier using Matlab

amdemodulationdigital modulationMATLABsignal processing

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?

Best Answer

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.