I have a function I am supposed to plot the amplitude spectrum of between 10MHz and 11.4MHz. This is the function: cos(6.72*(10**7*t) + 3.2*sin(5*(10**5*t))) I know what the plot is supposed to look like, but mine is completely wrong. I'm pretty sure it's a programming error, not a math/theory error because I'm doing exactly what a MatLab example is showing, but I feel like Python is doing something I'm not understanding. I'm supposed to sample this function 8192 times at 10ns apart, multiply it by a Hamming window, and plot the amplitude spectrum in dB between 10MHz and 11.4MHz. The carrier (10.7MHz) should be around 55 dB. The second pair of sidebands is the greatest amplitude at 60 dB. Then, the fifth pair of sidebands is the 20 dB point, so around 40 dB. Can anyone spot something wrong with this code that explains why mine doesn't show this?

Thanks for any help!Code:import numpy import scipy import scipy.fftpack import matplotlib import matplotlib.pyplot as plt from scipy import pi import pylab from pylab import * import cmath import sys sys.setrecursionlimit(10000) samples = 8192 #Defining the test function t = scipy.linspace(0.01, 32/390625, samples, False) #Sample samples times at 10ns apart #The samples is non-inclusive, it goes from 0 to samples-1. x_t = cos(6.72*(10**7*t) + 3.2*sin(5*(10**5*t))) #Define x(t) acc = lambda t: (x_t) #Define x[t] in terms of t as a variable in Python's eyes signal = acc(t) #Make signal a function of t plt.subplot(211) #Set up a plot plt.xlabel('Ohmega (Hz)') #Label x axis plt.ylabel('Amplitude of sampled x(t) (dB)') #Label y axis window = numpy.hamming(samples) #Make a hamming window w = scipy.linspace(0, 100*10**6, samples, False) #Create Ohmega between 1/(10ns) signal = signal * window #Multiply by the hamming window signal = scipy.fft(signal) #Take the FFT signal = abs(20*log10(signal)) #Get the magnitude in dB scale plt.xlabel('Ohmega') #Label x axis plt.ylabel('|F[w]|') #Label y axis #marker, stemlines, baseline = stem(w,signal, 'b-..') #Plot with stemlines plot(w,signal, 'b-') plt.xlim(10*10**6, 11.4*10**6) #Set x-limits plt.show() #Show the plot

EDIT:

My code now:

And the error...:Code:import numpy import scipy import scipy.fftpack import matplotlib import matplotlib.pyplot as plt from scipy import pi import pylab from pylab import * import cmath import sys sys.setrecursionlimit(10000) samples = 8192 #Defining the test function t = scipy.linspace(0.01, 32/390625, samples, False) #Sample samples times at 10ns apart #The samples is non-inclusive, it goes from 0 to samples-1. x_t = cos(6.72*(10**7*t) + 3.2*sin(5*(10**5*t))) #Define x(t) acc = lambda t: cos(6.72*(10**7*t) + 3.2*sin(5*(10**5*t))) #Define x[t] in terms of t as a variable in Python's eyes #signal = acc(t) #Make signal a function of t plt.subplot(211) #Set up a plot plt.xlabel('Ohmega (Hz)') #Label x axis plt.ylabel('Amplitude of sampled x(t) (dB)') #Label y axis window = numpy.hamming(samples) #Make a hamming window w = scipy.linspace(0.01, 100*10**6, samples, False) #Create Ohmega between 1/(10ns) signal = lambda t: abs(20*log10(scipy.fft(acc*window))) #acc = acc * window #Multiply by the hamming window #acc = scipy.fft(acc) #Take the FFT #acc = abs(20*log10(acc)) #Get the magnitude in dB scale plt.xlabel('Ohmega') #Label x axis plt.ylabel('|F[w]|') #Label y axis #marker, stemlines, baseline = stem(w,signal, 'b-..') #Plot with stemlines plot(w,signal, 'b-') plt.xlim(10*10**6, 11.4*10**6) #Set x-limits plt.show() #Show the plot

While I've seen and fixed this error before, I have no idea how to fix it now. Apparently a signal sampled 8192 times and the variable determining where it was sampled are different dimensions. I'm so lost on this one...Code:Traceback (most recent call last): File "/home/hollis/Documents/ELEN 322/ELEN_322_#2.py", line 39, in <module> plot(w,signal, 'b-') File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 2467, in plot ret = ax.plot(*args, **kwargs) File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 3893, in plot for line in self._get_lines(*args, **kwargs): File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 322, in _grab_next_args for seg in self._plot_args(remaining, kwargs): File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 300, in _plot_args x, y = self._xy_from_xy(x, y) File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 240, in _xy_from_xy raise ValueError("x and y must have same first dimension") ValueError: x and y must have same first dimension

Tweet This+ 1 thisPost To Linkedin