分享

Python----matlab的兄弟语言(用python(x,y)仿真ofdm系统)

 小小锐DarkRose 2014-08-17
最近爱上Python(蟒蛇语言)这个编程语言,因为她简单,功能强大,而且还免费,网上能找到关于她的大量开源代码,因而便于学习。对于学工程,习惯用matlab作仿真的童鞋,假如想学一门语言玩编程的话,我极力推荐python!

仅仅花了一个下午就将她的语法学了一遍,因为她实在太像我比较熟的matlab了。matlab总是需要库的支持,python也是;m语言中数组为基础,python中序列、列表为基础;matlab专于做数组运算,python也有大量支持数组运算的库。

python在大量科学计算库的支持下,有了python(x,y),Spyder的编译环境后,python看起来就更像matlab了,如下图。


 
 右下角为类似matlab环境中的command窗口,左边是路径文件,中间为文本编辑窗口。


是不是开始产生兴趣了呢?学习路径如下,大量文件支持!!


1、python简明教程    http:///paper/python/ 

2、80个经典资料。入门的话,推荐下载其中的《笨办法学习python》、《常用模块详解》  http://bbs.51cto.com/thread-935214-1.html

3、python(x,y)(注意是python(x,y),它是用python专门科学计算的)http:///paper/books/scipydoc/index.html#

4、下载python(x,y)的地址 下载这个 自带PyQt、Python2.7编译器、Spyder等等  下一个顶十个 功能强大 其中包括GUI设计编程、Spyder(类似matlab环境)科学计算、原始类似Dos编程环境(强烈推荐)     http://www.


另外,有童鞋想做游戏,python也可以哦,pygame(python的一个库)帮你!


5、先当网上下一个pygame(网上很多的,这里就不给除了,木有收藏),下的时候注意自己的python编译器的版本要与自己将要下载的pygame版本对应   pygame入门神器     http:///news/361


下面就来秀秀我用python编出的简易qpsk-ofdm系统仿真吧。http:///paper/books/scipydoc/index.html#  资料学习。


import os

import numpy as np

import matplotlib.pyplot as plt

import random


#import stdin


close('all')


x=array([1,2,3,4,5,6,7,8]

)

os.system('cls')


x=x.reshape((len(x)/2,2))


x=arange(1,10001,1)

size=len(x)


print len(x)


for i in range(len(x)):

x[i-1]=random.randint(0,1)



or_bits=x

x=x.reshape((len(x)/2,2))




b=range(5000)

d=range(5000)


for i in range(5000):

m=x[i][0]

n=x[i][1]

if m==0:

m=-1

else:

m=1

if n==0:

n=-1

else:

n=1

b[i]=complex(m,n)

d[4999-i]=conjugate(b[i])

'''

x=np.linspace(0,2*np.pi,10)


y=np.sin(x)

'''


bb=range(10002)


for i in bb:

if i==0 or i==5001:

bb[i]=0

elif i<=5000:

bb[i]=b[i-1]

else:

bb[i]=d[i-5002]

cc=ifft(bb)*16


#print cc

#print len(cc)


plt.figure(figsize=(8,4))

plt.plot(real(cc))

plt.ylim(-1,1)


cc_real=real(cc)


print find(cc_real>0)


flag1=find(cc_real>0)

flag2=find(cc_real<=0)

#for i in flag:

print cc_real[flag1]

print cc_real[flag2]

cc_pos=cc_real[flag1]

cc_neg=cc_real[flag2]

cc_2=cc_real**2


print mean(cc_pos**2)

print mean(cc_neg**2)

print mean(cc_2)


pow_mean=mean(cc_2)

noise_mean=pow_mean/float(10)

print noise_mean


noise=1


def awgn(x,snr):

snr=10**(snr/10.0)

xpower=np.sum(x**2)/len(x)

npower=xpower/snr

global noise

noise=np.random.randn(len(x)) * np.sqrt(npower)

length=range(len(x))

for i in length:

x[i]=x[i]+noise[i]

return x

########################## ofdm modulation############################

tx=awgn(cc_real,11)


plt.figure(figsize=(8,4))

plt.plot(tx)

plt.ylim(-1,1)

########################## ofdm demodulation##########################

rx=tx

rx_de1=fft(rx)/float(16)


print rx_de1


rx_de2=rx_de1[1:5001]


#print len(rx_de2)

#print rx_de1[0]

#print rx_de1[5001]


print "a=",rx_de2[:]


rx_de3=arange(1,10001,1)

rx_de3=rx_de3.reshape((len(rx_de3)/2,2))


for i in range(len(rx_de3)):

rr=real(rx_de2[i])

ri=imag(rx_de2[i])

if rr<0:

rr=0

else:

rr=1

if ri<0:

ri=0

else:

ri=1

rx_de3[i][0]=rr

rx_de3[i][1]=ri

rx_de4=rx_de3.reshape(1,(len(rx_de3)*2))

gg=find(rx_de4!=or_bits)

ber_count=len(gg)

ber=ber_count/float(len(or_bits))

print ber


仿真结果如下:

 
 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多