Professional Documents
Culture Documents
HCM
TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA ĐIỆN-ĐIỆN TỬ
1
BÀI 2:
Ví dụ: Cho tín hiệu hình sin có tần số 3KHz đi qua bộ ADC của AIC32. Tín hiệu sau đó
được
cho đi ngược lại bộ DAC của AIC32. Quan sát tín hiệu được hiển thị trên máy tính.
Trong ví dụ này tín hiệu từ máy phát sóng x(t) sau khi đi qua bộ AIC32 trong Kit
C6713DSK sẽ là tín hiệu được lấy mẫu x(nT). x(nT) sẽ đi qua hệ thống là vi xử lí
DSP6713. Trong ví dụ này, tín hiệu ngõ ra của hệ thống sẽ giống tín hiệu ngõ vào y(n) =
x(nT). Sau đó y(n) sẽ được đưa ngược lại bộ DAC của AIC32 và khôi phục lại thành tín
hiệu y(t). Tín hiệu y(t) sẽ được đưa vào và hiển thị trên máy tính
Chương trình hệ thống cho DSP6713 để lấy tín hiệu ngõ ra là tín hiệu ngõ vào
A. Hệ thống này được thực hiện trên kit bằng chương trình sau (viết bằng ngôn ngữ C)
B. Mở project bộ lọc FIR:
1. Trong chương trình:
2. Chọn project FIR theo đường dẫn: C:\Program Files \CCStudio_v3.1\ myprojects\
FIR\FIR.pjt
3. Mở chương trình chính FIR.c
Viết lại chương trình chính của bộ lọc FIR theo chương trình sau:
void main()
{
comm_intr(); //init DSK, codec, McBSP
while(1); //infinite loop
}
1. Chọn Project ➔ Rebuild All hoặc nhấn nút có hình 3 mũi tên xuống trên toolbar.
CCS sẽ dịch tất cả các tập tin C và Assembly. Các tập tin đối tượng tạo ra được
liên kết với các tập tin thư viện. Cuối cùng, CCS tạo ra một tập tin thực thi FIR.out
có thể nạp lên kit để chạy. (Nếu chương trình biên dịch bị lỗi thì kiểm tra lại và
sửa lỗi, sau đó biên dịch lại).
2. Chọn Debug ➔ Connect hoặc bấm tỗ hợp phím Alt+C để kết nối với kit.
3. Chọn File ➔Load Program, mở thư mục Debug trong thư mục FIR, chọn tập tin
FIR.out để nạp nó lên trên kit. Sau đó, chọn Debug ➔ Run để chạy chương trình
trên kit.
4. Khi cần thay đổi hay chỉnh sửa chương trình cho một ví dụ khác, ta chọn Debug
➔ Halt để ngắt kết nối với kit, rồi thực hiện lại các bước như ban đầu.
Mở nguồn của máy phát sóng. Tạo một tín hiệu hình sine 3KHz từ máy phát sóng và
quan sát dạng sóng ngõ ra.
Sau khi đã thực hiện ví dụ trên, ta tiếp tục thực hiện việc thay đổi tần số lấy mẫu để thấy
rõ hiện tượng aliasing khi không thỏa mãn điều kiện lấy mẫu tín hiệu.
AIC23 được cố định tần số lấy mẫu và ta chỉ có thể thay đổi chương trình trong vi xử lý
DSP6713. AIC có tần số lấy mẫu là 8KHz, vậy nên trong 1 giây sẽ có 8000 mẫu được
đưa tới vi xử lý DSP6713. Chúng ta có thể giảm tốc độ lấy mẫu xuống còn 4KHz bằng
cách thay vì vi xử lý lấy toàn bộ mẫu, ta sẽ lấy một mẫu và bỏ 1 mẫu. Như vậy trong 1
giây, chúng ta chỉ nhận 4000 mẫu, hay nói cách khác, tốc độ lấy mẫu được thay đổi
xuống còn 4KHz.
Để thực hiện điều này, ta nhân tín hiệu ngõ vào với một chuỗi tuần hoàn [1, 0, 1, 0, 1,
0,…]. Việc này có thể thực hiện trên chương trình bằng dòng lênh sau:
yn = pulse * input_sample();
pulse = (pulse==0);
Thực hiện:
Cho tín hiệu hình sin có tần số 3KHz đi qua hệ thống. Tín hiệu được lấy mẫu với tần
số 4KHz. Tín hiệu sau đó được đi qua bộ lọc thông thấp tần số 4KHz. Tín hiệu ngõ ra
có tần số bao nhiêu?
=>Tín hiệu hình sin có tần số 3KHz, sau khi được lấy mẫu với tần số 4KHz sẽ có phổ
được lặp lại sau mỗi khoảng 4KHz. Khi đi qua bộ lọc thông thấp tần số 4KHz, sẽ có 2
vạch phổ còn tồn tại tại tần số 1KHz và 3KHz. Vậy tín hiệu ngõ ra sẽ là tổng của 2 tín
hiệu có tần số 1KHz và 3KHz.
Viết lại chương trình chính của bộ lọc FIR theo chương trình sau:
void main()
{
comm_intr(); //init DSK, codec, McBSP
while(1); } //infinite loop
Quan sát và vẽ lại dạng dóng và phổ của tín hiệu ngõ ra. So sánh với trường hợp ví
dụ khi ta lấy mẫu với tần số 8KHz. Nhận xét.
=>Tín hiệu hình sin 3KHz khi lấy mẫu với tần số 8KHz, tần số này thỏa mãn định lý lấy
mẫu nên tín hiệu ngõ ra sau khi phục hồi sẽ phổ là 1 vạch tại tần số 3KHz. Còn khi lấy
mẫu với tần số 4KHz, tín hiệu có phổ lặp lại sau mỗi khoảng tần số 3KHz, nên sẽ xuất
hiện vạch phổ tại tần số 1KHz. Vậy nên tín hiệu ngõ ra khi lấy mẫu với tần số 4KHz sẽ
có 2 vạch phổ tại 1KHz và 3KHz. Điều này phù hợp với tính toán.
Cho tín hiệu xung vuông có tần số 0.5KHz đi qua hệ thống. Tín hiệu được lấy mẫu với
tần số 8KHz. Tín hiệu sau đó được phục hồi lý tưởng. Quan sát và vẽ lại dạng dóng và
phổ của tín hiệu ngõ ra. Nhận xét và giải thích ngắn gọn.
Viết lại chương trình chính của bộ lọc FIR theo chương trình sau:
void main()
{ comm_intr(); //init DSK, codec, McBSP
while(1); } //infinite loop
Tín hiệu xung vuông có tần số 0.5 KHz khi lấy mẫu sẽ có các vạch phổ tại 0.5KHz, 1.5
KHz, 2.5 KHz, 3.5KHz … Tín hiệu hiển thị trên máy tính đúng như lý thuyết
Thay đổi tần số lấy mẫu còn 4KHz. Quan sát và vẽ dạng sóng và phổ tín hiệu ngõ ra.
So sánh 02 trường hợp khi lấy mẫu với tần số 4KHz và 8KHz của xung vuông tần số
0.5KHz. Nhận xét và giải thích ngắn gọn.
Viết lại chương trình chính của bộ lọc FIR theo chương trình sau:
void main()
{
comm_intr(); //init DSK, codec, McBSP
while(1); } //infinite loop
Tín hiệu xung vuông tần số 0.5KHz khi lấy mẫu với tần số 4KHz. Các hài ở tần số
0.5KHz và 1.5KHz sẽ được giữ nguyên. Các hài 2.5KHz bị aliasing thành tần số
01.5KHz và cộng vào hài 1.5KHz. Tương tự hài 3.5KHz bị aliasing và bị cộng vào hài
0.5KHz. (sở dĩ có thêm hài tại 2.5KHz và 3.5KHz là vì: vạch phổ tại -0.5KHz và -
1.5KHz sẽ được lặp lại sau mỗi khoảng 4KHz nên xuất hiện tại 2.5KHz và 3.5KHz).
Mỗi mẫu tín hiệu được AIC32 mã hóa và đưa tới vi xử lý sẽ có dạng chuỗi bit:
[b1, b2, b3, b4, b5, b6, b7, b8, 0, …0] (24 số không)
Trong đó bit b1 là MSB và b8 là LSB
Chúng ta có thể thay đổi số mức lượng tử xuống thấp hơn bằng cách dịch phải rồi dịch
trái chuỗi bit. Ví dụ ta có thể thay đổi từ 256 mức lượng tử (tương ứng 8bit) xuống thành
128 mức (tương ứng 7bit) bằng cách bỏ đi bit cuối cùng b8. Điều này được thực hiện
bằng cách dịch phải rồi dịch trái 25bit như sau:
[b1, b2, b3, b4, b5, b6, b7, b8, 0, …0] => [0, 0,…0, b1, b2, b3, b4, b5, b6, b7,] => [b1,
b2, b3, b4, b5, b6, b7, 0, 0, …0]
Việc này có thể thực hiện trên chương trình bằng dòng lênh sau:
1. Cho tín hiệu hình sin có tần số 3KHz đi qua hệ thống. Tín hiệu được lấy mẫu
với tần số 8KHz. Mỗi mẫu tín hiệu được mã hóa thành chuỗi 8bit. Tín hiệu sau
đó được phục hồi lý tưởng. Quan sát và vẽ dạng sóng và phổ tín hiệu ngõ ra.
Viết lại chương trình chính của bộ lọc FIR theo chương trình sau:
void main()
{
comm_intr(); //init DSK, codec, McBSP
while(1); //infinite loop
}
Tín hiệu hình sin có phổ là 1 vạch tại tần số 3KHz. Tín hiệu hình sin được mã hóa bằng
8bit (256 mức lượng tử), khi này mức sai số lượng tử đủ nhỏ để phục hồi lại được hình
sin như ban đầu.
Thực hiện việc giảm dần số bit mã hóa xuống còn 6, 4, 2, 0 bit. Quan sát và vẽ dạng
sóng và phổ tín hiệu ngõ ra. Nhận xét.
+Trường hợp mỗi mẫu được mã hóa bằng 6bit Viết lại chương trình chính của bộ
lọc FIR theo chương trình sau:
void main()
{
comm_intr(); //init DSK, codec, McBSP
while(1); //infinite loop
}
Tín hiệu hình sin được mã hóa bằng 6bit (64 mức lượng tử), khi này sai số lượng tử hiệu
dụng sẽ tăng lên 4 lần so với việc mã hóa bằng 8bit. Như vậy tín hiệu hình sin khi phục
hồi sẽ không còn được là hình sin như ban đầu. Theo như kết quả thí nghiệm, lúc này 1
vạch phổ nhỏ xuất hiện thêm tại tần số 1KHz chứ không phải chỉ là 1 vạch phổ duy nhất
tại tần số 3KHz.
Viết lại chương trình chính của bộ lọc FIR theo chương trình sau:
void main()
{
comm_intr(); //init DSK, codec, McBSP
while(1); //infinite loop
}
Tín hiệu hình sin được mã hóa bằng 4bit (16 mức lượng tử), khi này sai số lượng tử hiệu
dụng sẽ tăng lên 16 lần so với việc mã hóa bằng 8bit. Như vậy tín hiệu hình sin khi phục
hồi sẽ không còn được là hình sin như ban đầu. Theo như kết quả thí nghiệm, lúc này
vạch phổ tại tần số 1KHz sẽ lớn hơn so với trường hợp mã hóa bằng 6bit.
Viết lại chương trình chính của bộ lọc FIR theo chương trình sau:
void main()
{
comm_intr(); //init DSK, codec, McBSP
while(1); //infinite loop
}
Tín hiệu hình sin được mã hóa bằng 2bit (44 mức lượng tử), khi này sai số lượng tử hiệu
dụng sẽ tăng lên 128 lần so với việc mã hóa bằng 8bit. Như vậy tín hiệu hình sin khi phục
hồi sẽ không còn được là hình sin như ban đầu. Theo như kết quả thí nghiệm, lúc này
vạch phổ tại tần số 1KHz rất lớn. Tại tần số 2KHz cũng bắt đầu xuất hiện 1 vạch phổ
nhỏ. Tín hiệu lúc này khác rất nhiều so với tín hiệu hình sin ban đầu.
+Trường hợp mỗi mẫu được mã hóa bằng 0bit.
Viết lại chương trình chính của bộ lọc FIR theo chương trình sau:
void main()
{
comm_intr(); //init DSK, codec, McBSP
while(1); //infinite loop
}
Tín hiệu mã hóa bằng 0bit, nghĩa là mỗi mẫu tín hiệu có giá trị bất kỳ đều được mã hóa
thành chuỗi bit 0000… Như vậy tín hiệu sau khi được phục hồi chỉ là 1 đường tín hiệu
DC có giá trị 0V.
Cho tín hiệu xung vuông có tần số 3KHz đi qua hệ thống. Tín hiệu được lấy mẫu với
tần số 8KHz. Mỗi mẫu tín hiệu được mã hóa thành chuỗi 8bit. Tín hiệu sau đó được
phục hồi lý tưởng. Quan sát và vẽ dạng sóng và phổ tín hiệu ngõ ra.
Viết lại chương trình chính của bộ lọc FIR theo chương trình sau:
void main()
{
comm_intr(); //init DSK, codec, McBSP
while(1); //infinite loop
}
Tín hiệu xung vuông có tần số 3KHz sẽ có các vạch phổ tại các tần số 3KHz, 9KHz,
15KHz… Chương trình hiển thị chỉ hiển thị và vẽ tín hiệu trong khoảng tần số [0, 4KHz],
nên tín hiệu xung vuông được hiển thị chỉ có phổ là 1 vạch tại tần số 3KHz. Tín hiệu
xung vuông được mã hóa bằng 8bit (256 mức lượng tử), khi này mức sai số lượng tử đủ
nhỏ để phục hồi lại được như ban đầu.
Thực hiện việc giảm dần số bit mã hóa xuống còn 6, 4, 2, 0 bit. Quan sát và vẽ dạng
sóng và phổ tín hiệu ngõ ra. So sánh và nhận xét với trường hợp sóng sin.
Viết lại chương trình chính của bộ lọc FIR theo chương trình sau:
void main()
{
comm_intr(); //init DSK, codec, McBSP
while(1); //infinite loop
}
Tín hiệu xung vuông được mã hóa bằng 6bit (64 mức lượng tử), khi này sai số lượng tử
hiệu dụng sẽ tăng lên 4 lần so với việc mã hóa bằng 8bit. Theo như kết quả thí nghiệm,
lúc này 1 vạch phổ nhỏ xuất hiện thêm tại tần số 1KHz chứ không phải chỉ là 1 vạch phổ
duy nhất tại tần số 3KHz. Điều này thể hiện tín hiệu ngõ ra bị méo dạng so với tín hiệu
ban đầu.
Trường hợp mỗi mẫu được mã hóa bằng 4bit.
Viết lại chương trình chính của bộ lọc FIR theo chương trình sau:
void main()
{
comm_intr(); //init DSK, codec, McBSP
while(1); //infinite loop
}
Tín hiệu xung vuông được mã hóa bằng 4bit (16 mức lượng tử), khi này sai số
lượng tử hiệu dụng sẽ tăng lên 16 lần so với việc mã hóa bằng 8bit. Theo như kết quả thí
nghiệm, lúc này 1 vạch phổ nhỏ xuất hiện thêm tại tần số 1KHz chứ không phải chỉ là 1
vạch phổ duy nhất tại tần số 3KHz. Vạch phổ tại tần số 1KHz lớn hơn so với trường hợp
mã hóa bằng 6bit. Điều này thể hiện tín hiệu ngõ ra bị méo dạng hơn so với trường hợp
mã hóa bằng 6bit.
Viết lại chương trình chính của bộ lọc FIR theo chương trình sau:
void main()
{
comm_intr(); //init DSK, codec, McBSP
while(1); //infinite loop
}
Tín hiệu xung vuông được mã hóa bằng 2bit (4 mức lượng tử), khi này sai số lượng tử
hiệu dụng sẽ tăng lên 64 lần so với việc mã hóa bằng 8bit. Theo như kết quả thí nghiệm,
lúc này vạch phổ tại tần số 1KHz sẽ lớn hơn nhiều so với trường hợp mã hóa bằng 4bit.
Đồng thời tại tần số 2KHz cũng bắt đầu xuất hiện thêm 1 vạch phổ nhỏ. Tín hiệu sẽ rất
khác so với tín hiệu ban đầu.
+Trường hợp mỗi mẫu được mã hóa bằng 0bit.
Viết lại chương trình chính của bộ lọc FIR theo chương trình sau:
void main()
{
comm_intr(); //init DSK, codec, McBSP
while(1); //infinite loop
}
Tín hiệu mã hóa bằng 0bit, nghĩa là mỗi mẫu tín hiệu có giá trị bất kỳ đều được mã hóa
thành chuỗi bit 0000… Như vậy tín hiệu sau khi được phục hồi chỉ là 1 đường tín hiệu
DC có giá trị 0V.
5. Một hệ thống có tần số lấy mẫu fs = 8KHz. Xác định tần số cắt của bộ tiền lọc lý
tưởng để không xảy ra hiện tượng aliasing. Giải thích.
𝑓𝑠 8
Để không xảy ra hiện tượng aliasing thì tần số cắt 𝑓 c ≤ = = 4 kHz
2 2
6. Một tín hiệu x(t) = 5 𝐬𝐢𝐧(𝟔𝝅𝒕) (t: ms). Xác định tần số lấy mẫu thấp nhất để có
thể
phục hồi lại tín hiệu. Tín hiệu được lấy mẫu với tần số 4KHz. Sau đó tín hiệu được
phục hồi lý tưởng. Xác định tín hiệu sau khi được phục hồi lý tưởng. Giải thích ngắn
gọn.
Tín hiệu được lấy mẫu với tần số 4 kHz. Tín hiệu sau khi được phục hồi lý tưởng:
7. Cho một tín hiệu có tầm toàn thang R = 10V. Xác định số bit B để mã hóa tín hiệu
được sai số lượng tử hiệu dụng (rms) không quá 50 microV.
Số bit B để mã hóa tín hiệu được sai số lượng tử hiệu dụng (rms) không quá 50 microV:
𝑅 𝑅 10
erms = ≤ 50*10−3 => B ≥ log 2 = log 2 = 5.8514
2𝐵 √12 50√12 50√12
B= 6 bit
8. Cho một tín hiệu lưỡng cực có tầm toàn thang là 16V, được mã hóa thành 4bit
bằng phương pháp rounding. Các mẫu tín hiệu có giá trị: -7.9, -7.1,- 6.8,- 5.5,-3.1, 0,
1.3, 2.6, 5.8, 6.9.
𝑅 16
Q= = =1V
24 16
Xác định chuỗi bit cho các mẫu trên nếu mã hóa bằng :
0 1000 0000
CBGD nhận
Điểm đánh giá
xét và ký tên
Tần số
(Hz)
100 500 1000 2000 2400 2500 2600 2700 2800 2900 3000 3200 3400 3600
Biên
độ
Phổ (V) 6.5 6.5 5.9 4.9 5 2.9 0.5 0.2 0.6 3.1 5.8 6.6 6.5 5.7
Sóng 180 210 200 200
200 210 200 200 280 100 15 5 28 100
(mV)
• Đặc tính của bộ lọc: Bộ lọc có tính chắn dải với các giá trị ngõ vào có tần
số nằm ngoài đoạn 2500Hz – 2900Hz có biên độ suy giảm không đáng kể,
và giá trị biên độ ở ngõ ra của các ngõ vào có giá trị tần số nằm trong
khoảng 2500Hz – 2900Hz suy giảm mạnh.
2. Tạo một sóng vuông từ máy phát sóng, lần lượt thay đổi tần số của tín hiệu
vào ghi nhận các thành phần tần số của ngõ ra. Giải tích tại sao có dạng phổ
này?*
Giải thích Do sóng vuông là tổng của vô số tín hiệu tuần hoàn sin
(các hài), tần số của mỗi hài là 𝑓𝑘 = 𝑘𝑓0 (𝑘 = 1,2, … ), và
biên độ của hài cơ bản (𝑓0 ) có giá trị lớn nhất và biên độ
của các hài càng giảm dần khi tần số càng cao.
Đối với sóng vuông có các thành phần hài cơ bản nằm xa
dải chắn thì càng có nhiều thành phần tần số xuất hiện và
với các sóng vuông có thành phần sóng hài cơ bản nằm
gần dải chắn thì càng có ít thành phần tần số xuất hiên.
- Thiết kế, thực hiện và kiểm tra bộ lọc FIR thông dải bằng phương pháp Kaiser
window với các thông số như sau:
• Chiều dài đáp ứng xung: 63.
• Tần số cắt: 1500 và 2000 Hz.
• Giá trị của 𝛽 = 5.
• Tần số lấy mẫu: 8 KHz
1. Đáp ứng cảu bộ lọc thiết kế dùng MATLAB:
- Các giá trị đáp ứng xung:
-1 13 16 -34 -62 41 138
0 -208 -92 215 185 -134 -180
23 0 -30 325 328 -612 -978
579 1834 0 -2545 -1126 2711 2503
-2094 -3640 789 4081 789 -3640 -2094
2503 2711 -1126 -2545 0 1834 579
-978 -612 328 325 -30 0 23
-180 -134 185 215 -92 -208 0
138 41 -62 -34 16 13 -1
Sóng 0 0 0 0
0 0 20 100 160 200 2000 180 100 25
(mV)
Đặc tính của bộ lọc: bộ lọc có tính thông dải, các thành phần ngõ vào ở tần số thuộc
khoảng từ 1600 – 2000 Hz giữ được nguyên giá trị ban đầu (nếu có suy giảm thì cũng
không đáng kể), các tần số nằm ngoài khoảng này điều suy giảm mạnh (biên độ rất nhỏ
so với những thành phần ngõ vào có tần số nằm trong dải thông).
2. Tạo một sóng vuông từ máy phát sóng, lần lượt thay đổi tần số của tín hiệu vào
ghi nhận các thành phần tần số của ngõ ra. Giải tích tại sao có dạng phổ này?
𝑓𝑖 (𝐻𝑧) 100 200 550 900
Đối với sóng vuông có các thành phần sóng hài cơ bản
nằm xa dải thông (thành phần phía tần số thấp của bộ lọc
thông dải) thì sẽ càng thấy ít các thành phần tần số của
sóng do đa phần những thành phần tần số có biên độ lớn
của sóng đầu vào đều nằm trong dài chắn của bộ lọc, còn
các thành phần tần số cao thì lại có biên độ quá nhỏ do đó
có ít thành phần tần số có thể quan sát được. Do đó các
sóng vuông có thành phần hài cơ bản càng gần với dải
thông của bộ lọc chắn dải thì càng dễ dàng quan sát được
nhiều thành phần hài khác hơn.
5.2/ Các bộ lọc IIR.
- Thiết kế, thực hiện và kiểm tra một bộ lọc IIR chắn dải bậc 10, tần số trung tâm
1750 Hz, sử dụng phương pháp Eliptic với các thông số như sau:
• Tần số cắt: 1700 Hz và 1800 Hz
• Độ gợn dải thông và dải chắn tương ứng là 1 dB và 60 dB
• Tần số lấy mẫu: 800 Hz
1. Đáp ứng cảu bộ lọc thiết kế dùng MATLAB:
Tần số
(Hz)
100 500 1000 1400 1700 1750 1800 2000 3000 4000
Biên
độ
0.06-
Sóng (V) 0.2 0.2 0.2 0.2 0-0.1 0-0.2 0.18 0.2 0.2
0.1
• Đặc tính bộ lọc: Bộ lọc cho phép các thành phần tần số ngoài khoảng 1700-
1800Hz đi qua với biên độ gần như không đổi, các thành phần tần số trong
khoảng này có biên độ rất bé hoặc gần như bằng 0. Các thành phần tần số
cắt có biên độ suy giảm.
2. Tạo một xung vuông từ máy pháy sóng, lần lượt thay đổi tần số của tín
hiệu vào ghi nhận các thành phần tần số của ngõ ra. Giải thích tại sao có
dạng phổ này?
- Thiết kế, thực hiện và kiểm tra một bộ lọc IIR thông dải thuộc loại Chebyshev 2
với các thông số như sau:
• Bậc bộ lọc: 36.
• Tần số cắt dải chắn: 1600 và 2400 Hz
• Độ gợn dải chắn 100 dB
• Tần số lấy mẫu: 8 KHz
1. Đáp ứng cảu bộ lọc thiết kế dùng MATLAB:
(Hz)
100 500 1600 1800 2000 2300 2800 3000 3500 4000
Biên
độ
Phổ (V) 0 0 0.5 10 4 6 0 0 0 0
• Đặc tính bộ lọc: Bộ lọc cho phép các thành phần tần số trong
khoảng 1600-2400Hz đi qua với biên độ gần như không đổi, các
thành phần tần số ngoài khoảng này có biên độ rất bé hoặc gần như
bằng 0. Các thành phần tần số cắt có biên độ suy giảm.
2. Tạo một xung vuông từ máy pháy sóng, lần lượt thay đổi tần số của tín hiệu vào
ghi nhận các thành phần tần số của ngõ ra. Giải thích tại sao có dạng phổ này?
Giải thích Do sóng vuông là tổng của vô số tín hiệu tuần hoàn sin
(các hài), tần số của mỗi hài là 𝑓𝑘 = 𝑘𝑓0 (𝑘 = 1,2, … ),
và biên độ của hài cơ bản (𝑓0 ) có giá trị lớn nhất và biên
độ của các hài càng giảm dần khi tần số càng cao.
1. PAM 4 mức:
if (j_PAM==12)
{
j_PAM=0;
sample_data = sample_data >> 2;
}
i_PAM++;
return;
}
void main()
{
i_PAM=0;
}
Hình ảnh xuất ra:
2. Sau khi biên dịch thành công, nạp chương trình lên kit và chạy thử
3. Mở máy phát sóng lên và quan sát dạng sóng xuất ra
4. Chọn View → Graph → Time/Frequency. Thay đổi các tùy chọn trong cửa sổ :
Acquisition Buffer Size, Display Data Size, DSP Data Type, Sample Rate
#include "DSK6713_aic23.h"
Uint32 fs=DSK6713_AIC23_FREQ_8KHZ;
#include <math.h>
//Khởi động:
int i_PAM;
int j_PAM;
int k;
int i=0;
int sample_data;
i_PAM=0;
j_PAM=0;
out_buffer[i++] = output;
if (i==256)
i = 0;
j_PAM=0;
i_PAM++;
return;
void main()
i_PAM=0;
Mẫu vào có giá trị 0x0005 (tức là 00000000 00000101). Mẫu này đầu tiên được
chứa vào biến sample_data.
#include "DSK6713_aic23.h"
Uint32 fs=DSK6713_AIC23_FREQ_8KHZ;
#include <math.h>
//Khởi động:
int i_PAM;
int j_PAM;
int k;
int data_4PAM[16] =
{0x7FFF,0x6EEE,0x5DDD,0x4CCC,0x3BBB,0x2AAA,0x1999,0x0888,-0x0889,-
0x199A,-0x2AAB,-0x3BBC,-0x4CCD,-0x5DDE,0x6EEF,-0x8000};
int out_buffer[256];
int i=0;
int sample_data;
i_PAM=0;
j_PAM=0;
out_buffer[i++] = output;
if (i==256)
i = 0;
j_PAM=0;
}
i_PAM++;
return;
void main()
i_PAM=0;
Mẫu vào có giá trị 0x0014 (tức là 00000000 00010100). Mẫu này đầu tiên được
chứa vào biến sample_data.
-
-