Category Archives: 个人生活

与专业无关的内容。

中国人的民族理想是什么?

周四晚上学习的时候老板谈到我国生产论文的盲目热情问题。其实当天白天我就想到类似的话题,算是不约而同,但是我想到的角度有点不一样。

就是,关于“为什么要做科研”、“做什么科研”、“怎么做科研”等原则和标准性问题,答案都不是中国人自己给的,而是看着美国以及西方发达国家的状况来定的。有很多人说,问题是在于只看到表面,学到表面。可问题是不可能学到根本呀。因为,人家国家做科研,现在演化到什么地步先不谈,以前是有明确的追求和目标的,这是跟人家的民族性格挂钩的。但中国历史上是没有过的,挨打了才看着别人跑。如果没有美国,没有这些发达国家;如果现在中国已经第一了,那中国人还要干什么吗?这是很难想象的事情,因为一直追赶别人,逻辑上是不会变成第一的。因为,你不知道终点在哪里,你以为你在现在的方向超过对手了,结果对手突然说,嘿,我宣布现在是反过来跑,你又落后啦哈哈!目标不明确,是不存在“超越”的概念的。

所以问题不在于是否被美国牵着鼻子走,而在于自己没有自己的动机。

中国人到底希望国家变成什么样?同意花这么多钱给这些博士们写论文吗?我看,至少中国人都支持努力培养出“中国人诺贝尔奖得主”。可是,这对于平民百姓,除了“脸上有光”之外,有什么实际的好处呢?出了诺奖地沟油就消失了吗?

照我说中国人从文化根源上讲就没有做科研的热情。以前中国人是很清楚知道自己要做什么的,那就是唐宋元明清。被“现代化”了之后,就不知道自己要做什么了,只能跟着美国跑了。

有个博士,整天来问我,要不要做这个实验,要不要做那个实验,这个实验结果行不行,能不能说明问题等等。这说明他自己是不知道要做什么实验的。而做什么实验是取决于他想研究什么问题,于是就说明他自己是不知道要研究什么问题的。我觉得整个国家都有这种状态,中国人自己是不知道要做什么科研的,都是要看美国人,美国人已经做了,热门了,中国人才做,不然课题说出来不好听。光听课题名称都是一堆技术名词,只能靠讲该课题是“国际热点、前沿”。说明中国人做科研不是为了格物致知,而是渴望获得他人的承认和肯定。中国人长期被否定出精神病来了。我做的这个,不是热点,不是前沿,但我偏就爱做了怎么了?老子是唯一的超级大国。这种底气,在外交上可能需要军事和经济后盾,在科研上不需要吧?

我从很早的时候开始,就已经认为,就算世界上没有别人,我也可以活得很好。我听音乐和弹琴,是我快乐,不是你快乐。中国人,在不知道世上有别的国家的年代(或者只是模糊知道点),也曾经是自己活得很好的。

波形重构程序GUI

为LAOS波形重构做了一个GUI。

波形重构GUI

除了上一篇文章提到的一些问题外,还有其他的难题。最主要的就是,当原信号的数据量特别大的时候,正弦波拟合函数和MITLaos都会出错。我设计了一个判断,适当时候把信号down sample了再做正弦波拟合和MITLaos,前者基本没问题了,但后者还是不时出问题。只要正弦波拟合没问题的话,波形重构是没问题的,没必要卡在MITLaos上。所以我打算不用MITLaos,直接在重构了的波形上求导得到G_M、G_L等参数。事实上,在程序中G_k参数就是通过直接求导得到的,结果令人满意。

波形重构代码

对真实世界的信号进行求导,需要先大幅提高信号的信噪比,否则求导运算就是一个噪音放大器。对于LAOS实验的信号,由于假设其为一系列奇次谐波的和:\sigma\left(t \right )=\sum_{n=1:\textup{odd}}^\infty\sigma_\textup{n}\sin\left(n\omega t+\delta_\textup{n} \right )。因此,可以据此直接进行波形重构。即通过FFT得到信号的谐波振幅和相位角,按照此式重构一个平滑的波型,再拿去做微分。原理很简单,但是在MATLAB里整了半天,强度是对的,但相位角永远是错的。研究了一晚上,才发现FFT得到的相位角总是少了90°,也不知道什么原因。总之加上这90°之后就完美了。为了减少日后摸索,把代码贴在这里:


