How to implement Complex Exponential Function Using Matlab ?
18 次查看(过去 30 天)
显示 更早的评论
Please
How can I implement the Complex Exponential Function mentioned in this equation:
X(N) =exp^(j*w1*N) + exp^(j*w2*N)
Suppose:
F =40KHZ
N=Range 1 to 20
w1: is the first angular frequency
w1=2*pi*F
w2: is the second angular frequency
w2=2*pi*F
Finally,
display the values are saved in X(N) in command window.
We apply fast fourier transform (FFT) on X(N) Then we plot the result.
采纳的回答
Star Strider
2023-11-3
I am not certain what you are doing or what ‘w1’ and ‘w2’ are, so using my best guess —
format longE
F = 40E+3;
N = (0:20).';
omega1 = 2*pi*F; % Guessing: 'W1'
omega2 = 4*pi*F; % Guessing: 'w2'
X = exp(1j*omega1*N) + exp(1j*omega2*N)
.
13 个评论
Muhammad Salem
2023-11-3
编辑:Muhammad Salem
2023-11-3
I'm sorry, I updated the question, please reconsider it :
w1: is the first angular frequency
w1=2*pi*F
w2: is the second angular frequency
w2=2*pi*F
Image Analyst
2023-11-3
I'm sure you made the obvious change:
omega2 = 2*pi*F;
so what went wrong? Why are you still asking? I can only assume it's not working for you. Be explicit about why Star's code with your new change of omega2 value is not working.
Muhammad Salem
2023-11-3
编辑:Muhammad Salem
2023-11-3
Yes, I am asking because I have a problem with the results and I do not know what the solution is.
Here are the results:
2.0000 + 0.0000i
2.0000 - 0.0000i
2.0000 - 0.0000i
2.0000 - 0.0000i
2.0000 - 0.0000i
2.0000 + 0.0000i
2.0000 - 0.0000i
2.0000 - 0.0000i
2.0000 - 0.0000i
2.0000 + 0.0000i
2.0000 + 0.0000i
2.0000 - 0.0000i
2.0000 - 0.0000i
2.0000 + 0.0000i
2.0000 - 0.0000i
2.0000 - 0.0000i
2.0000 - 0.0000i
2.0000 - 0.0000i
2.0000 + 0.0000i
2.0000 - 0.0000i
2.0000 + 0.0000i
Star Strider
2023-11-3
编辑:Star Strider
2023-11-3
O.K., so ‘w1’ and ‘w2’ are actually the same thing.
My code then becomes:
format longE
F = 40E+3;
N = (0:20).';
omega1 = 2*pi*F; % Guessing: 'W1'
omega2 = 2*pi*F; % Guessing: 'w2'
X = exp(1j*omega1*N) + exp(1j*omega2*N)
X =
2.000000000000000e+00 + 0.000000000000000e+00i
2.000000000000000e+00 - 7.770917663309584e-12i
2.000000000000000e+00 - 1.554183532661917e-11i
2.000000000000000e+00 - 2.331275298992875e-11i
2.000000000000000e+00 - 3.108367065323834e-11i
2.000000000000000e+00 + 1.939760553373217e-10i
2.000000000000000e+00 - 4.662550597985750e-11i
2.000000000000000e+00 - 2.872270672970367e-10i
2.000000000000000e+00 - 6.216734130647667e-11i
2.000000000000000e+00 + 1.628923846840834e-10i
2.000000000000000e+00 + 3.879521106746434e-10i
2.000000000000000e+00 - 3.183107379502750e-10i
2.000000000000000e+00 - 9.325101195971500e-11i
2.000000000000000e+00 + 1.318087140308451e-10i
2.000000000000000e+00 - 5.744541345940735e-10i
2.000000000000000e+00 - 3.493944086035134e-10i
2.000000000000000e+00 - 1.243346826129533e-10i
2.000000000000000e+00 - 8.305975312378718e-10i
2.000000000000000e+00 + 3.257847693681668e-10i
2.000000000000000e+00 - 3.804780792567517e-10i
2.000000000000000e+00 + 7.759042213492868e-10i
format shortE
X
X =
2.0000e+00 + 0.0000e+00i
2.0000e+00 - 7.7709e-12i
2.0000e+00 - 1.5542e-11i
2.0000e+00 - 2.3313e-11i
2.0000e+00 - 3.1084e-11i
2.0000e+00 + 1.9398e-10i
2.0000e+00 - 4.6626e-11i
2.0000e+00 - 2.8723e-10i
2.0000e+00 - 6.2167e-11i
2.0000e+00 + 1.6289e-10i
2.0000e+00 + 3.8795e-10i
2.0000e+00 - 3.1831e-10i
2.0000e+00 - 9.3251e-11i
2.0000e+00 + 1.3181e-10i
2.0000e+00 - 5.7445e-10i
2.0000e+00 - 3.4939e-10i
2.0000e+00 - 1.2433e-10i
2.0000e+00 - 8.3060e-10i
2.0000e+00 + 3.2578e-10i
2.0000e+00 - 3.8048e-10i
2.0000e+00 + 7.7590e-10i
whos('X')
Name Size Bytes Class Attributes
X 21x1 336 double complex
The imaginary parts are very close to zero, so using a more restricted format option, they will appear as zero. Using extended precision, this is readily apparent, and with greater precision or exponential notation (or both) this becomes clear.
EDIT — (3 Nov 2023 at 20:43)
My code does exactly what you asked, both in the original and in the edit. The ‘X’ result is a (21x1) column vector, showing both the real and imaginary parts. The size is (21x1) because ‘N’ includes zero, for a total of 21 elements. If you want it to be exactly (20x1) use the linspace function —
format longE
F = 40E+3;
N = linspace(0, 20, 20).'
N = 20×1
0
1.052631578947368e+00
2.105263157894737e+00
3.157894736842105e+00
4.210526315789473e+00
5.263157894736842e+00
6.315789473684211e+00
7.368421052631579e+00
8.421052631578947e+00
9.473684210526315e+00
omega1 = 2*pi*F;
omega2 = 2*pi*F;
X = exp(1j*omega1*N) + exp(1j*omega2*N)
X =
2.000000000000000e+00 + 0.000000000000000e+00i
-1.651586909120879e-01 + 1.993168986016039e+00i
-1.972722606816205e+00 - 3.291891804969826e-01i
4.909709741865338e-01 - 1.938800531902734e+00i
1.891634483443725e+00 + 6.493989382856979e-01i
-8.033908495827032e-01 + 1.831546653188715e+00i
-1.758947502506326e+00 - 9.518947859016555e-01i
1.093896316053294e+00 - 1.674332956650209e+00i
1.578281018953408e+00 + 1.228425425172970e+00i
-1.354563142692437e+00 + 1.471447821860900e+00i
-1.354563142806782e+00 - 1.471447821755638e+00i
1.578281018857948e+00 - 1.228425425295617e+00i
1.093896316573241e+00 + 1.674332956310511e+00i
-1.758947502432355e+00 + 9.518947860383419e-01i
-8.033908497250313e-01 - 1.831546653126284e+00i
1.891634483393261e+00 - 6.493989384326954e-01i
4.909709747886086e-01 + 1.938800531750268e+00i
-1.972722606790624e+00 + 3.291891806502813e-01i
-1.651586924591879e-01 - 1.993168985887843e+00i
2.000000000000000e+00 + 7.759042213492868e-10i
format short
X
X =
2.0000 + 0.0000i
-0.1652 + 1.9932i
-1.9727 - 0.3292i
0.4910 - 1.9388i
1.8916 + 0.6494i
-0.8034 + 1.8315i
-1.7589 - 0.9519i
1.0939 - 1.6743i
1.5783 + 1.2284i
-1.3546 + 1.4714i
-1.3546 - 1.4714i
1.5783 - 1.2284i
1.0939 + 1.6743i
-1.7589 + 0.9519i
-0.8034 - 1.8315i
1.8916 - 0.6494i
0.4910 + 1.9388i
-1.9727 + 0.3292i
-0.1652 - 1.9932i
2.0000 + 0.0000i
.
Star Strider
2023-11-3
The linspace function just creates the vector with 20 evenly-spaced elements between 0 and 20 (a opposed to the colon operator that produces 21 elements). A for loop would not change that from the vectorised version. It would simply be a bit less efficient.
It is possible to do that, however a for loop (without using linspace to create the ‘N’ vector) would produce the same as the colon operator. It would not replace the linspace call.
Muhammad Salem
2023-11-4
Thanks for your answer...
But I am required to implement it using For Loop. Can you implement it and tell me the results?
Walter Roberson
2023-11-4
Nvalues = linspace(0, 20, 20).';
num_N = length(Nvalues);
X = zeros(num_N, 1);
for Nidx = 1 : num_N
N = Nvalues(Nidx);
now do your calculation for this N
X(Nidx) = result for this N;
end
Muhammad Salem
2023-11-4
Why did you use the linspace command?
I don't need it because the for loop (Nidx) will be in place N.
Walter Roberson
2023-11-4
Your requirements from the initial question were:
N=Range 0 to 20
Finally, the values are saved in a vector 20 * 1
So you need the initial value to be 0, the final value to be 20, and for there to be 20 values total.
In order to do that as a for loop without using the linspace structure I show here, you would need
for N = 0:20/19:20
which will get you N values such as 0 1.05263157894737 2.10526315789474 but the 20'th will be 20.
Now that you are looping incrementing by 20/19 at a time... how will you know what index to store the current result at?
Muhammad Salem
2023-11-4
I am really sorry
The question has been updated. Perhaps the question contains some errors or may not be clear.
Please give me the answer again
Star Strider
2023-11-4
That simply requires minor tweaks to the existing code.
See the documentation on the fft function to perform the Fourier transform. There are abundant examples throughout Answers. (I wrote many of them.)
That result may not be very exciting to view, since ‘X’ is created by returning integer multiples of
.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1529307/image.png)
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!发生错误
由于页面发生更改,无法完成操作。请重新加载页面以查看其更新后的状态。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
亚太
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)