1樓:朝華念雙
感覺n=1000這個數值有問題,這樣的話x的值太大了。程式如下:
x='10*exp(-1000*t)*sin(2*t+pi/2)';
ezplot(x)
不過影象很怪。
我把n改為1後即n=1時的影象如下:
希望能解決您的問題。
2樓:手上青春飛翔
4.3 兩個訊號相加的生成函式sigadd.m[y,n]=sigadd(x1,n1,x2,n2)4.
4 兩個訊號相乘的生成函式sigmult.m[y,n]=sigmult(x1,n1,x2,n2)4.5 序列移位y(n)=x(n-n0)的生成函式sigshift.
m[y,n]=sigshift(x,m,n0)你的sigadd函式用法錯誤,只有四個引數(x1,n1,x2,n2)
關於matlab的問題
3樓:匿名使用者
一、快速傅利葉介紹
傅利葉原理表明:任何連續測量的時序或訊號,都可以表示為不同頻率的余弦(或正弦)波訊號的無限疊加。fft是離散傅利葉變換的快速演算法,可以將乙個訊號變換到頻域。
那其在實際應用中,有哪些用途呢?
1.有些訊號在時域上是很難看出什麼特徵的,但是如果變換到頻域之後,就很容易看出特徵(頻率,幅值,初相位);
2.fft可以將乙個訊號的頻譜提取出來,進行頻譜分析,為後續濾波準備;
3.通過對乙個系統的輸入訊號和輸出訊號進行快速傅利葉變換後,兩者進行對比,對系統可以有乙個初步認識。
假設取樣頻率fs,訊號頻率f,訊號長度l,取樣點數n。那麼fft之後結果就是乙個為n點的複數。每乙個點就對應著乙個頻率點。這個點的模值,就是該頻率值下的幅度特性。
具體跟原始訊號的幅度有什麼關係呢?
1. 假設原始訊號的峰值為a,那麼fft的結果的每個點(除了第乙個點直流分量之外)的模值就是a的n/2倍,而第乙個點就是直流分量(即0hz),它的模值是直流分量的n倍;
2. 每個點的相位呢,就是在該頻率下的訊號的相位。第乙個點表示直流分量,它的相位是該頻率的初相位,matlab以cos為底的,若訊號時正弦形式sin(t),則變成cos(t-pi/2)即可。
取樣頻率fs,被n-1個點平均分成n等份,每個點的頻率依次增加。為了方便進行fft運算,通常n取大於訊號長度l的2的整數次方。
例如某點n所表示的頻率為:fn=(n-1)*fs/n。由上面的公式可以看出,fn所能分辨到頻率為為fs/n。
如果取樣頻率fs為1024hz,取樣點數為1024點,則可以分辨到1hz。
1024hz的取樣率取樣1024點,剛好是1秒,也就是說,取樣1秒時間的訊號並做fft,則結果可以分析到1hz。如果取樣2秒時間的訊號,則n為2048,並做fft,則結果可以分析到0.5hz。
如果要提高頻率分辨力,則必須增加取樣點數,也即取樣時間。頻率解析度和取樣時間是倒數關係。
假設fft之後某點n用複數a+bi表示,該複數的模就是an=sqrt(a*a+b*b),相位就是pn=atan2(b,a)。根據以上的結果,就可以計算出n點(n≠1,且n<=n/2)對應的訊號的表示式為:an/(n/2)*cos(2*pi*fn*t+pn),即2*an/n*cos(2*pi*fn*t+pn);對於n=1點的訊號,是直流分量,幅度即為a1/n。
由於fft結果的對稱性,通常我們只使用前半部分的結果,即小於取樣頻率一半的結果。
二、例子
假設我們有乙個訊號,它含有5v的直流分量,頻率為50hz、相位為-30度、幅度為7v的交流訊號以及乙個頻率為90hz、相位為90度、幅度為3v的交流訊號。數學表示式為:
x = 5 + 7*cos(2*pi*15*t - 30*pi/180) + 3*cos(2*pi*40*t - 90*pi/180)。
我們以128hz的取樣率對這個訊號進行取樣,總共取樣256點。按照我們上面的分析,fn=(n-1)*fs/n,我們可以知道,每兩個點之間的間距就是0.5hz。
我們的訊號有3個頻率:0hz、15hz、40hz
出於程式設計方便,因為直流分量的幅值a1/n,其他點幅值為an/(n/2),故直流分量最後要除以2才是對的。
一般fft所用資料點數n與原含有訊號資料點數l相同,這樣的頻譜圖具有較高的質量,可減小因補零或截斷而產生的影響。
三、matlab**
fs = 128; % 取樣頻率
t = 1/fs; % 取樣時間
l = 256; % 訊號長度
t = (0:l-1)*t; % 時間
x = 5 + 7*cos(2*pi*15*t - 30*pi/180) + 3*cos(2*pi*40*t - 90*pi/180); %cos為底原始訊號
y = x + randn(size(t)); %新增雜訊
figure;
plot(t,y)
title('加雜訊的訊號')
xlabel('時間(s)')
快速傅利葉變換之matlab
n = 2^nextpow2(l); %取樣點數,取樣點數越大,分辨的頻率越精確,n>=l,超出的部分訊號補為0
y = fft(y,n)/n*2; %除以n乘以2才是真實幅值,n越大,幅值精度越高
f = fs/n*(0:1:n-1); %頻率
a = abs(y); %幅值
p = angle(y); %相值
figure;
subplot(211);plot(f(1:n/2),a(1:n/2)); %函式fft返回值的資料結構具有對稱性,因此我們只取前一半
title('幅值頻譜')
xlabel('頻率(hz)')
ylabel('幅值')
subplot(212);plot(f(1:n/2),p(1:n/2));
title('相位譜頻')
xlabel('頻率(hz)')
ylabel('相位')
快速傅利葉變換之matlab
原始訊號中x = 5 + 7*cos(2*pi*15*t - 30*pi/180) + 3*cos(2*pi*40*t - 90*pi/180);
可以看到,幅值頻譜中15hz(與數學表示式中的15hz對應),幅值7.063(與7對應),相位頻譜中初相位-0.5072(與-30*pi/180對應)
幅值頻譜中40hz(與數學表示式中的40hz對應),幅值3.082(與3對應),相位頻譜中初相位-1.57(與-90*pi/180對應)
下面驗證matlab中快速傅利葉變換是以cos為底的。
1.原始訊號換為:x = 5 + 7*sin(2*pi*15*t - 30*pi/180) + 3*sin(2*pi*40*t - 90*pi/180); %sin為底的原始訊號
快速傅利葉變換之matlab
幅值頻譜明顯對應正確,只需驗證相位頻譜。由於sin(t + p1)=cos(t + p1 - pi/2),故
-30*pi/180 - pi/2 = -2.0944,這與相位頻譜中-2.093對應
-90*pi/180 - pi/2 = -3.1416,這與相位頻譜中-3.057對應
若想提高結果的精度,可以提高訊號長度l和取樣點數n。
2.原始訊號若為x = 5 + 7*cos(2*pi*15*t - 30*pi/180) + 3*sin(2*pi*40*t - 90*pi/180); %sin和cos為底的原始訊號
同樣驗證正確。
matlab問題
4樓:
num=[1];
原始開環傳遞函式分子多項式
den=[1 6 11 6];
原始開環傳遞函式分母多項式
numcf=[kp];
開環傳遞函式分子放大係數
dencf=[1];
開環傳遞函式分母放大係數
numf=conv(numcf,num);
開環傳遞函式分子多項式
denf=conv(dencf,den);
開環傳遞函式分子多項式
[numc,denc]=cloop(numf,denf);
閉環系統
step(numc,denc);
系統階躍響應
matlab相關問題
5樓:
先設計原型濾波器再變換成iir是很經典的設計思路。早年計算機不發達的時候,電子工程師們都是這麼做的。只不過現在matlab裡提供了一些整合的設計功能,把這些設計步驟整合起來便於使用。
本質上等價,但是matlab自己的函式不清楚到底裡面用的是雙線性法還是衝擊不變法做的。注意衝擊不變法不能設計帶阻或高通濾波器,而雙線性法的線性相位特性不佳。具體的關於數字濾波器設計的經典思路(低通原型->變換),一般dsp教材上都會有,這裡不多說了。
關於三個函式:
freqs是給出s引數系統函式,畫幅頻特性曲線。s引數是模擬系統用的,**是laplace變換。
freqz是給出z引數系統函式,畫幅頻特性曲線。z引數是數字系統用的,**是z變換。
上面兩種引數在訊號與系統的教材中有。
plot是乙個一般的繪圖函式,需要給出函式的自變數和因變數才能畫。不知道你是用什麼方法得到要畫的圖的。抑或你實際呼叫了某個類的成員函式。
請給出你plot裡面怎麼寫的,相應變數是怎麼得到的。
matlab如何解決實際問題
6樓:匿名使用者
matlab功能異常強大,不僅工具箱種類齊全,並且裡面的**都有優化過,最後的結果比你自己用vc好得多;
另外就是matlab很好用,可以說相當容易上手,檢查錯誤也容易。
至於處理的問題非常多啊,影象處理,數值分析,神經網路,simulink...很實用的一款軟體。
我主要是做影象處理和數值分析相關的一些工作,所有的問題matlab都能處理。
7樓:匿名使用者
這要看你的情況 指的是具體應用還是什麼
比如最簡單的問題啊 數學問題 就可以實際解決了
matalb功能的強大 不是一般的強大的
關於matlab的問題
8樓:匿名使用者
matlab中只能附加有正態密度曲線的直方圖使用函式histfit
函式 histfit
格式 histfit(data) %data為向量,返回直方圖和正態曲線。
histfit(data,nbins) % nbins指定bar的個數,預設時為data中資料個數的平方根。
例》r = normrnd (10,1,100,1);
>>histfit(r)
希望能對你有所幫助!
matlab問題,乙個matlab問題
a b是矩陣的關係運算,即對應位元素比較,結果為邏輯矩陣,真為1,假為0,故 a b 0,0 邏輯矩陣可以用來邏輯索引,即在原矩陣中取出對應邏輯矩陣為真的那些位,例如a 1,2,3 4,5,6 7,8,9 c 1,0,0 0,1,0 0,0,1 那麼a c 1 5 9 a a b b a b 本意是...
matlab中函式引數的問題,matlab非線性規劃fmincon函式中目標函式引數傳遞問題,怎麼解?
使用匿名函式控制代碼就可以了 fmincon 需要的函式fun只有乙個輸入引數 fun x 而你的函式需要多乙個能改變的變數 那麼形式變成 myfun p,x p就是你要傳遞的引數,x還是原來的輸入 當然首先,你得寫個m檔案,假設為myfun.m,其內容大致如下 function out myfun...
matlab的全排列問題,matlab中全排列的問題
哈哈,我用的是 遞增進製數法 方法源自網上 如下 以下計算出新的排列 author by wacs5 排列的總個數為n 在指定位置插入 即可 clc clear n 3 n 1 prod 1 n allorder k zeros 1,n 1 ticfor allorder m 1 n 1 產生n 個...