clear all;close all;clc;

%============ Generate the signal for reconstruction ============%

fs=57; % sampling frequency
fi0=10/3; % input frequency

t=0:1/fs:123456/fs; % the length of signal is 12345.
t=t';
delta=[1 3 2 1];
x1=sin(2*pi*fi0*t); % the input signal is a sinusoidal wave;
x2=12*sin(2*pi*fi0*t+1) +3*sin(3*2*pi*fi0*t+3)+0.8*sin(5*2*pi*fi0*t+2)+0.02*sin(7*2*pi*fi0*t+1) +2*rand(size(t)); % the output is a sum of odd harmonics

x=[x1 x2];

%============ Reconstruction begins ============%
fi=sinfapm(x(:,1),fs); % the frequency is obtained by sinewave fitting.

Nr_cycles=floor(fi*length(x)/fs); % number of comlete cycles

N=round(Nr_cycles*fs/fi); % cutoff length for coherent sampling
x=x(1:N,:);

t=t(1:N); % cut the time axis too

Xraw=fft(x(:,2));
phase=angle(Xraw);

freq_bin=0:N-1; % frequency bin
freq_res=fs/N; % frequency resolution
freq_i=freq_bin*freq_res; % frequency axis

cutoff=ceil(N/2); % cut the first half of FFT
Xraw=2*Xraw(1:cutoff)/N;
phase=phase(1:cutoff);

max_nr_harm=7; % in practice the max number of harmonics is determined by the Nyquist frequency

I_n=zeros((max_nr_harm+1)/2,1); % amplitudes of the odd harmonics
delta_n=zeros((max_nr_harm+1)/2,1); % phase angles of the odd harmonics

% extract the harmonic information
for n=1:(max_nr_harm+1)/2
I_n(n)=abs(Xraw(round((2*n-1)*fi/freq_res)+1));
delta_n(n)=phase(round((2*n-1)*fi/freq_res)+1)+0.5*pi; % for the phase angles to be correct 0.5*pi must be added. The reason is unknown.
end
DC=abs(Xraw(1))*cos(angle(Xraw(1)))/2; % Normalization of the DC component need not multiply with 2, so the division by 2. The cosine factor determine the sign of DC offset.

fs2=300; % reconstruct the signal at a higher sampling frequency

t2=0:1/fs2:t(end);
t2=t2';

reconst=zeros(length(t2),2);
reconst(:,1)=sin(2*pi*fi*t2); % the input signal at high sampling frequency

% reconstruct the output signal by summing up the sine components
for n=1:2:max_nr_harm
reconst(:,2)=reconst(:,2)+I_n((n+1)/2)*sin(n*2*pi*fi*t2+delta_n((n+1)/2));
end
reconst(:,2)=reconst(:,2)+DC; % DC shift

plot(x(:,1),x(:,2),'k',reconst(:,1),reconst(:,2),'r')

为了展示,该代码生成一个示范信号。这个示范信号的频率、取样频率和长度都尽可能的任意(频率是个除不尽的小数,取样频率是个质数,长度是12345),也增加了比较明显的噪音。波形重构时,频率是通过对输入信号进行正弦波拟合来获得的。这一步对原信号的噪音还是十分敏感的。如果在以上代码给原信号加上高于千分之一的噪音,整个代码的结果就完全不及格了。这就要由于是后面决定谐波所处的frequency bin那步对信号频率的准确性十分敏感。

有了信号的频率,就可以进行相干取样、FFT……一切都按正常进行。

以上代码本身会给出一个结果比较。我用以上方法对一个真实的LAOS信号进行重构,得到的结果如下(黑的是实验结果,红的是重构曲线):

实际信号示范

实际信号示范