Learn practical skills, build real-world projects, and advance your career
!pip install jovian --upgrade --quiet
import jovian
jovian.commit(project='first-steps-with-python')
import numpy as np
import cmath as c
import math as m

def calPSD(g,N,fs,w,olp):

    # defining wk
    
    wk=[]
    
    if w=='hann':
        for i in range(0,N):
            wk.append(0.5*(1-np.cos(2*np.pi*i/(N-1))))
    elif w=='hamming':
        for i in range(0,N):
            wk.append(0.54-0.46*np.cos(2*np.pi*i/(N-1)))
    elif w=='bartlett':
        if N%2==1:
            for i in range(0,m.floor((N-1)/2)+1):
                wk.append(2*i/(N-1))
            for i in range(m.floor((N-1)/2)+1,N):
                wk.append(2-2*i/(N-1))
        elif N%2==0:
            for i in range(0,m.floor((N-1)/2)+1):
                wk.append(2*i/(N-1))
            for i in range(m.floor((N-1)/2)+1,N):
                wk.append(2-2*i/(N-1))
                
    def blockify(g,N,olp):
        blocks=[]
        i=0
        o=round(N*(1-olp/100))
        while i<(len(g)):
            temp=[]
            for j in range(0,N):
                if (i+j)<len(g):
                    temp.append(g[i+j])
            blocks.append(temp)    
            i=i+o
        return blocks
                
    blocks=blockify(g,N,olp)
    
    # defining the main function
    
    if N%2==0:
        for n in range(0, N/2+1):
            for l in range(0,len(blocks)):
                e=0
                if l!=(len(blocks)-1):
                    s=0
                    for k in range(0,N):
                        s=s+wk[k]*blocks[l][k]*np.exp(-2*np.pi*j*n*k/N)
                        
                        
                elif l==(len(blocks)-1):
                    
                    
            
            
    elif N%2==1:
        for i in range(0, m.floor(N/2)+1):
            
        


f=[1,2,3,4,5,6,7,8,9,10]

def blockify(g,N,olp):
    blocks=[]
    i=0
    o=round(N*(1-olp/100))
    while i<(len(g)):
        temp=[]
        for j in range(0,N):
            if (i+j)<len(g):
                temp.append(g[i+j])
        blocks.append(temp)    
        i=i+o
    return blocks
            
a=blockify(f,3,33)
a
[[1, 2, 3], [3, 4, 5], [5, 6, 7], [7, 8, 9], [9, 10]]